ネットワーク図:Laptop (10.8.0.2) -> (wireguard) -> server A (10.8.0.1, 10.10.0.10) -> server B (10.10.0.20)
ラップトップ (10.8.0.2) を Wireguard 経由でサーバー A (10.8.0.1) に接続しました。サーバー 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.10.0.0/24 サブネットがより大きな 10.0.0.0/8 の範囲に属しているため、他のルートと競合していることに気付きました10.0.0.0/8 via 10.0.0.1 dev enp7s0
。そこで、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
。