我有一个可以正常工作的 wireguard 设置,但我做了一些更改,现在我不明白为什么它不工作了。我在云端有一个 VPS 服务器和两个远程客户端,我想在它们之间进行路由。
我的配置是:
客户A:
[Interface]
Address = 192.168.9.5/24
PrivateKey = eN
PostUp= iptables -w -A FORWARD -i %i -j ACCEPT; iptables -w -A FORWARD -o %i -j ACCEPT; iptables -w -t nat -A POSTROUTING -o ens160 -j MASQUERADE; iptables -t nat -A POSTROUTING -o %i -j MASQUERADE
PostDown= iptables -w -D FORWARD -i %i -j ACCEPT; iptables -w -D FORWARD -o %i -j ACCEPT; iptables -w -t nat -D POSTROUTING -o ens160 -j MASQUERADE; iptables -t nat -D POSTROUTING -o %i -j MASQUERADE
[Peer]
PublicKey = Xh
AllowedIPs = 192.168.9.1/32, 192.168.2.0/24
Endpoint = 168.:51820
PersistentKeepalive = 25
$ping 192.168.9.1: OK
$ping 192.168.2.x: NOT OK
-=[VPS - 云服务器]=-
[Interface]
Address = 192.168.9.1/24
ListenPort = 51820
PrivateKey = kGbGSC
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
#Client B
PublicKey = oj
AllowedIPs = 192.168.9.4/32, 192.168.2.0/24
[Peer]
#Client A
PublicKey = uP
AllowedIPs = 192.168.9.5/32, 192.168.1.0/24
$ping 192.168.1.x : OK
$ping 192.168.2.x : OK
$ping 192.168.9.4 and 9.5: OK
客户B:
[Interface]
Address = 192.168.9.4/24
PrivateKey = gO
PostUp= iptables -w -A FORWARD -i %i -j ACCEPT; iptables -w -A FORWARD -o %i -j ACCEPT; iptables -w -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -t nat -A POSTROUTING -o %i -j MASQUERADE
PostDown= iptables -w -D FORWARD -i %i -j ACCEPT; iptables -w -D FORWARD -o %i -j ACCEPT; iptables -w -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -t nat -D POSTROUTING -o %i -j MASQUERADE
[Peer]
PublicKey = Xh
AllowedIPs = 192.168.9.1/32, 192.168.1.0/24
Endpoint = 168.:51820
PersistentKeepalive = 25
$ping 192.168.9.1: OK
$ping 192.168.1.X: NOT OK
从服务器,我可以用原始子网 ping 两个客户端,但不能 ping 客户端到客户端。以前它可以工作,我不知道我做了什么改动导致它停止工作。
当我从客户端 ping 另一个(不工作的)客户端时,在服务器上我看到:
$ sudo tcpdump -nni wg0 icmp -vv
tcpdump: listening on wg0, link-type RAW (Raw IP), capture size 262144 bytes
08:20:49.027878 IP (tos 0x0, ttl 64, id 51706, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.9.5 > 192.168.2.50: ICMP echo request, id 14, seq 1, length 64
08:20:49.027976 IP (tos 0x0, ttl 63, id 51706, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.9.5 > 192.168.2.50: ICMP echo request, id 14, seq 1, length 64
结果是超时。
答案1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
还不够,因为我们不是路由客户端 -> 服务器 -> 互联网,而是客户端 -> 服务器 -> 客户端
我补充道:
iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
并且它现在正在工作。