WireGuard 出站如何工作
WireGuard 在当前内核中是三层隧道型出站。客户端会在内部创建 WireGuard 网络设备,把命中该节点的 TCP 或 UDP 流量送入隧道,而不是接管操作系统的全部默认路由。
配置必须同时描述本地接口和远端 Peer。本地地址与私钥属于客户端接口,服务器端点、公钥和 Allowed IPs 属于 Peer,两组字段不能互换。
单 Peer 最小配置
只有一个 Peer 时可以使用简化写法,把端点和 Peer 密钥直接写在节点顶层。ip 与 ipv6 至少填写一个,否则客户端无法创建本地隧道地址。
name必填- 节点名称,用于策略组与规则引用。
type必填- 固定填写
wireguard。 private-key必填- Base64 编码的客户端私钥,必须保密。
ip条件必填- 客户端在 WireGuard 网络中的 IPv4 地址;与
ipv6至少存在一个。 ipv6条件必填- 客户端在 WireGuard 网络中的 IPv6 地址;没有 IPv6 时可以省略。
server必填- 远端 Peer 的域名或 IP 地址。
port必填- 远端 Peer 的 WireGuard 端口。
public-key必填- Base64 编码的远端 Peer 公钥。
- 单 Peer 路由当前实现
- 简化写法会按本地地址族自动建立
0.0.0.0/0和::/0路由,顶层allowed-ips不会被读取。
多 Peer 完整写法
需要多个 Peer 时使用 peers 数组。private-key 和本地 ip 或 ipv6 仍放在节点顶层,服务器端点和 Peer 密钥移入每个数组项。
每个 Peer 都必须提供非空的 allowed-ips,并应按网段区分。使用 peers 后,顶层的 server、port、public-key 和 pre-shared-key 会被忽略;顶层 reserved 则作为没有单独填写 reserved 的 Peer 的回退值。
| 层级 | 字段 | 要求 |
|---|---|---|
| 节点顶层 | private-key、ip、ipv6 | 描述本地 WireGuard 接口 |
| 节点顶层 | peers | 包含一个或多个远端 Peer |
| 节点顶层 | reserved | 作为各 Peer 未单独填写 reserved 时的回退值 |
| 每个 Peer | server、port、public-key | 描述远端端点与身份 |
| 每个 Peer | allowed-ips | 必须非空,多个 Peer 需要按网段区分 |
| 每个 Peer | pre-shared-key、reserved | 仅在服务端明确要求时填写 |
密钥、路由与连通性字段
密钥和值的格式会在节点初始化时校验。网络可连接但隧道内无流量时,应优先检查 Allowed IPs、MTU 和保活,而不是先改 Clash 规则。
pre-shared-key按需- Base64 编码的额外预共享密钥,必须与对应 Peer 一致。
reserved按需- 正好 3 字节的 WireGuard 保留值,部分 WARP 节点需要。
persistent-keepalive按需- 按秒定期发送保活包,常用于 NAT 后方的客户端。
mtu按需- 内部 WireGuard 设备 MTU,未填写时当前实现使用 1408。
udp按需- 允许命中该节点的 UDP 应用流量进入 WireGuard 出站。
dialer-proxy按需- 通过另一个出站或策略组连接 WireGuard 端点。
远程 DNS 与 AmneziaWG
WireGuard 出站可以为进入隧道的域名请求使用专属解析器。AmneziaWG 选项只在服务端使用相同扩展时填写,各字段还受 AmneziaWG 版本约束。
remote-dns-resolve按需- 设为
true时,允许使用当前 WireGuard 出站进行远程解析。默认false。 dns条件生效- 远程解析使用的 DNS 服务器,仅在
remote-dns-resolve: true时生效。 amnezia-wg-option高级- 存在该对象时启用 AmneziaWG,参数必须来自对应服务端配置。
从标准配置映射到客户端字段
标准 WireGuard [Interface] 的 Address 与 PrivateKey 映射到顶层地址和私钥;[Peer] 的 Endpoint、PublicKey 与 AllowedIPs 映射到 Peer 字段。标准配置中的 ListenPort 是本地监听端口,不应误写成远端 port。
下面两个密钥只是格式有效的示例值,不能用于真实认证。单 Peer 简写不读取顶层 allowed-ips;需要自定义路由范围时改用 peers 数组,并在每个 Peer 内填写 allowed-ips。
- 出现 missing local address 时,补充正确的
ip或ipv6。 - 出现密钥解码错误时,确认复制的是 Base64 密钥,不是配置文件路径或十六进制文本。
- 多 Peer 报告 missing allowed_ips 时,为每个 Peer 提供非空且明确的网段列表。
- 握手存在但无数据时,核对对端公钥、Allowed IPs、NAT、防火墙与 MTU。
proxies:
- name: wg-node
type: wireguard
private-key: ZXhhbXBsZS1jbGllbnQtcHJpdmF0ZS1rZXktMDAwMDA=
ip: 10.0.0.2
server: 203.0.113.10
port: 51820
public-key: ZXhhbXBsZS1wZWVyLXB1YmxpYy1rZXktMDAwMDAwMDA=
udp: true
mtu: 1408
persistent-keepalive: 25