跳到内容
深红色圆盘上的 WireGuard 龙纹标志

WireGuard

快速、现代、安全的 VPN 隧道

客户端 1.1.1

协议和 Windows 客户端里实际带有的 WireGuard 功能。

Cryptokey routing 是人们最先遇到的功能:一把公钥加上一份 AllowedIPs 列表。握手是 Noise_IKpsk2_25519_ChaChaPoly_BLAKE2s,使用 Curve25519、ChaCha20-Poly1305 和 BLAKE2s。与本页对应的 Windows 构建是 1.1.1,日期为 2026年9月20日。

更新于 。

密码学只有一套构造

协议页列出一套固定组合。没有密码菜单。可选的预共享密钥会混入额外的对称秘密。没有该密钥时,构造使用 32 个零字节。握手的目标是完美前向保密、身份隐藏和重放保护,并且对未通过 mac1 检查的数据包不分配会话状态。

项目点名的原语
原语作用
ChaCha20-Poly1305数据包的认证加密,采用 RFC 7539 构造。
XChaCha20-Poly1305协议要求随机 24 字节 nonce 时使用。
Curve25519ECDH。公钥是 Curve25519 点。
BLAKE2s哈希与带密钥的哈希,RFC 7693。
SipHash24哈希表密钥。
HKDF密钥派生,RFC 5869。
Noise_IKpsk2握手模式。构造字符串:Noise_IKpsk2_25519_ChaChaPoly_BLAKE2s。

白皮书称 Linux 实现不到 4,000 行,不含密码原语,因此一个人可以读完。后来对内核树的公开统计把 C 文件算进去,计入头文件后略高于这个数字。2020年3月29日发布的 Linux 5.6 带上了这条隧道。发布前的第三方审计没有报告漏洞,并补充了一条纵深防御说明。

Cryptokey routing

每个接口有一把私钥和一份对端列表。每个对端有一把公钥和 AllowedIPs。发送时,目的地址选定对端,数据包加密给该公钥,再由 UDP 送到对端的 Endpoint。接收时,数据包必须能为已知对端解密,而且内层源地址必须落在该对端的 AllowedIPs 里。否则就丢弃。

因此防火墙规则常常可以匹配「来自这个地址,在这个接口上」,并把数据包视为已经过认证。IPv4 和 IPv6 可以共用一个对端。常见示例监听端口是 51820。你的端口可以不同。

导入一份已经包含这些字段的配置

WireGuard
Tunnels 选项卡,隧道为 Active,有 Deactivate 和传输量。打开图片可查看细节。

Windows 客户端,WireGuardNT

Windows 仓库把这个客户端描述为在 Windows 上运行 WireGuard 的官方方式。它使用 WireGuardNT。管理器服务 WireGuardManager 负责托盘界面。每个隧道是名为 WireGuardTunnel$ 加上配置名的独立服务。

导入接受 .conf 文件或 .zip。版本 1.1.1 会拒绝同一次导入中的重复名称。管理器监视配置文件夹,用 CryptProtectData 把新文件加密为 .conf.dpapi,限制为 Local System(本地系统),并删除明文副本。从界面导出时会把配置重新写出来。

某个对端的 AllowedIPs 为 0.0.0.0/0 或 ::/0 时,会启用 Block untunneled traffic(阻止未走隧道的流量)。/1 路由会跳过这种防火墙行为。编辑器里有对应的复选框。网络变得无声时的步骤

WireGuard
Active 隧道上的 Add Tunnel、Edit 和 Deactivate。打开图片可查看细节。
为管理员记录的命令
命令作用
wireguard /installtunnelservice path.conf创建 WireGuardTunnel$ 和配置名。
wireguard /uninstalltunnelservice name移除该隧道服务。
wireguard /installmanagerservice安装用于托盘界面的 WireGuardManager。
wireguard /dumplog打印共享环形日志。加上 /tail 可跟随输出。
wireguard /update运行更新程序。界面也可以做这件事。
wireguard /removedriver在不再剩下隧道适配器时移除适配器驱动。

PreUp、PostUp、PreDown 和 PostDown 仅在允许它们的管理员注册表项已设置时运行。.conf.dpapi 文件需要 Local System 或管理员才能执行 wg show。

同一条隧道还能在哪里运行

项目给出的安装路径
系统安装内容说明
Windows 10、11、Server 2016 至 2025MSI,或会去获取 MSI 的安装程序客户端 1.1.1。amd64 与 x86 为 3.3 MB。arm64 为 2.9 MB。MIT。
Linux自 5.6 起的内核模块,外加 wireguard-tools自 2020年3月29日起进入内核树。发行版打包这些工具。遵循内核构建的 GPL 条款。
macOSApp Store 客户端,或来自 Homebrew、MacPorts 的 wireguard-tools工具这条路径是命令行隧道,不是 Windows MSI。
Android 与 iOS商店应用。Android 另有直接的 APK。手机可以导入二维码。Windows 客户端改为导入文件。
FreeBSD, OpenBSD软件包 wireguard 或 wireguard-tools列在项目安装页上,与其他系统一起。

本站的文件是 Windows MSI。其他系统使用各自的软件包。Windows 的版本、大小和系统要求

漫游、保活、容器

双方都把数据发往产生已验证数据包的最新 Endpoint。笔记本可以更换网络,而不需要新配置。服务器从第一个有效数据包得知客户端的 Endpoint,因此服务器配置里常常没有该对端的 Endpoint 行。

PersistentKeepalive 默认为 0。仅当对端位于 NAT 或有状态防火墙之后,并且必须在流量安静后接受新会话时,才设为 25。具体改法

在 Linux 上,接口使用创建它时所在的网络命名空间。你可以把它移入容器命名空间,使该容器外出的唯一路径就是这条隧道。

[Interface]
PrivateKey = (stays on the machine that owns it)
Address = 10.10.10.2/32

[Peer]
PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA=
AllowedIPs = 10.10.10.230/32
Endpoint = 192.95.5.69:51820
PersistentKeepalive = 25

公开示例中的地址和公开示例公钥。不要复用该密钥。不需要时请不要写 PersistentKeepalive。

下载 1.1.1 WireGuard illustration