網路圖: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
筆記型電腦護線罩:
[Interface]
PrivateKey = ...
Address = 10.8.0.2/24
[Peer]
PublicKey = ...
AllowedIPs = 10.8.0.0/24,10.10.0.0/24
Endpoint = ...
伺服器A線衛:
[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
.