最簡單的定製openwrt,用線上編譯來做一個不怕恢復出廠設定的rom

上官飞鸿發表於2024-11-07

簡介:

這兩天在除錯一些openwrt裝置,但是調錯了怎麼辦?恢復出廠設定是最簡單的。

可是一頓操作猛如虎,遠端除錯openwrt,這麼恢復出廠設定呢?連pppoe撥號都沒有了,動態域名也沒有了,怎麼辦?

定製rom是唯一的出路。

官方說明:

[OpenWrt Wiki] UCI預設設定

官方示例:

cat << "EOF" > /etc/uci-defaults/99-custom
uci -q batch << EOI
set network.lan.ipaddr='192.168.178.1'
set wireless.@wifi-device[0].disabled='0'
set wireless.@wifi-iface[0].ssid='OpenWrt0815'
add dhcp host
set dhcp.@host[-1].name='bellerophon'
set dhcp.@host[-1].ip='192.168.2.100'
set dhcp.@host[-1].mac='a1:b2:c3:d4:e5:f6'
rename firewall.@zone[0]='lan'
rename firewall.@zone[1]='wan'
rename firewall.@forwarding[0]='lan_wan'
EOI
EOF

線上自定義構建

OpenWrt Firmware Selector

輸入你的路由器型號,篩選並選中對應的路由器。

點開這個定製包和首次執行指令碼的箭頭

安裝的包和第一次啟動的指令碼。

安裝的包

這個就仁者見仁智者見智了,我也就改dnsmasq為dnsmasq-full

# 新增中文介面:
# luci-i18n-base-zh-cn luci-i18n-opkg-zh-cn luci-i18n-firewall-zh-cn
# 新增uhttpd upnp
# luci-i18n-upnp-zh-cn luci-i18n-uhttpd-zh-cn

首次啟動指令碼

這個就複雜點了,先抄個別人的。

首次啟動時執行的指令碼(uci-defaults)

# Beware! This script will be in /rom/etc/uci-defaults/ as part of the image.
# Uncomment lines to apply:
#
wlan_name="OpenWrt"
wlan_password="12345678"

root_password
="111111" lan_ip_address="192.168.1.1"
pppoe_username
="111111" pppoe_password="111111" # log potential errors exec >/tmp/setup.log 2>&1 if [ -n "$root_password" ]; then (echo "$root_password"; sleep 1; echo "$root_password") | passwd > /dev/null fi # Configure LAN # More options: https://openwrt.org/docs/guide-user/base-system/basic-networking if [ -n "$lan_ip_address" ]; then uci set network.lan.ipaddr="$lan_ip_address" uci commit network fi # Configure WLAN # More options: https://openwrt.org/docs/guide-u ... ic#wi-fi_interfaces if [ -n "$wlan_name" -a -n "$wlan_password" -a ${#wlan_password} -ge 8 ]; then uci set wireless.@wifi-device[0].disabled='0' uci set wireless.@wifi-iface[0].disabled='0' uci set wireless.@wifi-iface[0].encryption='psk2' uci set wireless.@wifi-iface[0].ssid="$wlan_name" uci set wireless.@wifi-iface[0].key="$wlan_password" uci commit wireless fi # Configure PPPoE # More options: https://openwrt.org/docs/guide-u ... e_ppp_over_ethernet if [ -n "$pppoe_username" -a "$pppoe_password" ]; then uci set network.wan.proto=pppoe uci set network.wan.username="$pppoe_username" uci set network.wan.password="$pppoe_password" uci commit network fi echo "All done!"

最上面設定了一些需要的變數,後面指令碼就是判斷變數存在,就執行uci命令來完成對openwrt的設定。

這是一個簡單的示例,用於設定管理員密碼、LAN IP地址、SSID、啟用Wi-Fi、PPPOE撥號。 一旦指令碼成功執行並乾淨地退出(退出狀態為0),它將從/etc/uci-defaults中刪除。 如果需要,仍然可以在/rom/etc/uci-defaults中檢視原始指令碼,檔名大機率是99-99-asu-defaults,至少我做的時候是這個檔名。

自定義啟動指令碼

這不太夠用啊,我還想設定防火牆策略,我wifi是雙頻的,這才設定一個wifi[0]。

不懂也沒關係,可以找地方抄。

例如:新增一個防火牆通訊規則,允許IPV6訪問本機的22,18080,18443埠。

  在通訊規則建立好對應的規則。

注意右上角的未儲存的配置,點開看看

這就是需要的uci命令,直接複製進第一次啟動指令碼就好了。

當然,設定各種東西都可以這樣抄命令。

除了wifi設定有個啟用抄不到命令,我提供給你就好了。

主要是disabled='0'那行,你配置wifi時自動生成程式碼來確定你是radio0還是什麼。

# 配置WLAN
if [ -n "$wlan_name0" -a -n "$wlan_password" -a ${#wlan_password} -ge 8 ]; then
  uci set wireless.radio0.disabled='0'
  uci set wireless.radio0.htmode='HT40'
  uci set wireless.radio0.channel='auto'
  uci set wireless.radio0.cell_density='0'
  uci set wireless.default_radio0.ssid="$wlan_name0"
  uci set wireless.default_radio0.encryption='sae-mixed'
  uci set wireless.default_radio0.key="$wlan_password"
fi

完整配置

#預安裝的軟體包:
# 替換dnsmasq 為dnsmasq-full
# 新增中文介面:
# luci-i18n-base-zh-cn luci-i18n-opkg-zh-cn luci-i18n-firewall-zh-cn
# 新增uhttpd upnp
# luci-i18n-upnp-zh-cn luci-i18n-uhttpd-zh-cn 


#首次啟動時執行的指令碼(uci-defaults)
#設定lan ip地址
#設定管理員密碼
#設定wifi
#設定pppoe撥號
#設定時區

# Beware! This script will be in /rom/etc/uci-defaults/ as part of the image.
# Uncomment lines to apply:
# 複製該行以後的為啟動指令碼
#
!/bin/sh # 設定變數 wlan_name0="Kumquat_2.4G" wlan_name1="Kumquat_5G" wlan_password="88888888" root_password="66666666" lan_ip_address="192.168.2.1" pppoe_username="*********" pppoe_password="123123" hostname="YLC_Router" # 記錄潛在錯誤 exec >/tmp/setup.log 2>&1 # 設定管理員密碼 if [ -n "$root_password" ]; then (echo "$root_password"; sleep 1; echo "$root_password") | passwd > /dev/null fi # 配置LAN if [ -n "$lan_ip_address" ]; then uci set network.lan.ipaddr="$lan_ip_address" uci set network.lan.netmask="255.255.255.0" uci commit network fi # 配置WLAN if [ -n "$wlan_name0" -a -n "$wlan_password" -a ${#wlan_password} -ge 8 ]; then uci set wireless.radio0.disabled='0' uci set wireless.radio0.htmode='HT40' uci set wireless.radio0.channel='auto' uci set wireless.radio0.cell_density='0' uci set wireless.default_radio0.ssid="$wlan_name0" uci set wireless.default_radio0.encryption='sae-mixed' uci set wireless.default_radio0.key="$wlan_password" fi if [ -n "$wlan_name1" -a -n "$wlan_password" -a ${#wlan_password} -ge 8 ]; then uci set wireless.radio1.disabled='0' uci set wireless.radio1.htmode='VHT80' uci set wireless.radio1.channel='auto' uci set wireless.radio1.cell_density='0' uci set wireless.default_radio1.ssid="$wlan_name1" uci set wireless.default_radio1.encryption='sae-mixed' uci set wireless.default_radio1.key="$wlan_password" fi uci commit wireless # 配置PPPoE if [ -n "$pppoe_username" -a -n "$pppoe_password" ]; then uci set network.wan.proto='pppoe' uci set network.wan.username="$pppoe_username" uci set network.wan.password="$pppoe_password" uci commit network fi # 設定主機名 if [ -n "$hostname" ]; then uci set system.@system[0].hostname="$hostname" uci commit system fi # 設定時區 uci set system.@system[0].zonename='Asia/Shanghai' uci set system.@system[0].timezone='CST-8' # 手動設定靜態 DHCP uci add dhcp host uci set dhcp.@host[-1].name='TmallGenie' uci add_list dhcp.@host[-1].mac='18:BC:5A:18:81:E7' uci set dhcp.@host[-1].ip='192.168.2.254' # 重啟網路服務 /etc/init.d/network restart # 重啟無線網路服務 wifi up #設定本機防火牆 uci add firewall rule uci set firewall.@rule[-1].name='Allow_Local' uci set firewall.@rule[-1].family='ipv6' uci set firewall.@rule[-1].src='wan' uci set firewall.@rule[-1].dest_port='22 18080 18443' uci set firewall.@rule[-1].target='ACCEPT' #設定WireGuard區域防火牆 uci add firewall rule uci set firewall.@rule[-1].name='Allow_VPN' uci set firewall.@rule[-1].family='ipv6' uci set firewall.@rule[-1].src='wan' uci set firewall.@rule[-1].dest_port='52080' uci set firewall.@rule[-1].target='ACCEPT' #設定LAN轉發 uci add firewall rule uci set firewall.@rule[-1].name='Allow_LAN' uci set firewall.@rule[-1].family='ipv6' uci set firewall.@rule[-1].src='wan' uci set firewall.@rule[-1].dest='lan' uci set firewall.@rule[-1].dest_port='22 8006 8069 9090 18080 18443' uci set firewall.@rule[-1].target='ACCEPT'
#新增uhttpd監聽埠
uci add_list uhttpd.main.listen_http='[::]:18080'
uci add_list uhttpd.main.listen_https='[::]:18443'
echo "All done!"

未來功能

把我的cfddns也加進去,就是echo寫三個檔案:

cfddns.sh ddns主指令碼

cfconfig.json ddns配置檔案

crontab 計劃任務指令碼

今天懶的寫了。

線上編譯

點選REQUEST BUILD按鈕即可

完成標誌 Build successful

自定義的下載,一般sysupgrade就行了,在openwrt裡面刷機不保留配置檔案。

再也不用擔心遠端除錯恢復出廠設定了。恢復出廠設定也是我的定製設定。

相關文章