Wireguard/iptables:ICMP 回應未轉送到 wg0

Wireguard/iptables:ICMP 回應未轉送到 wg0

網路圖: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.

相關內容