最近把家裡的網路架構從單純的 USB 無線網卡上網,一路進化到雙線並行 + 策略路由(PBR),踩了不少坑,也累積了不少實戰經驗。把這些筆記整理成文,方便日後重置時快速恢復,也分享給有類似需求的同好。


一、基礎架構:PVE + OpenWRT + USB Wi-Fi 網關

硬體配置

  • 底層系統:Proxmox VE(PVE)
  • 網關系統:OpenWRT(安裝於 PVE 的 VM 100)
  • 對外網路(WAN):TP-Link Archer T2U PLUS(RTL8821AU 晶片,USB 無線網卡)

關鍵硬體解法:USB 延長線的電壓災難

一開始我直接用了一條 5 米 USB 延長線把網卡接到 PVE 主機,結果 PVE 完全認不到網卡(unable to enumerate)。查了一下才發現是長距離 USB 延長線導致嚴重電壓衰減,網卡啟動電流不足。

解法:換成「帶獨立 110V 供電的 USB 擴展器(Hub)」,確保網卡啟動時供電充足。這個硬體成本不高,但解決了最大的穩定性問題。

PVE 開機啟動順序設定

因為 OpenWRT 是所有 LXC / VM 的網路源頭,而 USB 擴展器需要時間初始化,所以開機順序必須嚴格設定:

  1. VM 100(OpenWRT)Boot order = 1 / Startup delay = 15(等待 USB 擴展器就緒)
  2. 其他 LXC / VMBoot order = 2(或更後)/ Startup delay = 30~45(等待 OpenWRT 撥接上網)

OpenWRT 自動連網腳本

USB 網卡直通載入速度比 OpenWRT 開機慢,需要延遲執行 Wi-Fi 重載指令。在 OpenWRT 的 /etc/rc.local 中,exit 0 之前加上:

sleep 15
wifi reload

這樣 OpenWRT 開機後會等 15 秒讓網卡穩定,再自動重載 Wi-Fi 連線。


二、日常維護守則:兩種情境的差異

🟢 情境 A:實體停電 / 關閉總電源後重開

狀態:完美自動化,什麼都不用做。

因為總電源斷電,USB 擴展器也會徹底放電重置。復電後 PVE 會完美依序喚醒所有設備。

🔴 情境 B:在 PVE 系統內手動執行 reboot

狀態:極易觸發網卡「殭屍供電狀態(Zombie Power State)」。

原因:PVE 重開機切斷了主機板 USB 訊號,但擴展器的 110V 依然在供電,導致網卡晶片當機卡死,重啟後 lsusb 完全抓不到。

徹底放電 SOP

  1. 拔掉擴展器的 110V 電源插頭(最重要!)
  2. 拔掉擴展器連到 PVE 的 Type-C 線
  3. 拔掉 USB 網卡連到擴展器的線
  4. 靜置等待 10 秒鐘
  5. 依序接回:110V 電源 → Type-C 線 → USB 網卡(PVE 查 lsusb
  6. 將 OpenWRT reboot(查 iw dev
  7. 網路將在一至兩分鐘內自動恢復

三、突發斷網故障排除 SOP

如果平時突然斷網,請依序下指令檢查斷點在哪裡:

Step 1:檢查 PVE 底層硬體

於 PVE 終端機執行:

lsusb
  • 正常:列表中有 TP-Link Archer T2U PLUS
  • 異常(沒看到):代表物理斷線或供電異常。請檢查延長線是否鬆脫,或執行上述「情境 B」的徹底放電 SOP

Step 2:檢查 OpenWRT 網卡狀態

於 OpenWRT 終端機執行:

iw dev
  • 正常:出現 phy0-sta0 且有顯示連線的 SSID
  • 異常(無輸出):代表 PVE 沒把網卡直通進來。請回 PVE 確認直通設定(qm config 100

Step 3:手動重啟網路

如果硬體都在,但就是上不了網,可手動踹它一腳:

wifi reload
ping -c 4 8.8.8.8

四、進階擴充:雙線並行 + PBR 策略路由

為什麼需要雙線?

單線 USB Wi-Fi 雖然穩定,但頻寬有限。後來加了一條 500M 有線網路(無線中繼 AP → 小主機第二網口 enp2s0),想把高速頻寬給全家設備用,同時讓 Ubuntu LXC 繼續走 USB Wi-Fi 的 150M 線路。

目標:Ubuntu LXC(192.168.88.6)獨佔手機 / USB 網路,其餘家庭設備與 PVE 本身依舊走有線 500M 上網。

完整建置 SOP

Step 1:建立網路介面與防火牆設定(不搶佔預設路由)

登入 OpenWRT 終端機,確認實體線路插妥(PVE 底層 enp2s0 狀態為 UP)後執行:

# 建立 wan2 介面並綁定實體網口 eth1
uci set network.wan2=interface
uci set network.wan2.device='eth1'
uci set network.wan2.proto='dhcp'

# 核心設定:禁止 wan2 成為全家預設路由(保障主力線路)
uci set network.wan2.defaultroute='0'
uci commit network

# 將 wan2 加入外網防火牆區域(Zone)
uci add_list firewall.@zone[1].network='wan2'
uci commit firewall

# 重啟網路服務獲取 IP
/etc/init.d/network restart

Step 2:安裝與設定 PBR 策略路由

# 更新套件庫並安裝 PBR 策略路由與繁中介面
opkg update
opkg install pbr luci-app-pbr luci-i18n-pbr-zh-tw

# 啟用 PBR 總開關並建立 Ubuntu 專屬路由規則
uci set pbr.config.enabled='1'
uci add pbr policy
uci set pbr.@policy[-1].name='Ubuntu_to_Phone'
uci set pbr.@policy[-1].src_addr='192.168.88.6'
uci set pbr.@policy[-1].interface='wan2'
uci commit pbr

# 設定開機自啟並立即啟動 PBR
/etc/init.d/pbr enable
/etc/init.d/pbr start

雙線並行狀態驗證

  • Ubuntu LXC(192.168.88.6)終端機:輸入 curl ifconfig.me → 應顯示 USB 網卡的 IP
  • 其他一般內網設備(如 Windows 筆電):輸入 curl ifconfig.me → 應顯示 500M 有線網路的 IP

兩個 IP 不同,即代表分流規則已生效。

無痛移除與環境復原

未來若不再需要雙線,想要完全移除並還原至純粹的單線狀態,請登入 OpenWRT 終端機 執行:

# 1. 停止並徹底移除 PBR 策略路由套件與設定檔
/etc/init.d/pbr stop
/etc/init.d/pbr disable
opkg remove pbr luci-app-pbr luci-i18n-pbr-zh-tw
rm -f /etc/config/pbr

# 2. 刪除專為第二條線路建立的 wan2 介面
uci delete network.wan2
uci commit network

# 3. 將 wan2 從防火牆外網區域中抹除
uci del_list firewall.@zone[1].network='wan2'
uci commit firewall

# 4. 重啟網路服務讓設定生效
/etc/init.d/network restart

五、雙線對調:500M 有線主力 + 150M USB 策略路由

後來又把架構對調了——讓 500M 有線網路成為全家主要網路(wan2),USB 網卡(wan,150M)專供 Ubuntu LXC 走 PBR 分流。

CLI 快速重建指令(SOP)

若未來 OpenWRT 或是 PBR 意外重置,登入 OpenWRT 終端機 貼上以下指令,即可一鍵恢復:

# Step 1. 建立介面並將 500M 有線(wan2)設為全家主要預設路由
uci set network.wan2=interface
uci set network.wan2.device='eth1'
uci set network.wan2.proto='dhcp'
uci set network.wan2.defaultroute='1'
uci set network.wan.defaultroute='0'
uci commit network

# Step 2. 將 wan2 加入防火牆外網區域(Zone)
uci add_list firewall.@zone[1].network='wan2'
uci commit firewall

# Step 3. 設定 PBR 策略路由(讓 Ubuntu 走 wan / USB 網卡)
opkg update
opkg install pbr luci-app-pbr luci-i18n-pbr-zh-tw

# 徹底清除舊設定,並手動建立空檔案防呆
rm -f /etc/config/pbr
touch /etc/config/pbr

# 初始化 PBR 並寫入規則
uci set pbr.config=pbr
uci set pbr.config.enabled='1'
uci add pbr policy
uci set pbr.@policy[-1].name='Ubuntu_to_USB_WiFi'
uci set pbr.@policy[-1].src_addr='192.168.88.6'
uci set pbr.@policy[-1].interface='wan'
uci commit pbr

# Step 4. 重啟網路與服務讓設定生效
/etc/init.d/network restart
/etc/init.d/pbr enable
/etc/init.d/pbr start

驗證方法

  • 一般內網設備curl ifconfig.me → 應顯示 500M 中繼 AP 的 IP
  • Ubuntu LXC(192.168.88.6curl ifconfig.me → 應顯示 150M USB 網卡的 IP

完全移除中繼 AP,復原為純單線

如果未來不打算使用中繼 AP,想把全家網路改回只靠 USB 網卡,請登入 OpenWRT 終端機

# 1. 停止並徹底移除 PBR 策略路由套件與設定
/etc/init.d/pbr stop
/etc/init.d/pbr disable
opkg remove pbr luci-app-pbr luci-i18n-pbr-zh-tw
rm -f /etc/config/pbr

# 2. 將 USB 網卡(wan)重新恢復為全家主要預設路由
uci set network.wan.defaultroute='1'

# 3. 刪除中繼 AP 的 wan2 介面與防火牆規則
uci delete network.wan2
uci del_list firewall.@zone[1].network='wan2'

# 4. 提交設定並重啟網路
uci commit network
uci commit firewall
/etc/init.d/network restart

六、變更設備 IP 時的 PBR 規則更新

當內網特定設備(如 Ubuntu LXC)的虛擬機 IP 發生變動時(例如從 192.168.88.6 變更為 192.168.88.7),只需要更新 OpenWRT 內的 PBR 策略路由規則即可。

方法一:透過 OpenWRT 網頁介面(LuCI)

  1. 登入 OpenWRT 網頁管理介面
  2. 前往 「VPN」→「PBR(策略路由)」
  3. 切換到 「策略(Policies)」 標籤頁
  4. 找到原本的規則,點擊 「編輯」
  5. 「來源地址」 欄位修改為新 IP
  6. 點擊 「儲存並應用」

方法二:透過 OpenWRT 終端機(CLI)

# Step 1. 刪除 PBR 設定檔中原有的舊規則
uci -q delete pbr.@policy[0] 2>/dev/null

# Step 2. 重新建立新 IP 的分流規則(此處以 192.168.88.7 為例)
uci add pbr policy
uci set pbr.@policy[-1].name='Ubuntu_to_USB_WiFi'
uci set pbr.@policy[-1].src_addr='192.168.88.7'
uci set pbr.@policy[-1].interface='wan'
uci commit pbr

# Step 3. 重啟 PBR 策略路由服務讓設定立即生效
/etc/init.d/pbr restart

驗證

變更完成後,請登入該台換了新 IP 的 Ubuntu LXC 終端機,執行 curl ifconfig.me

  • 正確結果:顯示的對外 IP 應為 USB 無線網卡的網路出口 IP(與家用其他設備的出口 IP 不同)

七、保留 IP 給 PVE:DHCP 起始位置調整

不想讓 PVE 本身(192.168.88.2)和其他核心設備從 DHCP 領到靠前的 IP 嗎?可以把 DHCP 發放起始位置往後推。

方法 A:透過 OpenWRT 網頁介面(LuCI)

  1. 登入 OpenWRT 網頁介面
  2. 前往 「網路」→「介面」
  3. 找到 LAN,點擊 「編輯」
  4. 往下拉,找到 「DHCP 伺服器」 區塊:
    • 起始位置:輸入 101(從 192.168.88.101 開始發放)
    • 客戶端數目:輸入 100(發放 100 個 IP,即發到 192.168.88.200 為止)
  5. 點擊 「儲存並應用」

方法 B:透過 OpenWRT 終端機(CLI)

uci set dhcp.lan.start='101'        # 設定 DHCP 從 101 開始發放
uci set dhcp.lan.limit='100'        # 設定最多發放 100 個 IP(即 101 ~ 200)
uci commit dhcp                     # 提交設定並重啟 DHCP 服務
/etc/init.d/dnsmasq restart

結語

從單線 USB Wi-Fi 到雙線 PBR 策略路由,整套架構的核心在於 啟動順序的把控PBR 規則的精準設定。每次重置 OpenWRT 或新增設備時,只要照著上面的 SOP 執行,基本上一小時內就能恢復到最佳狀態。

如果你也有 PVE + OpenWRT 的家園網關,歡迎交流心得!