目录:上下文;Peer wg0.conf 摘录;Server wg0.conf 摘录;tshark 数据包嗅探器输出。
上下文:Peer 是一个无头 LAN 主机,我通过 SSH 从同一 LAN 上的 Mac 配置/控制它;服务器位于云中的 VPS 上,因此也通过 SSH 配置/控制。Peer 的目的是将来自另一台 LAN 主机(目前只有一台)的输入转发到隧道中并从隧道返回结果。服务器旨在获取隧道输出,对其进行 NAT,将其发送到其 WAN 目的地,并通过隧道返回答复。
对等 wg0.conf 内容,为简洁起见编辑如下:
[Interface]
PrivateKey = ...
Address = 10.4.0.2/24
Table = 248 # wg-quick to use PBR for its default route based on:
PostUp = ip rule add not to 192.168.1.0/24 table 248 # not to local subnet
PostUp = ufw route allow in on enp1s0 out on %i
PostUp = ufw route allow in on %i out on enp1s0
PreDown = (*PreDowns omitted for brevity*)
[Peer]
PublicKey = ...
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0
Endpoint = [IP of VPS]:51820
注意:表 48 规则是为了将 SSH 流量排除在隧道之外。
服务器 wg0.conf 内容,为简洁起见编辑:
[Interface]
PrivateKey = ...
Address = 10.4.0.1/24
ListenPort = 51820
PostUp = ufw route allow in on wg0 out on enp1s0
Table = 248 # wg-quick to use PBR for its default route, i.e.:
# default dev wg0 table 248 scope link
PostUp = ip rule add to 10.4.0.0/24 table 248
PostUp = iptables -t nat -I POSTROUTING -o enp1s0 -j MASQUERADE
(PreDowns omitted for brevity)
[Peer]
PublicKey = ...
AllowedIPs = 0.0.0.0/0
至于对等端,这里的 PBR 是将 SSH 流量挡在隧道之外。我不确定这是不是可行的方法。
对等端启动后,服务器响应sudo wg
显示transfer: 148 B received, 92 B sent
,并且保持不变。对等端显示transfer: 92 B received, 11.43 KiB sent
,并且“已发送”数量随时间增加。tshark 显示对等端接口 wg0 的以下信息:
1 0.000000000 10.4.0.2 → [IP of VPS] WireGuard 176 Handshake Initiation, sender=0xBC9317D6
2 5.376117117 10.4.0.2 → [IP of VPS] WireGuard 176 Handshake Initiation, sender=0x6B160407
每 5.4 秒添加一行,从时间戳到发送者 ID 都是相同的。在服务器上,tshark 根本没有显示 wg0 的流量。
我对 WireGuard 和 tshark 都不熟悉。我花了不少功夫才让两边都启动起来,而 SSH 在wg-quick up
输出过程中不会挂在一方或另一方。我省略了您需要的上下文,或者犯了令人头疼的错误,我一点也不惊讶。感谢您帮助服务器听到并与对方握手。
答案1
如果你坚持要自己修改 IP 路由和规则(谁知道什么原因),你可以尝试这样的操作:
FwMark=51820
PreUp=ip rule add not fwmark 51820 table 51820
PreUp=ip rule add table main suppress_prefixlength 0
PostUp=ip route add default dev %i table 51820
# PreDown=ip route delete default dev %i table 51820 # unnecessary
PostDown=ip rule delete table main suppress_prefixlength 0
PostDown=ip rule delete not fwmark 51820 table 51820
51820
您可以用任何您喜欢的数字(例如)替换所有248
,只要它不与任何内置特殊或系统中相应上下文中使用的任何现有数字冲突。
这基本上模仿了 wg-quick 开箱即用的功能,无需AllowedIPs=0.0.0.0/0
设置Table=
。它不能保证能正常工作,因为它还添加了某些防火墙规则(在我看来有些晦涩难懂),也许可以解决某些潜在问题。如果您想手动添加它们(同样,谁知道是什么原因),wg-quick
请参阅内容。wg-quick
附加组件——一张丑陋的图画,稍微解释了一下 WireGuard 的流量流: