如何使用華碩路由器刷機成OpenWRT並自動連線公開網路與整合AP分享器?

前言

前篇文章中,我們知道了如何使用樹莓派5設定為OpenWRT並與AP分享器整合,同時自動化方式連上iTaiwan公開網路。

然而,這樣的網路架構、設計與設定的作法仍然有不少的缺失,例如:由於無線網路晶片較差並無法持續與訊號較遠的開放網路連接、無法有效地設定自動化連接公開網路。

本文章中,我們展示另一種作法,使用市面上支援刷機成OpenWRT韌體的路由器,並搭配其他做為AP的路由器整合與自動化驗證與設定iTaiwan公開網路的過程。

刷機型號討論

依據OpenWRT所公開韌體網站中,市面上有部分的路由器能夠支援刷機成OpenWRT韌體,且能夠解鎖較多的進階功能。又以華碩品牌的路由器為最多能夠刷機成OpenWRT韌體的網通設備。因此,在本文章中,我們展示「RT-AC1200 V2」作為刷機成OpenWRT的路由器型號範例。

刷機步驟(RT-AC1200 V2)

在本章節中,我們將RT-AC1200 V2型號展示如何刷機成OpenWRT。首先,需要瀏覽「https://firmware-selector.openwrt.org/」網站,此網站由OpenWRT官方提供,在此網站能夠輸入路由器型號後,找到對應的韌體檔案,下圖以「RT-AC1200 V2」型號為例。

每種路由器所提供的刷機韌體檔案種類與對應的用途皆不相同,若以前述的為例,則由上到下的韌體檔案用途分別如下:

  • SYSUPGRADE,用來將既有的OpenWRT版本做升級時使用,若要用來第一次刷機時使用,則需要搭配最底下的「KERNEL」。需要先刷KERNEL後,讓韌體在路由器的記憶體上載入,之後再使用SYSUPGRADE更新至此OpenWRT的韌體版本。
  • FACTORY,適合第一次刷機時使用,例如:從ASUS路由器之ASUS路由韌體刷機成OpenWRT韌體,後面步驟描述的方法會以此檔案作為範例。
  • KERNEL,此為最小版本,用來載入至記憶體體驗與使用,且通常需要搭配SYSUPGRADE來完成OpenWRT韌體之刷機作法。

以下描述為「ASUS RT-AC1200 V2」刷機成OpenWRT韌體的步驟,英文刷機步驟描述可參考「https://openwrt.org/toh/asus/rt-ac1200_v2」:

  1. 準備好此型號的路由器並確認路由器為本來ASUS路由介面。
  2. 下載前述截圖中的「FACTORY」韌體檔案,假設檔案名稱為:「openwrt-24.10.4-ramips-mt76x8-asus_rt-ac1200-v2-squashfs-factory.bin」。
  3. 將路由器關機。
  4. 下載華碩路由器公用救援工具,即「Asus Firmware Restoration Tool」,詳細下載教學步驟參考:「https://www.asus.com/tw/support/faq/1000814」。
    1. 經過驗證與檢查後,隨意找一個ASUS路由器型號所下載到的救援工具皆相同,如下圖所示。
  5. 準備一條有線網路線,並插至路由器的LAN1埠號(黃色)位置,另外一端則接上啟動前述救援工具的電腦,可以是筆電或一般Windows電腦。
    1. 需要注意的是,多數筆電或電腦可能沒有有線網路孔;因此,我們需要使用USB有線網路卡來完成有線網路的連接。
  6. 在電腦端,設定前述有線網卡,並將網路IP位址設定成「192.168.1.5」或是「192.168.1.2」到「192.168.1.253」之間位址範圍;Netmask子網路遮罩則設定為「/24」,即「255.255.255.0」。詳細的網路設定如下截圖所示。
  7. 另外,由於救援工具僅能夠識別一組電腦的有線網卡,若使用的電腦還有安裝或使用其他的網路卡,則需要將其他網卡透過控制台停用,並只留下與啟用前述連接路由器的有線網卡。
  8. 確定路由器關機後,使用原子筆插入「Reset」鍵並不放開,接著開啟電源鍵;當電源鍵開始緩慢閃爍藍燈後,將Reset按鍵放開。
  9. 開啟公用救援工具,將「openwrt-24.10.4-ramips-mt76x8-asus_rt-ac1200-v2-squashfs-factory.bin」改名為「openwrt-24.10.4-ramips-mt76x8-asus_rt-ac1200-v2-squashfs-factory.trx」後,上傳至公用救援工具。
  10. 開始執行韌體修復(刷機),需要等待2至3分鐘,時間會較久且韌體刷機完成後,則路由器會將自動重新啟動,當重新啟動完成後,OpenWRT就已經刷機至此ASUS路由器了。
  11. 當完成刷機,則需要將先前設定固定IP位址之步驟改為「自動取得IP位址」之設定。
  12. 此機種經刷機為OpenWRT後,各項測試與設定都符合預期行為,且各方表現都不俗,筆者猜測是此路由器所使用的無線網路晶片為發哥之緣故。

刷機步驟(RT-AC1200)

在本章節中,為RT-AC1200第1版本的刷機步驟,與V2相異的地方為,從OpenWRT所瀏覽的「https://firmware-selector.openwrt.org/」網站,取得到的韌體檔案如下截圖所示:

依據前述的截圖所示,此機種刷機需要先使用KERNEL檔案,刷機成功後,再使用SYSUPGRADE做完整的更新;官方刷機參考:「https://openwrt.org/toh/asus/rt-ac1200」。

刷機步驟如下:

  1. 準備好此型號的路由器並確認路由器為本來ASUS路由介面。
  2. 下載前述截圖中的「KERNEL」韌體檔案,假設檔案名稱為:「openwrt-24.10.4-ramips-mt76x8-asus_rt-ac1200-initramfs-kernel.bin」。
  3. 下載前述截圖中的「SYSUPGRADE」韌體檔案,假設檔案名稱為:「openwrt-24.10.4-ramips-mt76x8-asus_rt-ac1200-squashfs-sysupgrade.bin」。
  4. 將此路由器關機。
  5. 下載華碩路由器公用救援工具,即「Asus Firmware Restoration Tool」,詳細下載教學步驟參考:「https://www.asus.com/tw/support/faq/1000814」。
  6. 準備一條有線網路線,並插至路由器的LAN1埠號(黃色)位置,另外一端則接上啟動前述救援工具的電腦,可以是筆電或一般Windows電腦。
    1. 需要注意的是,多數筆電或電腦可能沒有有線網路孔;因此,我們需要使用USB有線網路卡來完成有線網路的連接。
  7. 在電腦端,設定前述有線網卡,並將網路IP位址設定成「192.168.1.5」或是「192.168.1.2」到「192.168.1.253」之間位址範圍;Netmask子網路遮罩則設定為「/24」,即「255.255.255.0」。
  8. 另外,由於救援工具僅能夠識別一組電腦的有線網卡,若使用的電腦還有安裝或使用其他的網路卡,則需要將其他網卡透過控制台停用,並只留下與啟用前述連接路由器的有線網卡。
  9. 確定路由器關機後,使用原子筆插入「Reset」鍵並不放開,接著開啟電源鍵;當電源鍵開始緩慢閃爍藍燈後,將Reset按鍵放開。
  10. 開啟公用救援工具,將「openwrt-24.10.4-ramips-mt76x8-asus_rt-ac1200-initramfs-kernel.bin」改為「openwrt-24.10.4-ramips-mt76x8-asus_rt-ac1200-initramfs-kernel.trx」後,上傳至公用救援工具。救援工具上傳與處理的截圖如下所示。
  11. 開始執行韌體修復(刷機),需要等待2至3分鐘(甚至是5~10分鐘),時間會較久且韌體刷機完成後,則路由器會將自動重新啟動,當重新啟動完成後,OpenWRT就已經刷機至此ASUS路由器了,完成韌體刷機的截圖如下所示。
  12. 當完成刷機,則需要將先前設定固定IP位址之步驟改為「自動取得IP位址」之設定。
  13. 透過網頁瀏覽器輸入「http://192.168.1.1」來登入OpenWRT的網頁管理介面。
  14. 由於前述使用KERNEL刷機,因此刷機後的韌體為救援模式,需要到「Network – Backup / Flash firmware」選項,在「Flash new firmware image」點選「Flash image」並選擇先前下載的SYSUPGRADE檔案(即:openwrt-24.10.4-ramips-mt76x8-asus_rt-ac1200-squashfs-sysupgrade.bin)並點選「Upload」將更新的韌體檔案上傳。使用預設選項後再點擊「Continue」後即開始更新此版本的韌體了;同時此步驟也需要一段時間,約5至10分鐘,更新過程如下截圖所示。
  15. 此路由器機種為「RT-AC1200V2」的前一代,且使用的無線網路晶片為發哥,基本上支援度相對也是很高的。

刷機步驟(RT-N66U)(不建議刷機)

在本章節中,我們將使用RT-N66U型號展示如何刷機成OpenWRT。首先,需要瀏覽「https://firmware-selector.openwrt.org/」網站,此網站由OpenWRT官方提供,在此網站能夠輸入路由器型號後,找到對應的韌體檔案,下圖以「RT-N66U」型號為例。

從前述的截圖得知,此路由器型號由於較舊,因此僅提供「.trx」結尾的檔案作為刷機,且只提供第一次刷機的韌體。具體的刷機步驟如下:

  1. 準備好此型號的路由器並確認路由器為本來ASUS路由介面。
  2. 下載前述截圖中的「FACTORY」韌體檔案,假設檔案名稱為:「openwrt-24.10.4-bcm47xx-mips74k-asus_rt-n66u-squashfs.trx」。
  3. 將此路由器關機。
  4. 下載華碩路由器公用救援工具,即「Asus Firmware Restoration Tool」,詳細下載教學步驟參考:「https://www.asus.com/tw/support/faq/1000814」。
  5. 準備一條有線網路線,並插至路由器的LAN1埠號(黃色)位置,另外一端則接上啟動前述救援工具的電腦,可以是筆電或一般Windows電腦。
    1. 需要注意的是,多數筆電或電腦可能沒有有線網路孔;因此,我們需要使用USB有線網路卡來完成有線網路的連接。
  6. 在電腦端,設定前述有線網卡,並將網路IP位址設定成「192.168.1.5」或是「192.168.1.2」到「192.168.1.253」之間位址範圍;Netmask子網路遮罩則設定為「/24」,即「255.255.255.0」。
  7. 另外,由於救援工具僅能夠識別一組電腦的有線網卡,若使用的電腦還有安裝或使用其他的網路卡,則需要將其他網卡透過控制台停用,並只留下與啟用前述連接路由器的有線網卡。
  8. 確定路由器關機後,使用原子筆插入「Reset」鍵並不放開,接著開啟電源鍵;當電源鍵開始緩慢閃爍藍燈後,將Reset按鍵放開。
  9. 開啟公用救援工具,將「openwrt-24.10.4-bcm47xx-mips74k-asus_rt-n66u-squashfs.trx」後,上傳至公用救援工具。救援工具上傳與處理的截圖如下所示。
  10. 開始執行韌體修復(刷機),需要等待2至3分鐘(甚至是5~10分鐘),時間會較久且韌體刷機完成後,則路由器會將自動重新啟動,當重新啟動完成後,OpenWRT就已經刷機至此ASUS路由器了。
  11. 當完成刷機,則需要將先前設定固定IP位址之步驟改為「自動取得IP位址」之設定。
  12. 需要注意的是,RT-N66U雖然能夠刷機成功;但是,其無線網路晶片採用的是Broadcom,經過基本的無線網路(WWAN)設定後,有出現無法預期的行為,故此機型不建議刷機為OpenWRT做使用;同時此機種於OpenWRT官網也有提醒,由於無線網路晶片為Broadcom,所以支援度會受限。
    1. Devices with Broadcom WiFi chipsets have limited OpenWrt supportability (due to limited FLOSS driver availability for Broadcom chips). Consider this when choosing a device to buy, or when deciding to flash OpenWrt on your device because it is listed as supported. See Broadcom WiFi for details.
  13. 若要還原成原廠的ASUS(華碩)路由的韌體,則設定與前述大同小異,唯一差別為使用的韌體不同,華碩官方的韌體可以瀏覽「https://www.asus.com/tw/supportonly」網站並輸入路由器型號尋找對應的韌體版本,以「RT-N66U」為例,找到韌體版本可以使用「ASUS RT-N66U 韌體版本 3.0.0.4.382.50470」;在華碩救援模式底下透過韌體救援工具將會刷機失敗並出現「Transfer cancelled」錯誤訊息,則需要重試看看。下載回來的檔案為壓縮檔,解壓縮後會得到「RT-N66U_3.0.0.4_382_50470-g033b865.trx」檔案,後續恢復韌體的作法與前述的步驟相同,再按照前述的刷機的步驟依序執行即可。完成系韌體救援後,路由器電源燈會恆亮,這時需要等待一段時間,因為韌體正在初始化,當2.4GHZ與5GHZ的指示燈皆恆亮且無線網路有找到「ASUS」與「ASUS_5G」時,則表示原廠韌體刷機已經成功了。

OpenWRT基本操作與使用

以下以「ASUS RT-AC1200」刷機後之OpenWRT作為操作與使用的範例。

預設OpenWRT使用者介面與SSH的指令,使用者為root且密碼為空,這樣是不安全的,因此需要登入使用者介面後設定密碼或是透過指令去設定,以下為透過指令的方式設定密碼與對應指令輸出訊息的過程。


~# passwd
Changing password for root
New password:
Bad password: too short
Retype password:
passwd: password for root is unchanged

~#

設定完成後,密碼就能夠設定完成了。接著,設定一組無線網路作為WWAN(無線廣域網路)用來連至網際網路,設定方式為:在使用者介面選擇「Network」並點選「Wireless」並出現下列的截圖:

AC1200與AC1200V2預設皆有兩組發哥的無線網路晶片,其中「MediaTek MT7612E 802.11ac/n」為支援WiFi的2.4GHZ與5GHZ,而「MediaTek MT7628 802.11b/g/n」為支援2.4GHZ。假設要連線的SSID名稱為「ASUS_Mesh」,則可以使用「MediaTek MT7628 802.11b/g/n」並點選「Scan」掃描此路由器附近的無線網路,當找到「ASUS_Mesh」後,按下「Join Network」按鈕。

接著,設定此無線網路所需要的資訊,需要設定的資訊如下:

  • WPA passphrase,即無線網路的密碼。

接著,按下「Submit」按鈕,到下一個此無線網路設定的頁面,在「Interface Configuration」中的「Wireless Security」,「Encryption」加密設定需要更改為「WPA2-PSK/WPA3-SAE Mixed Mode (strong security)」,此設定取決於連線的無線網路設定密碼加密機制。不是每個無線網路連線都需要更改此加密設定。

設定完成後,按下「Save」按鈕,再按下「Save & Apply」讓前述的無線網路設定生效與啟用,當無線網路設定完成後,會得到如下類似的截圖。從截圖得知,無線網路正常的連線並能夠連線到網際網路了。

接著,切換至透過SSH登入OpenWRT指令介面,使用「ping」指令對Google DNS伺服器位址「8.8.8.8」發送三次的訊號與使用「opkg」更新套件的來源;若前述指令能夠正常的運作,則代表設定的無線網路沒有問題且能夠正確地連線至網際網路。前述兩種指令執行方法與輸出的訊息如下:


~# ping -c3 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=116 time=4.126 ms
64 bytes from 8.8.8.8: seq=1 ttl=116 time=3.285 ms
64 bytes from 8.8.8.8: seq=2 ttl=116 time=9.937 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 3.285/5.782/9.937 ms

~# opkg update
Downloading https://downloads.openwrt.org/releases/24.10.4/targets/ramips/mt76x8/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_core
Downloading https://downloads.openwrt.org/releases/24.10.4/targets/ramips/mt76x8/packages/Packages.sig
Signature check passed.

......

Downloading https://downloads.openwrt.org/releases/24.10.4/packages/mipsel_24kc/telephony/Packages.sig
Signature check passed.

若要安裝cURL指令,則可以使用「opkg install」指令進行安裝,相關指令之執行與輸出訊息如下所示:


~# opkg install curl
Installing curl (8.19.0-r2) to root...
Downloading https://downloads.openwrt.org/releases/24.10.4/packages/mipsel_24kc/packages/curl_8.19.0-r2_mipsel_24kc.ipk
Installing zlib (1.3.1-r1) to root...
Downloading https://downloads.openwrt.org/releases/24.10.4/packages/mipsel_24kc/base/zlib_1.3.1-r1_mipsel_24kc.ipk
Installing libnghttp2-14 (1.63.0-r1) to root...
Downloading https://downloads.openwrt.org/releases/24.10.4/packages/mipsel_24kc/packages/libnghttp2-14_1.63.0-r1_mipsel_24kc.ipk
Installing libcurl4 (8.19.0-r2) to root...
Downloading https://downloads.openwrt.org/releases/24.10.4/packages/mipsel_24kc/packages/libcurl4_8.19.0-r2_mipsel_24kc.ipk
Configuring zlib.
Configuring libnghttp2-14.
Configuring libcurl4.
Configuring curl.
~#

同時,需要安裝「python3」套件並為預期後面需要執行Python程式做準備也是可以的;但是執行「」指令後,可能會出現下列的錯誤訊息:


~# opkg install python3

Installing python3 (3.11.14-r1) to root...
Downloading https://downloads.openwrt.org/releases/24.10.4/packages/mipsel_24kc/packages/python3_3.11.14-r1_mipsel_24kc.ipk
Installing libpython3-3.11 (3.11.14-r1) to root...

......

Collected errors:
* verify_pkg_installable: Only have 7732kb available on filesystem /overlay, pkg python3-light needs 9390
* opkg_install_cmd: Cannot install package python3.

會出現下列的錯誤訊息是因為,路由器上能夠安裝的空間不足導致;若要得知剩餘可用的空間,則我們能夠使用下列的指令來清楚的知道:


~# df -h /
Filesystem Size Used Available Use% Mounted on
overlayfs:/overlay 10.1M 2.6M 7.5M 26% /

從前述訊息得知,python3套件至少需要9MB左右的空間,而目前剩餘的空間為7.2MB左右,因此無法將「python3」安裝起來。

最後到這裡,我們完成基本OpenWRT操作、設定與使用了。

設定開放無線網路登入自動化

在先前章節中,我們設定與使用了一般無線網路外;當我們需要連線至開放網路與開放網路之網頁認證,展示需要做哪些的自動化驗證設定。

假設無線路由器在開放無線網路訊號範圍,則可以透過網頁介面連上,經過測試後,若是在台灣當地的無線網路都是需要將「Country Code」調整為「TW」。

更多的開放無線網路設定可以參考AC1200V2-setting專案,專案中所對應的檔案與用途如下:

  1. cron_setting.txt,用來設定iTaiwan斷線後,能夠自動連線的排程。
  2. cron_setting_smh_rg.txt,用來設定某醫院的開放無線網路:SMH-RG,能夠在自動斷線後恢復連線的排程。
  3. login-itaiwan.sh,用來自動登入iTaiwan網頁作為連上此開放無線網路的腳本(Shell Script)。
  4. login-smh-rg.py與login-smh-rg.sh,用來自動登入SMH-RG的開放無線網路的Python程式與自動Shell Script。
  5. re-enable-itaiwan.sh,將已經連上iTaiwan開放無線網路的無線網卡重新啟用。
  6. re-enable-smh-rg.sh,將已經連上SMH-RG開放無線網路的無線網卡重新啟用。
  7. re-enable-wifi.sh,將無線網卡重新啟用。

因此,設定後上述的排程工作能夠透過SSH指令連進OpenWRT後,看到設定後的排程工作清單:

關於SMH-RG的排程設定如下:


SHELL=/bin/sh

*/3 * * * * cd /root && ./login-smh-rg.sh
*/10 * * * * cd /root && ./re-enable-smh-rg.sh

@reboot cd /root && ./re-enable-smh-rg.sh
@reboot cd /root && ./re-enable-wifi.sh radio0
@reboot cd /root && ./re-enable-wifi.sh radio1

關於iTaiwan的排程設定如下:


SHELL=/bin/sh

*/3 * * * * cd /root && ./login-itaiwan.sh
*/10 * * * * cd /root && ./re-enable-itaiwan.sh

@reboot cd /root && ./re-enable-itaiwan.sh
@reboot cd /root && ./re-enable-wifi.sh radio1

從排程工作設定中,當路由器重新開機,則重新啟動連上開放無線網路的無線網路晶片。

每3分鐘個別去執行自動登入SMH-RG或iTaiwan開放無線網路的排程工作,每10分鐘重新啟用連上SMH-RG或iTaiwan開放無線網路的無線網路晶片。

結語

從使用樹莓派搭配OpenWRT,再到刷機過程中,我們可以知道樹莓派基本上僅用於PoC(概念性驗證);若我們得要穩定的使用,還需要依賴市面已經是產品的路由器並透過刷機成OpenWRT來解鎖為較為強大的軟路由。透過開放網路的設定,仍是取決於路由器本身的無線網路晶片穩定度與效能,才能夠較為穩定地連接開放網路;同時搭配各式自動化腳本並搭配OpenWRT本身所提供的排程,讓連線與驗證開放網路之機制自動化並避免過多的人為介入。

在刷機的過程中,我們知道發哥的無線網路晶片仍是與OpenWRT相容性較高的,因此多數的路由器搭配發哥的無線網路晶片所表現的行為榮是符合預期;而反觀Broadcom的無線網路晶片,雖然能夠刷機成OpenWRT;但是表現出來的行為為不預期且OpenWRT官方也有特別做出警告的訊息,讓我們之後有刷機的需求時,下次挑選與選用路由器都盡量以發哥的無線網路晶片為主。同時,這也是為什麼OpenWRT於2025年推出的「OpenWRT One」路由器也是搭配發哥的無線網路晶片(由 OpenWrt 官方與香蕉派 (Banana Pi) 合作推出的首款官方開發板/路由器。搭載聯發科 MT7981B SoC)之原因。

目前經過韌體刷機與連上無線網路的測試後,以ASUS的RT-AC1200與RT-AC1200V2表現的較佳,但是此兩款為中低階款的網通設備機種,後續文章會再測試關於較為中高階型號的網通設備,例如:RT-AX1800HP或RT-AX1800S等。

參考資料

  • https://firmware-selector.openwrt.org
  • https://openwrt.org/toh/asus/rt-ac1200
  • https://openwrt.org/toh/asus/rt-n66u
  • https://openwrt.org/toh/asus/rt-ac1200_v2
  • https://www.techbang.com/posts/119939-openwrtopenwrt-one-wi-fi-6