找回密碼
 立即註冊
惟家LINE群QRCODE
    查看: 3|回覆: 0

    用 WireGuard 從外面連回家:完整設定與五個常見錯誤

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    從外面存取家裡的 HA,安全性由高到低是:


    • Nabu Casa(官方雲端,月付,最省事)
    • VPN 回家(WireGuard / Tailscale)
    • 反向代理 + 憑證(要開通訊埠,要自己顧安全)
    • 直接開 8123 埠絕對不要


    這篇講第二種。



    為什麼選 WireGuard


    • —— 比 OpenVPN 快很多,手機連線幾乎無感
    • 省電 —— 沒流量的時候幾乎不耗電,手機可以一直開著
    • 設定簡單 —— 設定檔只有十幾行
    • 內建在 Linux 核心 —— OpenWrt、群暉、Proxmox 都支援


    缺點:需要家裡有可以連進來的 IP(固定 IP 或 DDNS),
    而且要開一個 UDP 埠。

    沒有固定 IP 怎麼辦

    方案 A:DDNS

    申請一個動態網域(No-IP、DuckDNS、或你的路由器內建的),
    IP 變動時自動更新。

    方案 B:用 Tailscale 取代

    Tailscale 基於 WireGuard,但不需要開任何通訊埠
    (它用中繼伺服器做 NAT 穿透)。

    設定比 WireGuard 更簡單,適合不想碰網路設定的人。

    代價是你的連線協調要經過 Tailscale 的伺服器
    (流量本身還是端對端加密的,他們看不到內容)。

    方案 C:被 CGNAT 擋住的話

    有些 ISP 給的是大型 NAT 後面的 IP(例如 100.64.x.x),
    這種完全不能做通訊埠轉發

    檢查方法:比對路由器 WAN 口的 IP 和
    網路上查到的「我的 IP」。不一樣就是被 CGNAT 了。

    這種情況只能用 Tailscale 或 Nabu Casa。



    設定:以 OpenWrt 為例

    步驟一:安裝
    1. opkg update
    2. opkg install wireguard-tools luci-proto-wireguard luci-app-wireguard
    複製代碼

    步驟二:產生金鑰
    1. # 伺服器(路由器)的金鑰
    2. wg genkey | tee server_private.key | wg pubkey > server_public.key
    3. # 每個客戶端各一組
    4. wg genkey | tee phone_private.key | wg pubkey > phone_public.key
    5. wg genkey | tee laptop_private.key | wg pubkey > laptop_public.key
    6. cat server_private.key server_public.key phone_private.key phone_public.key
    複製代碼

    每個裝置要有自己的金鑰對。不要共用 ——
    共用的話你沒辦法單獨撤銷某一台。

    步驟三:伺服器設定
    1. # /etc/config/network
    2. config interface 'wg0'
    3.     option proto 'wireguard'
    4.     option private_key '<server_private.key 的內容>'
    5.     option listen_port '51820'
    6.     list addresses '10.6.0.1/24'
    7. config wireguard_wg0
    8.     option description 'phone'
    9.     option public_key '<phone_public.key 的內容>'
    10.     list allowed_ips '10.6.0.2/32'
    11.     option persistent_keepalive '25'
    12. config wireguard_wg0
    13.     option description 'laptop'
    14.     option public_key '<laptop_public.key 的內容>'
    15.     list allowed_ips '10.6.0.3/32'
    16.     option persistent_keepalive '25'
    複製代碼

    步驟四:防火牆
    1. # /etc/config/firewall
    2. # 把 wg0 加進 lan 區域(最簡單,VPN 進來就等於在家裡)
    3. config zone
    4.     option name 'lan'
    5.     list network 'lan'
    6.     list network 'wg0'       # ← 加這行
    7.     ...
    8. # 允許外面連進 51820
    9. config rule
    10.     option name 'Allow-WireGuard'
    11.     option src 'wan'
    12.     option dest_port '51820'
    13.     option proto 'udp'
    14.     option target 'ACCEPT'
    複製代碼
    1. /etc/init.d/network restart
    2. /etc/init.d/firewall restart
    複製代碼

    步驟五:客戶端設定檔
    1. [Interface]
    2. PrivateKey = <phone_private.key 的內容>
    3. Address = 10.6.0.2/32
    4. DNS = 192.168.1.1
    5. [Peer]
    6. PublicKey = <server_public.key 的內容>
    7. Endpoint = your-ddns.example.com:51820
    8. AllowedIPs = 192.168.1.0/24, 10.6.0.0/24
    9. PersistentKeepalive = 25
    複製代碼

    AllowedIPs 這一行是關鍵,決定「哪些流量要走 VPN」:


    • 192.168.1.0/24, 10.6.0.0/24 —— 只有連家裡才走 VPN(分流模式,建議)
    • 0.0.0.0/0 —— 所有流量都走 VPN(連上網也繞回家,比較耗電但更私密)


    手機用分流模式,電池才撐得住,而且不影響一般上網速度。

    步驟六:產生 QR Code 方便手機掃
    1. opkg install qrencode
    2. qrencode -t ansiutf8 < phone.conf
    複製代碼

    手機的 WireGuard App 直接掃就設定好了。



    五個常見錯誤

    錯誤一:AllowedIPs 設錯

    這是最常見的。


    • 客戶端的 AllowedIPs 設成 192.168.1.0/24 但你家是 192.168.0.0/24 → 連不到
    • 設成 0.0.0.0/0 但伺服器沒開 NAT → 完全不能上網
    • 伺服器端的 peer AllowedIPs 設成 0.0.0.0/0 → 路由衝突


    規則


    • 伺服器端的 peer:寫那個客戶端的 VPN IP,用 /32
    • 客戶端的 peer:寫你想透過 VPN 存取的網段


    錯誤二:忘記 PersistentKeepalive

    手機在 NAT 後面的話,連線會被中間的路由器忘記。

    PersistentKeepalive = 25 讓它每 25 秒送一個小封包維持連線。

    沒有這行的症狀:剛連上可以用,過幾分鐘就連不到了,
    要重新開關 VPN 才行。

    錯誤三:家裡和外面的網段撞號

    家裡是 192.168.1.0/24,你人在咖啡廳,
    而咖啡廳的 Wi-Fi 也是 192.168.1.0/24

    這時候路由會混亂,你連不到家裡。

    解法:家裡用不常見的網段。


    • 避開 192.168.0.x 和 192.168.1.x(最常見)
    • 改用 192.168.37.x 或 10.66.0.x 之類的


    這件事要在一開始就決定,之後改很麻煩。

    錯誤四:DNS 沒設或設錯

    VPN 連上了,但用不了 http://ha.home 這種本地名稱。

    客戶端設定的 DNS = 192.168.1.1 要指向家裡的 DNS 伺服器

    注意:如果你用分流模式(AllowedIPs 不是 0.0.0.0/0),
    有些手機系統不會乖乖用 VPN 指定的 DNS。

    這種情況就用 IP 連,或者在手機上設 hosts(Android 比較容易)。

    錯誤五:UDP 埠被 ISP 擋

    少數 ISP 會擋非標準埠。

    試著換一個埠,例如 51820 改成 443(UDP 443 通常不會被擋,
    因為 QUIC 也用那個埠)。

    安全注意事項


    • 私鑰絕對不要外傳。QR Code 掃完就把檔案刪掉
    • 每個裝置一組金鑰,手機掉了只要刪那一個 peer
    • 定期檢查 peer 清單,把不用的刪掉
    • WireGuard 沒有「密碼」概念,金鑰就是一切
    • 不要把 VPN 網段設成完全等於 LAN,分開比較好管


    驗證有沒有通
    1. # 在伺服器上看連線狀態
    2. wg show
    3. # 會顯示每個 peer 的最後握手時間和流量
    4. peer: xxxxx
    5.   endpoint: 1.2.3.4:51234
    6.   allowed ips: 10.6.0.2/32
    7.   latest handshake: 32 seconds ago
    8.   transfer: 1.2 MiB received, 3.4 MiB sent
    複製代碼

    latest handshake 有更新就代表通了。
    一直沒有的話是封包根本沒進來(防火牆或通訊埠轉發的問題)。

    在 HA 裡監控 VPN
    1. command_line:
    2.   - sensor:
    3.       name: VPN 連線數
    4.       unique_id: wg_peers
    5.       command: >
    6.         ssh -i /config/ssh/id_rsa root@192.168.1.1
    7.         "wg show wg0 latest-handshakes | awk -v now=$(date +%s)
    8.          '{ if (now - $2 < 180) c++ } END { print c+0 }'"
    9.       scan_interval: 300
    複製代碼

    ---

    我自己用了一年多,最常用的場景其實不是「控制家裡的燈」,
    而是「用家裡的網路」 ——
    在外面連公共 Wi-Fi 時打開 VPN,流量全部走回家,比較安心。

    順便還能用家裡的 AdGuard 擋廣告。
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

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

    GMT+8, 2026-9-24 12:55 , Processed in 0.082054 second(s), 23 queries .

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