舊路由器刷 OpenWrt:Netgear R7000 變 800 元防火牆的實測
硬體成本(約)
授權成本
主要優勢
主要限制
二手 Netgear R7000 + OpenWrt
NT$ 800
免費(開源)
成本極低、功能自由度高、可玩性強
無保固、無原廠支援、Wi-Fi 驅動受限
TP-Link Omada ER605
NT$ 2,000 左右
免費
體積小、功耗低、設定介面友善
功能相對陽春、需搭配 Omada 生態
Ubiquiti UniFi Dream Machine
NT$ 9,000 以上
免費
整合式管理、生態完整、UI 精美
價格高、部分功能需綁定雲端帳號
Fortinet FortiGate 40F
NT$ 12,000 以上
需訂閱 UTM 授權
企業級安全功能、原廠威脅情報
授權費用疊加、家用設定門檻高
迷你 PC + pfSense/OPNsense
NT$ 4,000 ~ 8,000
免費(開源)
效能強、擴充性高、x86 生態完整
成本較高、功耗較高、需自行組裝
從表格可以看出來,R7000 方案的硬體成本幾乎是最低的,而且沒有授權費用的問題。當然,把它跟 FortiGate 這種企業級設備直接比較並不公平——人家的威脅情報訂閱、SSL 解密效能、原廠工程師支援,是 OpenWrt 完全給不了的。但如果你的需求是家用等級的「有線閘道 + 基本防火牆 + DNS 過濾 + VPN」,那麼八百元的投資報酬率確實非常驚人。
1-3 刷上 OpenWrt 之後能解鎖哪些能力
原廠韌體最大的問題是「什麼都不能改」。你只能用廠商給的選項,沒有 SSH、沒有 iptables 規則自訂、沒有套件管理員、不能用 VLAN、也不能裝第三方服務。而刷上 OpenWrt 之後,這台機器基本上就變成一台跑著 Linux 的小型伺服器,你能做的事情包括:
這些功能在企業級防火牆上當然都有,但要嘛需要額外付費,要嘛藏在進階授權後面。而在 OpenWrt 上,它們全部免費,代價是你需要花一點時間學習。
二、動手前的準備:韌體、工具與風險評估
刷機這種事情,最怕的就是「資料沒備份、韌體抓錯、救援方案沒想好」三件事同時發生。所以在動手之前,筆者建議先把整個流程在腦中跑一遍,把所有需要的檔案先下載好、放在同一個資料夾裡,並且確認自己知道「如果刷壞了要怎麼救回來」。以下就把準備工作拆成三個部分來說明。
2-1 需要準備的硬體與軟體清單
首先盤點一下筆者這次實際用到的東西:
一條網路線:用來連接電腦與路由器的 LAN 埠。
.chk 格式),這是你的「後悔藥」。萬一刷機後想還原,這個檔案會救你一命。netgear_r7000 的 initramfs 檔案(用於第一次刷入)與 sysupgrade 檔案(用於正式安裝與後續升級)。tftpd 或 atftpd。這是 R7000 的「救援模式」會用到的工具。另外建議準備一支手機熱點,或是另一條可以上網的網路。因為刷機過程中你的主網路可能會中斷,若需要查資料或下載檔案,有備援連線會方便很多。
2-2 刷機風險評估與 TFTP 救援預備
刷機本身並不難,但「難」的地方在於失敗之後的處理。R7000 有一個非常實用的機制,叫做 TFTP 救援模式:當你在開機的瞬間按住 Reset 鍵,路由器會進入一個極簡的開機階段,此時它會透過 TFTP 協定,從 192.168.1.1 這個位址去抓取名為 chk 結尾的韌體檔,並自動寫入。這個機制原本是給原廠維修用的,但也被 OpenWrt 社群拿來當作「刷壞了怎麼辦」的最後防線。
實際操作上,你需要把電腦設為固定 IP 192.168.1.2、子網路遮罩 255.255.255.0,然後在電腦上跑一個 TFTP 伺服器,把原廠韌體(或 OpenWrt 的 initramfs)放在 TFTP 根目錄,檔名改成路由器會去抓的名字。接著斷電、按住 Reset、插電,觀察路由器燈號的閃爍變化,如果一切正確,大約幾十秒內就會開始從電腦下載韌體,並在完成後自動重開機。
筆者強烈建議:在還沒開始刷機之前,就先演練一次 TFTP 救援流程。用原廠韌體跑一次,確認你的電腦、線路、TFTP 設定都是對的。這樣萬一正式刷機失敗,你就不會手忙腳亂,也不會上網亂找偏方。以下是一個 Linux 上啟動 TFTP 伺服器的範例指令(僅供參考,實際請依你的環境調整):
# 建立 TFTP 根目錄
sudo mkdir -p /srv/tftp
sudo cp R7000-V1.0.11.136_10.2.120.chk /srv/tftp/
啟動 atftpd,綁定在 192.168.1.2 的 69 埠
sudo atftpd --daemon --port 69 --bind-address 192.168.1.2 /srv/tftp
確認服務有在監聽
sudo ss -ulpn | grep :69
Windows 使用者如果不想用命令列,Tftpd64 是一個免費且介面簡單的選擇,只要指定好「Current Directory」與「Server Interface」,按下「Show Log」就能看到路由器有沒有來敲門。
2-3 備份原廠韌體與 CFE 的意義
CFE(Common Firmware Environment)是 Broadcom 平台的開機載入程式,地位類似 PC 的 BIOS。它負責初始化硬體、決定從哪個分割區載入韌體,也包含了前面提到的 TFTP 救援功能。正常情況下刷 OpenWrt 並不會動到 CFE,但如果你之後想嘗試更激進的操作(例如刷改機版 CFE 來解除某些限制),那就一定要先備份。
備份 CFE 的方法通常是先透過 OpenWrt 的 SSH 連進路由器,然後讀取 /dev/mtd0 之類的分割區。以下是概念性的指令示範,實際分割區編號請以 cat /proc/mtd 的輸出為準:
# 先看分割區配置
cat /proc/mtd
假設 cfe 是 mtd0,備份到 /tmp
dd if=/dev/mtd0 of=/tmp/cfe.bin
用 scp 或 cat 把檔案拉回電腦
scp [email protected]:/tmp/cfe.bin ./
老實說,對於「只想把 R7000 當防火牆」的多數使用者來說,備份 CFE 是加分項但不是必要項。真正必要的是把原廠韌體檔案留好,因為那是你隨時可以退回「原廠狀態」的保險。筆者自己的習慣是,在資料夾裡同時放三份檔案:原廠韌體、OpenWrt initramfs、OpenWrt sysupgrade,並且在檔名前面加上日期,避免日後搞混。
三、刷入 OpenWrt 完整步驟實測
準備工作完成之後,接下來就是實際動手的部分。整個刷機流程可以分成三個階段:先從原廠韌體刷入 OpenWrt 的過渡韌體、再從過渡韌體刷入正式版、最後做初始設定與擴充。以下依照筆者實際操作的順序記錄,並附上遇到的狀況與處理方式。
3-1 從原廠韌體刷入過渡韌體
第一步是把 R7000 從原廠狀態切換到 OpenWrt 的「臨時系統」。這個臨時系統(initramfs)會被載入到記憶體中執行,不會寫入 NAND,所以就算失敗也不會變磚,重開機就會回到原本的原廠韌體。這是非常安全的測試步驟,建議每個人都先從這裡開始。
將電腦用網路線接到 R7000 的 LAN 埠(LAN1~LAN4 都可以,不要插 WAN 埠)。
192.168.1.2,遮罩 255.255.255.0,閘道留空。http://192.168.1.1,登入 Netgear 原廠管理介面(預設帳號 admin,密碼 password,若改過請用你設定的密碼)。initramfs 檔案(注意:部分版本需要先改檔名或使用特定格式,請以 OpenWrt 官方 R7000 頁面的說明為準)。按下上傳,等待進度條跑完。過程中不要斷電、不要拔線。
http://192.168.1.1 應該會看到 OpenWrt 的 LuCI 登入畫面。筆者實測時,原廠介面在上傳韌體後大約 90 秒就重開機完成,比預期的快。第一次看到 LuCI 的登入頁面時還有點不真實——畢竟是一台十幾年前的老機器,居然跑起了現代化的網頁管理介面。
如果上傳後出現「韌體格式錯誤」或「更新失敗」的訊息,最常見的原因是檔案抓錯(例如抓到了 sysupgrade 而不是 initramfs),或是原廠韌體版本太舊,需要先升級到某個版本以上。這種情況下,請先透過原廠介面把韌體更新到最新版,再重新嘗試。
3-2 刷入 OpenWrt 正式版並驗證
進到 initramfs 的 LuCI 介面之後,就代表你已經成功一半了。接下來要做的是把 OpenWrt 正式寫入 NAND,這樣重開機之後才會保留設定。
在 LuCI 中登入(預設無密碼,請立刻到「系統」→「管理權限」設定一組強密碼)。
sysupgrade 檔案。取消勾選「保留設定」(因為這是第一次安裝,不需要保留 initramfs 的暫存設定)。
按下「刷寫」,等待路由器自動重開機。這個過程大約需要三到五分鐘,中間會斷線、重連,屬於正常現象。
http://192.168.1.1,如果看到正常的 LuCI 首頁,就代表正式版安裝成功。驗證是否成功寫入,可以透過 SSH 連進路由器,執行 cat /proc/mtd 或 df -h 觀察分割區掛載狀況。如果有看到掛載在 /overlay 的 NAND 分割區,就代表系統確實是跑在快閃記憶體上,而不是記憶體中的臨時系統。
3-3 初始設定:網路、時區、SSH 與 LuCI 強化
刷機完成後的第一次開機,建議依照以下順序做基本設定,避免日後還要回頭補:
Asia/Taipei,並勾選「啟用 NTP 用戶端」,讓系統時間自動同步。時間不準會導致 TLS 憑證驗證失敗、排程任務錯亂。192.168.0.0/24 或 192.168.1.0/24,建議把 R7000 的 LAN 網段改成比較少人用的,例如 10.10.10.0/24,避免與其他設備或 VPN 網段衝突。3-4 擴充儲存空間與安裝常用套件
R7000 的 NAND 只有 128MB,扣掉系統本身之後,可用空間大約剩下幾十 MB。如果你只裝幾支小套件(例如 AdGuard Home 的核心、WireGuard),這個空間是夠的;但如果你打算裝完整的 AdGuard Home 或是一些會產生大量日誌的服務,就會開始出現「空間不足」的警告。這時候有兩種做法:
/overlay 掛到隨身碟上,可用空間立刻變成好幾 GB。缺點是隨身碟本身有寫入壽命問題,建議選用工業級或高耐寫的產品。以下是使用 USB 隨身碟擴充 overlay 的概略流程,實際操作前請務必確認 USB 裝置代號,避免格式化錯硬碟:
# 安裝 USB 相關套件
opkg update
opkg install kmod-usb-storage kmod-fs-ext4 block-mount e2fsprogs
確認 USB 裝置有被辨識
lsblk
假設 USB 是 /dev/sda,格式化為 ext4
mkfs.ext4 /dev/sda1
掛載到 /mnt/usb 並複製現有 overlay 內容
mkdir -p /mnt/usb
mount /dev/sda1 /mnt/usb
cp -a /overlay/. /mnt/usb/
在 LuCI「系統」→「掛載點」中把 /dev/sda1 設為 /overlay 並啟用
套件方面,筆者建議至少安裝以下幾支:luci-app-adguardhome(若你的韌體來源有提供)、luci-app-wireguard、luci-app-sqm、luci-app-nlbwmon、luci-app-statistics、luci-app-uhttpd(把管理介面換成 HTTPS)。這些套件可以透過 LuCI 的「軟體」頁面搜尋安裝,也可以直接用 opkg install 指令。
四、把 R7000 打造成 800 元防火牆:功能實測
系統安裝完成之後,接下來就是「這台機器到底能幹嘛」的驗證階段。筆者依照實際需求,依序設定了防火牆規則、DNS 過濾、WireGuard VPN、VLAN 網段隔離與流量監控,以下是各項功能的實測心得。
4-1 防火牆與 NAT 規則設定實測
OpenWrt 的防火牆預設就是「LAN 可通 WAN 與所有介面,WAN 不可主動進入 LAN」的白名單模型,這對一般家庭使用者來說已經足夠。但如果你要把物聯網設備隔離,就需要自己建立新的區域(Zone)與轉發規則。
筆者的設定邏輯是:把 lan(家人的電腦與手機)、iot(智慧插座、攝影機、掃地機器人)、guest(訪客 Wi-Fi)分成三個區域,其中 lan 可以主動連到 iot,但 iot 與 guest 不能主動連到 lan,三者都可以連到 WAN 上網。
實際操作是在 LuCI 的「網路」→「介面」新增 VLAN 介面,再到「防火牆」→「區域」新增對應的 Zone,最後在「轉發」頁籤設定允許的方向。設定完成後,用 nft list ruleset 可以看到實際生成的 nftables 規則。筆者實測發現,把物聯網設備隔離之後,家中某些廉價的智慧插座確實會出現「App 顯示離線」的狀況,原因是這些設備依賴區網廣播來做裝置發現。这时候要嘛在防火牆加上針對特定 UDP 埠的允許規則,要嘛接受它只能在雲端模式使用。
4-2 AdGuard Home:全網廣告與追蹤阻擋
把 AdGuard Home 裝在 R7000 上,是筆者認為最划算的功能之一。它的運作原理很簡單:把路由器的 DNS 伺服器指向 AdGuard Home,所有裝置的 DNS 查詢都會經過它,當查詢的網域命中黑名單(例如廣告、追蹤、惡意網域),就直接回傳 0.0.0.0 或 NXDOMAIN,讓廣告根本載入不了。
安裝方式有兩種:一種是透過 opkg 安裝 adguardhome 套件,另一種是從 AdGuard 官方下載對應 arm 架構的執行檔,手動放到 USB 隨身碟上執行。筆者選擇後者,因為官方執行檔更新比較即時,而且可以自訂資料儲存路徑。
實測結果:安裝 AdGuard Home 並啟用內建的 AdGuard DNS filter、EasyList 與台灣地區相關的過濾清單之後,家中的網頁廣告明顯減少,YouTube App 的廣告雖然無法完全阻擋(因為它走的是影片串流,不是獨立的廣告網域),但網頁與 App 中的橫幅廣告命中率相當高。查詢日誌也讓筆者發現,家裡有台電視在半夜會固定向某個中國廠商的伺服器回報——這就是流量監控的價值所在。
不過要注意,AdGuard Home 的過濾清單如果開太多,查詢延遲會上升,而且 256MB 的記憶體也可能吃緊。筆者建議初期只開三到五個清單,觀察 htop 中的記憶體使用量,再逐步增加。
4-3 WireGuard VPN 伺服器實測
WireGuard 是這幾年最紅的 VPN 協定,特點是程式碼精簡、效能好、設定相對簡單。OpenWrt 官方套件庫有 kmod-wireguard 與 wireguard-tools,LuCI 也有對應的圖形介面。筆者設定了一個 10.10.20.0/24 的 VPN 網段,讓手機與筆電可以在外面連回家。
設定的關鍵步驟包括:產生伺服器與用戶端的金鑰對、在防火牆開放 UDP 51820 埠、設定 NAT 讓 VPN 用戶端可以上網(可選)、以及在「網路」→「介面」新增 WireGuard 介面並指定監聽埠。金鑰產生的指令如下:
# 產生私鑰與公鑰
wg genkey | tee server.key | wg pubkey > server.pub
wg genkey | tee client1.key | wg pubkey > client1.pub
檢視公鑰內容,貼到對應設定欄位
cat server.pub
cat client1.pub
實測連線品質:在台灣本島以 4G 網路連回家中,ping 值大約在 20~35ms 之間,下載速度可以跑到 40~60Mbps 左右(受限於行動網路本身與 R7000 的 CPU 加解密能力)。這個速度用來存取 NAS 檔案、查看監視器畫面、或是偶爾遠端桌面都已經足夠。
五、效能實測數據與瓶頸分析
講完功能,接下來要面對現實:一台 2013 年的雙核 1GHz ARM 處理器,在 2024 年還能撐得住多少流量?筆者用iperf3、speedtest-cli 與實際檔案傳輸做了幾組測試,以下是結果與分析。
5-1 有線吞吐量與 NAT 效能
首先是最基本的「LAN 到 WAN 的 NAT 吞吐量」。測試方式是電腦接在 LAN 埠,WAN 埠接到另一台跑 iperf3 伺服器的機器,中間不經過任何其他設備。
測試項目
結果
備註
LAN → WAN 單向 TCP
約 940 Mbps
接近 Gigabit 線速,受 CPU 影響不明顯
LAN → WAN 雙向 TCP
約 880 Mbps
雙向同時跑時略降
啟用 SQM 後的單向 TCP
約 180 ~ 220 Mbps
SQM 會消耗大量 CPU,這是預期中的代價
啟用 AdGuard Home 後的 DNS 查詢
平均 3 ~ 8 ms
清單數量與快取命中率影響很大
WireGuard 加密吞吐
約 55 ~ 70 Mbps
Chacha20-Poly1305,單核跑滿
從數據來看,R7000 在不開額外功能的情況下,NAT 效能足以吃滿 Gigabit 線路,這對大多數家庭來說已經綽綽有餘。但一旦啟用 SQM 或 WireGuard 這類吃 CPU 的功能,吞吐量就會明顯下降。這也是為什麼筆者建議:如果你家有 500Mbps 以上的寬頻,並且很在意 QoS,就要考慮是否值得開啟 SQM,或者改用效能更強的 x86 平台。
5-2 高負載下的溫度與穩定性觀察
R7000 的機身設計有被動散熱孔,原廠沒有風扇。筆者連續跑了一小時的 iperf3 滿載測試,並用 cat /sys/class/thermal/thermal_zone0/temp 觀察 CPU 溫度(若韌體有支援)。實測室溫約 26 度,滿載時 CPU 溫度大約在 60~70 度之間,機身摸起來微溫,沒有出現降頻或斷線的狀況。
不過要注意的是,筆者把機器放在通風良好的位置,而且沒有裝在密閉機櫃裡。如果你打算把它塞進弱電箱,建議至少在旁邊留一些空間,或是在機身底部加裝一個小型 USB 風扇輔助散熱。另外,二手機的散熱膏可能已經老化,如果溫度明顯偏高,可以考慮拆機重塗散熱膏——但這會影響保固(雖然二手機通常也沒保固了),請自行評估。
六、常見問題與排錯指南
刷機這種事情,就算事前準備再充分,還是可能遇到一些預期外的狀況。以下整理筆者自己遇到、以及社群中常見的幾個問題與處理方式。
6-1 刷機失敗或無法進入系統的處理
最常見的狀況是「刷完之後重開機,網頁打不開、燈號也不對」。这时候請先冷靜,按照以下順序排查:
192.168.1.0/24(OpenWrt 預設),請確認電腦的固定 IP 與子網路遮罩正確。ping 192.168.1.1,如果 ping 得到但網頁打不開,可能是 LuCI 套件沒裝好,可以嘗試 SSH 進去(預設 root,無密碼)。筆者自己第一次刷機時,就因為把 sysupgrade 當成 initramfs 上傳,導致路由器重開機後一直停在開機畫面。後來用 TFTP 救援模式重刷原廠韌體,再重新照著步驟做一次就成功了。这也是为什么筆者一直强调「先演練救援流程」。
6-2 Wi-Fi 訊號與驅動相關問題
前面提過,OpenWrt 在 R7000 上使用的是開源的 brcmfmac 驅動,與原廠韌體的封閉驅動相比,功能與效能都會有一些落差。實際會遇到的狀況包括:
如果你的無線需求比較高,筆者的建議是:讓 R7000 專心當有線防火牆與閘道器,Wi-Fi 交給一台新的 Wi-Fi 6 或 Wi-Fi 7 基地台(設定為 Access Point 模式)。這樣不但效能更好,也讓 R7000 的 CPU 不會同時被 NAT 與無線驅動吃光。
6-3 韌體更新與還原原廠的流程
OpenWrt 的更新頻率大約是每年一到兩次大版本,加上不定期的安全性修補。更新方式很簡單:下載對應版本的 sysupgrade 檔案,到 LuCI 的「系統」→「備份/韌體更新」上傳即可,預設會保留設定。更新前建議先做一次「產生備份」的動作,把設定檔下載到電腦,以備不時之需。
如果哪天你決定把 R7000 還原成原廠韌體(例如要賣掉、送人,或是想換回原廠的 Wi-Fi 驅動),流程如下:
從 Netgear 官網下載對應硬體版本的原廠韌體(.chk 檔)。
把電腦設為 192.168.1.2,準備好 TFTP 伺服器。
斷電 R7000,按住 Reset 鍵不放,插電,觀察燈號閃爍。
路由器會透過 TFTP 抓取韌體並自動寫入,完成後重開機。
這個流程與前面提到的救援模式完全相同。也就是說,只要你會救援,你就同時會還原原廠——這也是為什麼筆者一直強調救援流程的重要性。
七、結論:800 元防火牆到底值不值得?
寫到這裡,應該可以把整個實測做一個總結了。用 800 元買一台二手 Netgear R7000,刷上 OpenWrt,經過筆者這段時間的實際使用,它確實可以勝任以下角色:有線閘道器、基本防火牆、全網 DNS 過濾器、WireGuard VPN 伺服器、以及 VLAN 網段隔離的執行者。這些功能如果要用市售設備來達成,大概要花上三到十倍的預算。
但它也不是沒有缺點。首先,它沒有原廠保固與技術支援,出問題只能靠自己查資料或問社群。其次,Broadcom 平台的無線驅動是開源版本,功能與效能都有所取捨,不建議把它當成主要的 Wi-Fi 基地台。第三,舊硬體的可靠度終究有極限,筆者建議至少準備一份原廠韌體與 TFTP 救援流程,以備不時之需。
如果你問筆者「這 800 元花得值不值得」,我的答案是:如果你願意花幾個小時學習 OpenWrt,而且你的網路需求落在 500Mbps 以下的寬頻、有物聯網設備要隔離、有遠端連線需求,那麼這 800 元絕對值得。它帶給你的不只是省下的硬體費用,還有一套你可以完全掌控、隨時可以調整的網路架構。而這種掌控感,是買現成設備很難得到的。
反過來說,如果你完全不想碰命令列、不想研究防火牆規則、只想「插電就能用」,那麼多花一點錢買市售的消費級路由器或入門商用設備,會是比較省心的選擇。工具本身沒有好壞,適合你的才是好工具。
最後,如果你也刷了 R7000,或是有其他舊路由器改造的經驗,歡迎到「雅寶社區 · 頂客論壇」的 3C 科技教學版分享你的實測結果。特別是不同版本 OpenWrt 在 R7000 上的 Wi-Fi 表現、SQM 的參數調校、以及 AdGuard Home 的清單組合,這些都是社群最需要的一手資料。大家一起把抽屜裡的舊機器救回來,也算是對電子垃圾減量盡一份心力。
延伸閱讀與參考資源
OpenWrt 官方韌體下載頁面(搜尋 netgear_r7000)
OpenWrt 官方文件:bcm53xx 目標平台說明
Netgear R7000 官方支援頁面(原廠韌體下載)
AdGuard Home 官方文件與過濾清單列表
WireGuard 官方快速入門指南
OpenWrt 社群論壇中關於 R7000 的討論串
本文為個人實測心得,硬體與韌體版本可能因時間推移而有差異,操作前請務必自行評估風險並備份重要資料。刷機有風險,動手前請詳閱官方文件。
```
💬 想說點什麼?
歡迎到留言板分享你的想法、心得或疑問。
💬 前往留言板 →