目录:上下文;同行 wg0.conf 摘录;服务器 wg0.conf 摘录;tshark 数据包嗅探器输出。
上下文:Peer 是一个无头 LAN 主机,我通过 SSH 从同一 LAN 上的 Mac 配置/控制;服务器位于云中的 VPS 上,因此也可以通过 SSH 进行配置/控制。对等体的目的是将来自另一台 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
。我省略了您需要的上下文,或者犯了令人头疼的错误,这根本不会让我感到惊讶。感谢您帮助服务器听到并与对等方握手。
如果你坚持自己弄乱 ip 路由和规则(谁知道是什么原因),你可以尝试这样的事情:
您可以用
51820
您喜欢的任何数字(例如248
)替换所有的,只要它不与系统中相应上下文中使用的任何内置特殊数字或任何现有数字冲突。这基本上模仿了 wg-quick 在
AllowedIPs=0.0.0.0/0
没有Table=
设置的情况下开箱即用的功能。它不能保证有效,因为wg-quick
还添加了某些防火墙规则(恕我直言,有些晦涩难懂),可能会解决某些潜在问题。wg-quick
如果要手动添加它们,请参阅内容(再次,谁知道是什么原因)。附加组件——一张丑陋的图画,解释了 WireGuard 的流量: