网络图:Laptop (10.8.0.2) -> (wireguard) -> server A (10.8.0.1, 10.10.0.10) -> server B (10.10.0.20)
我已通过 Wireguard 将笔记本电脑 (10.8.0.2) 连接到服务器 A (10.8.0.1)。我可以 ping/curl 到服务器 A (10.10.0.10),但无法 ping/curl 到另一台服务器 B (10.10.0.20)。
当ping 10.10.0.20
我从笔记本电脑访问服务器 B 时,我在服务器 A 上发现以下内容:
tcpdump -nn -i wg0
显示请求,但没有响应:tcpdump -nn -i enp7s0
显示请求和响应
所以问题似乎是响应没有从 enp7s0 转发到 wg0。
但为什么不呢?
这是我的 iptables 配置:
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o enp7s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o enp7s0 -j MASQUERADE
笔记本电脑 wireguard:
[Interface]
PrivateKey = ...
Address = 10.8.0.2/24
[Peer]
PublicKey = ...
AllowedIPs = 10.8.0.0/24,10.10.0.0/24
Endpoint = ...
服务器A wireguard:
[Interface]
PrivateKey =
Address = 10.8.0.1/24
ListenPort = 51820
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o cilium_host -j MASQUERADE
PostUp = iptables -t nat -A POSTROUTING -o enp7s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o cilium_host -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o enp7s0 -j MASQUERADE
[Peer]
PublicKey =
AllowedIPs = 10.8.0.2/32
服务器 B 和服务器 A 通过虚拟专用网络连接。
更新:wireguard 服务重新加载
重新启动服务似乎也有帮助。
systemctl reload [email protected]
systemctl restart [email protected]
您也可以尝试添加这些规则,但我删除了它们,但仍然有效:
PostUp = iptables -A FORWARD -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -o wg0 -j ACCEPT
更新:其他相关问题(仅供参考):
当我分析我的路由表时(ip route
):
default via 172.31.1.1 dev eth0
10.0.0.0/24 via 10.0.1.50 dev cilium_host proto kernel src 10.0.1.50 mtu 1400
10.0.0.0/8 via 10.0.0.1 dev enp7s0
10.0.0.1 dev enp7s0 scope link
10.0.1.0/24 via 10.0.1.50 dev cilium_host proto kernel src 10.0.1.50
10.0.1.50 dev cilium_host proto kernel scope link
10.0.2.0/24 via 10.0.1.50 dev cilium_host proto kernel src 10.0.1.50 mtu 1400
10.0.3.0/24 via 10.0.1.50 dev cilium_host proto kernel src 10.0.1.50 mtu 1400
10.8.0.0/24 dev wg0 proto kernel scope link src 10.8.0.1
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.31.1.1 dev eth0 scope link
我意识到这10.0.0.0/8 via 10.0.0.1 dev enp7s0
与其他路由有冲突,因为 10.10.0.0/24 子网属于更大的 10.0.0.0/8 范围。因此我移动了我的 Kubernetes/Cilium 网络(以避免 10.0.0.0/8 可能与咖啡店等的常见网络冲突),并缩小了 VPC 网络。
答案1
再想想,之所以没能成功,大概是AllowedIPs = 0.0.0.0/0
因为服务器 A 到服务器 B 经过 VPN 封装的流量被路由到了 wireguard 隧道中。
因此,解决方案就是用 来替换它AllowedIPs = 10.8.0.2/32
。