找回密碼
 立即註冊
    查看: 14|回覆: 0

    【WireGuard 用戶端】AllowedIPs 到底在做什麼:全流量與分流的算法,以及連不上的六層排查

    [複製鏈接]

    !lvup!   100%

    384

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005859
    發表於 前天 01:22 | 顯示全部樓層 |閱讀模式
    伺服器架好了,設定檔也拿到了,但手機連上去之後家裡的東西還是打不開。這篇處理的就是這一段。

    這篇不教你怎麼架伺服器(本系列另外有專門講那件事的篇章)。這篇假設你手上已經有一份用戶端設定檔 —— 不管它是 wg-easy 產生的、是別人給你的、還是你自己寫的 —— 然後處理接下來的每一件事:


    • 那六個欄位各自在做什麼,尤其是最容易被誤解的 `AllowedIPs`
    • 全流量和分流怎麼選,而且 `AllowedIPs` 要怎麼算
    • iPhone、Android、Windows 各自有什麼、沒有什麼
    • 連不上的時候,六層一層一層往下查


    全篇會用同一組設定當例子,你只要把數字換成你自己的:
    1. 家裡的區網        192.168.1.0/24
    2. 家裡的路由器      192.168.1.1
    3. Home Assistant    192.168.1.10
    4. 家裡的 DNS        192.168.1.10(跑 AdGuard Home 或 Pi-hole)
    5. VPN 的隧道網段    10.8.0.0/24
    6.   伺服器          10.8.0.1
    7.   你的手機        10.8.0.2
    8.   你的筆電        10.8.0.3
    9. 對外               home.example.com:51820(UDP)
    複製代碼

    ---

    步驟 1:看懂設定檔的六個欄位

    WireGuard 的用戶端設定就是一個純文字檔,副檔名 `.conf`。長這樣:
    1. [Interface]
    2. PrivateKey = KG5xL2...(你的私鑰,42 個字元結尾是 =)
    3. Address = 10.8.0.2/32
    4. DNS = 192.168.1.10
    5. MTU = 1420
    6. [Peer]
    7. PublicKey = hT8vQ1...(伺服器的公鑰)
    8. PresharedKey = 9jXm4...(選配,多一層對稱加密)
    9. Endpoint = home.example.com:51820
    10. AllowedIPs = 10.8.0.0/24, 192.168.1.0/24
    11. PersistentKeepalive = 25
    複製代碼

    一個一個看
    1. 欄位                在做什麼                        寫錯的症狀
    2. ------------------------------------------------------------------
    3. PrivateKey          你的身分。跟你的公鑰成對          握手永遠不會成功,
    4.                                                       而且看不出原因
    5. Address             你在隧道裡的 IP。               通了但別人回不了你
    6.                     **要寫 /32 不是 /24**
    7. DNS                 連上之後用哪台 DNS               IP 連得到但名字打不開
    8. MTU                 每個封包最大幾個位元組            握手成功、ping 通、
    9.                     預設 1420                        但網頁打不開(步驟 7 第六層)
    10. PublicKey           伺服器的公鑰                     握手永遠不會成功
    11. Endpoint            伺服器在哪裡(網域或 IP + 埠)    完全沒有任何封包送出
    12. AllowedIPs          往下看,這個最重要               各式各樣
    13. PersistentKeepalive 每 25 秒送一個心跳封包            斷線之後不會自己回來
    複製代碼

    ⚠ `Address` 要寫 `/32`。 寫 `/24` 的話,你的裝置會以為「10.8.0.0/24 這整段跟我直接相連」,於是不會把要送給 10.8.0.1 的封包交給 WireGuard 處理 —— 症狀是隧道看起來連上了,但 ping 伺服器不通。

    ⚠ `PersistentKeepalive = 25` 不要省。 官方的原話是「25 秒是一個對各式各樣防火牆都有效的合理間隔」。沒有它的話,你的手機從 Wi-Fi 切到行動網路、或者放著沒用十分鐘之後,中間的 NAT 會把對應關係忘掉,伺服器就再也找不到你,直到你主動送出下一個封包。做遠端監控的話這是致命的。

    ---

    伺服器就再也找不到你,直到你主動送出下一個封包

    步驟 2:AllowedIPs —— 同一個欄位,兩邊的意思不一樣

    這是整個 WireGuard 最容易被誤解的地方,而且誤解的後果是「通了但用不了」。
    1. 在「用戶端」的設定檔裡:
    2.   AllowedIPs = 這些目的地的封包,請走這條隧道
    3.   (等於在你的裝置上加路由)
    4. 在「伺服器」的設定檔裡(每個 peer 各一份):
    5.   AllowedIPs = 只接受這個 peer 送來、來源 IP 在這個範圍內的封包
    6.   (等於存取控制)
    複製代碼

    所以伺服器端每個用戶端的 AllowedIPs 一定要寫 `/32`:
    1. [Peer]
    2. # 手機
    3. PublicKey = ...
    4. AllowedIPs = 10.8.0.2/32      ← 一定要 /32
    5. [Peer]
    6. # 筆電
    7. PublicKey = ...
    8. AllowedIPs = 10.8.0.3/32      ← 一定要 /32
    複製代碼

    寫成 `10.8.0.0/24` 的話,第二個 peer 會覆蓋第一個 —— WireGuard 是靠「這個來源 IP 屬於哪個 peer」來決定回信要送給誰的。兩個 peer 宣告同一段,後面那個會搶走全部。症狀是「第二個人連上之後,第一個人就斷了」。

    ⚠ 用 MikroTik RouterOS 當伺服器的話多注意一件事:它的 WireGuard 預設監聽埠是 13231 不是 51820。照著網路教學填 51820 會完全連不上,而且你會一直去查防火牆。

    分流 vs 全流量

    這是用戶端 `AllowedIPs` 唯一要做的決定。
    1.                     分流(split tunnel)        全流量(full tunnel)
    2. ------------------------------------------------------------------
    3. AllowedIPs          10.8.0.0/24,                0.0.0.0/0, ::/0
    4.                     192.168.1.0/24
    5. 哪些流量走隧道      只有家裡的                   全部
    6. 上網速度            不受影響                     受你家上傳頻寬限制
    7. 在外面用公用 Wi-Fi  不受保護                     受保護
    8. 是否被偷看
    9. 家裡的網路被看到    只有你連家裡時               所有網站都看到你家的 IP
    10. 的來源 IP
    11. 手機耗電            低                           高
    12. 適合                日常長時間掛著               公用 Wi-Fi、飯店、
    13.                                                  需要台灣 IP 的服務
    複製代碼

    建議:手機上建兩份設定,日常用分流,在外面接公用 Wi-Fi 時切到全流量。兩份可以共用同一把金鑰,只有 `AllowedIPs` 那一行不一樣。

    分流的 AllowedIPs 怎麼算

    把你要從外面存取的網段全部列出來,隧道網段本身也要列:
    1. AllowedIPs = 10.8.0.0/24, 192.168.1.0/24
    複製代碼

    有多個 VLAN 的話一段一段加:
    1. AllowedIPs = 10.8.0.0/24, 192.168.1.0/24, 192.168.20.0/24, 192.168.30.0/24
    複製代碼

    只要存取一台機器的話可以更緊:
    1. AllowedIPs = 10.8.0.0/24, 192.168.1.10/32
    複製代碼

    ⚠ 一個非常常見的失敗:只寫 `192.168.1.0/24` 而漏掉 `10.8.0.0/24`。症狀是家裡的東西都連得到,但 ping 不到伺服器本身,而且伺服器上跑的服務(例如 wg-easy 的網頁介面)也打不開。

    全流量的兩個版本
    1. 最簡單:
    2. AllowedIPs = 0.0.0.0/0, ::/0
    3. 排除私有網段(Windows / Android 的勾選框會自動產生):
    4. AllowedIPs = 0.0.0.0/5, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, ...
    5. (一長串,這是把 10/8、172.16/12、192.168/16 等
    6.   從 0.0.0.0/0 裡「減掉」之後的結果)
    複製代碼

    「排除私有網段」是做什麼用的:讓你在走全流量的同時,還能連到你人在的那個地方的區網(飯店的印表機、咖啡廳的網路認證頁)。

    ⚠ 但它跟 WireGuard 最大的坑撞在一起:如果你人在的那個地方,區網剛好也是 `192.168.1.0/24`(這在台灣極常見,中華電信的數據機預設就是),那你永遠連不到家裡的 192.168.1.10 —— 你的裝置會認為那是本地的機器。

    解法只有一個:把家裡的網段改掉。 改成 `192.168.77.0/24`、`10.20.30.0/24` 這種沒人用的。這件事要在架 VPN 之前先做,改完家裡所有裝置的 IP 都會變。

    ---

    步驟 3:三個平台的實際操作

    先決定金鑰在哪裡產生


    • 伺服器幫你產生(wg-easy 這類工具的做法)—— 你會拿到一個 QR code 或一個 `.conf` 檔,直接匯入。缺點是你的私鑰曾經存在伺服器上
    • 在裝置上產生 —— 三個平台的 App 都可以在新增隧道時按「產生金鑰對」,然後你只要把公鑰交給伺服器管理員。私鑰從頭到尾沒離開過你的裝置


    Linux / macOS 上手動產一對:
    1. wg genkey | tee private.key | wg pubkey > public.key
    2. cat private.key
    3. cat public.key
    複製代碼

    你會看到什麼:兩串 44 個字元、結尾是 `=` 的 Base64 字串。

    iPhone / iPad


    • App Store 搜 WireGuard(發行者是 WireGuard Development Team,免費、沒有廣告)
    • 右上角 + → 從 QR code 掃描 或 從檔案或封存匯入 或 從頭開始建立
    • 第一次啟用時 iOS 會跳出「WireGuard 想要加入 VPN 設定」,按允許


    你會看到什麼:隧道清單裡出現一個項目,右邊有一個開關。打開之後手機狀態列會出現 VPN 的字樣。

    ⚠ iOS 沒有「排除私有網段」的勾選框。 要做那件事只能自己把那一長串 AllowedIPs 貼進去。

    Android


    • Google Play 搜 WireGuard
    • 右下角 + → 掃描 QR code / 從檔案匯入 / 從頭建立
    • 編輯隧道時,Peer 那一段有一個 Exclude private IPs 勾選框 —— 勾下去它會自動把那一長串算好填進 AllowedIPs


    Windows


    • 去 wireguard.com 下載官方的 Windows 版(現行穩定版是 1.0.20260223)
    • 左下角「新增隧道」→ 從檔案匯入,或者「新增空白隧道」(它會自動幫你產金鑰對)
    • 匯入之後按「啟用」


    Windows 版獨有的兩個勾選框:


    • Block untunneled traffic(kill-switch) —— 隧道斷掉時直接切斷所有網路,避免 IP 外洩。只有在 AllowedIPs 是 `0.0.0.0/0, ::/0` 的時候才能勾;勾了「排除私有網段」之後 AllowedIPs 會變成一長串,這個選項就會變灰
    • On-Demand(隨需啟用) —— 可以設定「乙太網路或 Wi-Fi 一連上就自動啟用」


    三個平台的差異整理
    1.                         Windows           Android            iOS
    2. ------------------------------------------------------------------
    3. 排除私有網段的勾選框     有                有                 沒有
    4. kill-switch              有(真的擋)      系統的「一律開啟    只能靠按需啟用,
    5.                                            VPN」             沒有真正的阻斷
    6. 按需啟用                 有(依網路介面)  靠系統的一律開啟    有(依 SSID
    7.                                                               或行動網路)
    複製代碼

    ---

    步驟 4:DNS —— 這是「IP 通了但名字打不開」的原因

    `DNS = 192.168.1.10` 這一行在做什麼:隧道啟用時,把你裝置的 DNS 伺服器換成家裡那一台。

    好處:


    • 你可以用 `ha.home.lan` 這種內部名稱連回家,而不是背 IP
    • 家裡如果跑 AdGuard Home 或 Pi-hole,在外面上網也會擋廣告


    代價:

    以下還有約 61% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-9-27 02:17 , Processed in 0.153713 second(s), 24 queries .

    快速回覆 返回頂部 返回列表