WireGuard 是一個開源的 VPN 協議和軟件,特點是快、省電、代碼量小。
它只用一種現代加密組合,沒有可選項可挑,一份配置檔案不到二十行,手機上一個二維碼就能導入。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。
服務商給的配置或二維碼已經包含這些字段,自己不用改;自建伺服器則需要在伺服器端為每個客戶端加一段 [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)。
- 點「+」,選「從二維碼創建」掃描服務商提供的二維碼,或「從檔案導入」。
- 首次連接時系統會請求添加 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 的應用(Android 和 macOS)用的是 VLESS + Reality,DNS 在隧道內解析,Android 版帶 Kill Switch。WireGuard 只在伊斯坦布爾和馬賽兩個節點提供:在個人中心的「密鑰」頁切到 WireGuard,領取 .conf 檔案或二維碼,導入 WireGuard 應用或任何 WireGuard 客戶端,路由器也能用這份檔案;配置裏 DNS 在隧道內(1.1.1.1 和 9.9.9.9),IPv4 和 IPv6 全走隧道。協議由你自己選,不會自動切換;WireGuard 在中國內地會被攔截。連接方式見工作原理,開始使用請到首頁。