作者:宋一帆
2026年9月8日 · 8 分钟阅读

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 配置

  1. 从官网 wireguard.com 下载安装客户端(macOS 也可在 App Store 安装)。
  2. 打开客户端,「导入隧道」选择 .conf 文件,或者「新建空隧道」把配置粘进去。
  3. 点「连接」。任务栏图标变绿,状态里的「最近握手」有时间,就说明通了。
  4. 打开我的 IP 是什么确认显示的是服务器地址。

Windows 上有一个常见坑:客户端默认开启 Kill Switch 一类的「阻止未经隧道的流量」选项,隧道断开时会完全断网,这是正确行为,不是故障。另一个坑是 IPv6:如果服务器不支持 IPv6 却写了 ::/0,IPv6 站点会打不开,删掉 ::/0 即可。

WireGuard iOS 和 Android 配置

  1. 安装官方 WireGuard 应用(App Store / Google Play)。
  2. 点「+」,选「从二维码创建」扫描服务商提供的二维码,或「从文件导入」。
  3. 首次连接时系统会请求添加 VPN 配置,允许。
  4. Android 上建议在系统设置的 VPN 项里开启「始终开启的 VPN」和「屏蔽未使用 VPN 的连接」,相当于系统级 Kill Switch。
  5. 手机在移动网络下如果频繁断线,把 PersistentKeepalive 设为 25,并在电池设置里把应用设为「不受限制」。

按需隧道(On-Demand):iOS 客户端可以设置「连接到某些 Wi-Fi 时自动开启」,适合公共 Wi-Fi 场景。

WireGuard OpenWrt 路由器配置

适合让电视、游戏机这类装不了客户端的设备一起走隧道。

  1. 安装软件包:opkg update && opkg install wireguard-tools luci-proto-wireguard。
  2. 网络 → 接口 → 添加新接口,协议选 WireGuard VPN,填入私钥和 Address。
  3. 在「对端」标签添加服务器公钥、Endpoint、AllowedIPs 和 Keepalive,勾选「路由允许的 IP」。
  4. 防火墙里把新接口放进 wan 区域(或新建区域),确保 lan → 该区域允许转发并开启 IP 动态伪装。
  5. DNS:在 DHCP/DNS 设置里把上游 DNS 改为隧道内地址,否则全屋 DNS 泄露。
  6. 重启网络,从内网设备打开我的 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

配置在手但每行看不懂时,把密钥删掉再问。

给 AI 的提示词
逐行解释我的 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 在中国大陆会被拦截。连接方式见工作原理,开始使用请到首页。