WireGuard 是一個開源的 VPN 協議和軟體,特點是快、省電、程式碼量小。它只用一種現代加密組合,沒有可選項可挑,一份配置檔案不到二十行,手機上一個QR Code就能匯入。Linux 核心從 5.6 起原生內建它,Windows、macOS、iOS、Android 都有官方客戶端。缺點同樣明確:它跑在 UDP 上,流量特徵固定,在識別並干擾 VPN 的網路裡很容易被限速或斷連。所以它是「網路正常時的首選」,而不是「任何環境的萬能鑰匙」。
WireGuard 的工作原理
打個比方:這就像你和朋友各自留了一把只有對方認得的鑰匙,見面時互相亮一下就算認證完了。具體說,WireGuard 用公鑰密碼學做身份:每一端生成一對金鑰,把公鑰交給對方。你的客戶端和伺服器各自拿著對方的公鑰,握手時互相驗一遍,然後用協商出的會話金鑰加密之後的所有資料包。整個過程跟 SSH 的金鑰登入一個路數,沒有使用者名稱密碼,也沒有證書鏈。
它的路由規則叫 AllowedIPs,寫在你的客戶端配置裡,意思是「哪些目標地址走隧道」。你寫 0.0.0.0/0, ::/0 就是全部流量都走,寫某個網段就只有那個網段走。同一個欄位放在伺服器端,意思變成「允許這個客戶端用哪些源地址」。你把這一個欄位吃透,WireGuard 就基本吃透了。
| 工作原理 | 說明 |
|---|---|
| 雙方各有一對金鑰 | 私鑰留在自己手裡 |
| 公鑰交給對方 | 用於驗證 |
| 收到的包 | 沒有已知金鑰簽名就直接丟棄 |
WireGuard 配置檔案逐行解釋
一份典型的客戶端配置:
[Interface]
PrivateKey = 客戶端私鑰
Address = 10.0.0.2/32
DNS = 10.0.0.1
[Peer]
PublicKey = 伺服器公鑰
Endpoint = 伺服器域名或IP:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
PrivateKey:你這臺機器的私鑰,只存在本機,洩露了就等於帳號洩露。Address:隧道里本機的虛擬地址。DNS:隧道建立後使用的 DNS。填隧道內的地址,否則域名解析會繞過隧道,見DNS 洩露是什麼意思。PublicKey:伺服器公鑰,用來驗證對面確實是你的伺服器。Endpoint:伺服器地址和埠,預設 51820,可以改成任意埠。AllowedIPs:走隧道的目標範圍,0.0.0.0/0, ::/0表示 IPv4 和 IPv6 全走。PersistentKeepalive:每隔多少秒發一個空包,手機在 NAT 後面必須設,一般 25。
服務商給的配置或QR Code已經包含這些欄位,自己不用改;自建伺服器則需要在伺服器端為每個客戶端加一段 [Peer]。
| 配置行 | 含義 |
|---|---|
| PrivateKey | 你的私鑰 |
| Address | 你在隧道里的地址 |
| DNS | 由誰解析域名 |
| AllowedIPs | 哪些流量走隧道 |
| Endpoint | 伺服器地址和埠 |
| MTU | 資料包大小 |
WireGuard Windows 和 macOS 配置
- 從官網 wireguard.com 下載安裝客戶端(macOS 也可在 App Store 安裝)。
- 開啟客戶端,「匯入隧道」選擇
.conf檔案,或者「新建空隧道」把配置粘進去。 - 點「連線」。工作列圖示變綠,狀態裡的「最近握手」有時間,就說明通了。
- 開啟我的 IP 是什麼確認顯示的是伺服器地址。
Windows 上有一個常見坑:客戶端預設開啟 Kill Switch 一類的「阻止未經隧道的流量」選項,隧道斷開時會完全斷網,這是正確行為,不是故障。另一個坑是 IPv6:如果伺服器不支援 IPv6 卻寫了 ::/0,IPv6 站點會打不開,刪掉 ::/0 即可。
WireGuard iOS 和 Android 配置
- 安裝官方 WireGuard 應用(App Store / Google Play)。
- 點「+」,選「從QR Code建立」掃描服務商提供的QR Code,或「從檔案匯入」。
- 首次連線時系統會請求新增 VPN 配置,允許。
- Android 上建議在系統設定的 VPN 項裡開啟「始終開啟的 VPN」和「遮蔽未使用 VPN 的連線」,相當於系統級 Kill Switch。
- 手機在行動網路下如果頻繁斷線,把
PersistentKeepalive設為 25,並在電池設定裡把應用設為「不受限制」。
按需隧道(On-Demand):iOS 客戶端可以設定「連線到某些 Wi-Fi 時自動開啟」,適合公共 Wi-Fi 場景。
WireGuard OpenWrt 路由器配置
適合讓電視、遊戲機這類裝不了客戶端的裝置一起走隧道。
- 安裝軟體包:
opkg update && opkg install wireguard-tools luci-proto-wireguard。 - 網路 → 介面 → 新增新介面,協議選 WireGuard VPN,填入私鑰和
Address。 - 在「對端」標籤新增伺服器公鑰、Endpoint、AllowedIPs 和 Keepalive,勾選「路由允許的 IP」。
- 防火牆裡把新介面放進 wan 區域(或新建區域),確保 lan → 該區域允許轉發並開啟 IP 動態偽裝。
- DNS:在 DHCP/DNS 設定裡把上游 DNS 改為隧道中國大陸址,否則全屋 DNS 洩露。
- 重啟網路,從內網裝置開啟我的 IP 是什麼驗證。
路由器的 CPU 決定速度。入門級路由器跑 WireGuard 大約幾十到一兩百兆,夠看影片;想跑滿千兆需要 x86 或高階 ARM 平臺。
| AllowedIPs 的值 | 結果 |
|---|---|
| 0.0.0.0/0 | 全部流量進隧道 |
| 某個網段 | 只有這個網段進隧道 |
一行決定這是完整隧道還是通往某個網路的線路。
WireGuard 還是 VLESS
兩者解決的是不同問題。WireGuard 追求最快、最省電;VLESS + Reality 追求讓隧道看起來像普通 HTTPS。經驗規則:
- 家庭寬頻、正常的行動網路、海外:WireGuard,速度和續航都最好。
- 會識別並干擾 VPN 的網路(部分校園網、企業網、某些地區的電信業者):VLESS + Reality,WireGuard 在這種環境裡往往連不上或被限速。
- 不確定:先試 WireGuard,連不上或明顯限速就換 VLESS。
VLESS 為什麼更難被識別,在VLESS 與 Reality裡有詳細解釋。如果你用的是機場訂閱,它通常同時給出兩種節點,客戶端裡切換即可。
| 症狀 | 原因 |
|---|---|
| 沒有握手 | 金鑰或地址 |
| 有握手但沒流量 | AllowedIPs |
| IP 能開、域名打不開 | DNS |
| 行動網路下斷 | MTU |
配置在手但每行看不懂時,把金鑰刪掉再問。
逐行解釋我的 WireGuard 配置。
金鑰我已經刪掉了,如下:
[Interface]
Address = (你的值)
DNS = (你的值)
MTU = (如果有)
[Peer]
AllowedIPs = (你的值)
Endpoint = (城市,或寫「隱去」)
PersistentKeepalive = (如果有)
告訴我每一行的作用、按這個 AllowedIPs 是不是
全部流量都走隧道,以及在行動網路下斷線時改哪裡。
不要編造我配置裡沒有的行。
PrivateKey 和 PublicKey 兩行不要粘到任何地方:私鑰就是你的全部訪問許可權。
WireGuard 連不上:排錯速查
- 「最近握手」一直為空:伺服器地址或埠不通、公鑰填錯、或者本地時間偏差太大。
- 握手成功但打不開網頁:
AllowedIPs沒包含目標、DNS 沒走隧道、或 IPv6 配置與伺服器不匹配。 - 手機幾分鐘後斷線:沒設 Keepalive,或系統把應用後臺凍結了。
- 速度只有幾兆:先用網速測試對比開關隧道的速度,然後換一個更近的伺服器,或者路由器 CPU 到頂了。
404 VPN 的客戶端同時內建 WireGuard 和 VLESS + Reality,按網路情況自動選擇,DNS 在隧道內解析,並帶 Kill Switch;路由器沒有我們提供的配置檔案,需要從帳戶取金鑰再填進支援它的路由器。連線方式見工作原理,開始使用請到首頁。