Wireguard サイト間インターフェイスとインターネット間のルーティング

Wireguard サイト間インターフェイスとインターネット間のルーティング

iptablesとWireguard VPNトンネルを使用する2つのサイトのインターネットゲートウェイとして使用されるLinux VPSがあります。 VPSを介したインターネット接続は、両方のサイトに問題はありませんが、サイトBからサイトAにアクセスできず、その逆も同様です。現在の構成は次のとおりです。

VPS:
wg0 - 10.10.0.0/31 (----> Site A wg0 10.10.0.1/31)
wg1 - 10.20.0.0/31 (----> Site B wg0 10.20.0.1/31)
eth0 - Internet (public IP)

Site A Router:
wg0 - 10.10.0.1/31 (----> VPS wg0 10.10.0.0/31)
eth0 - 172.16.10.0/24 (local lan)
eth1 - Internet (carrier grade NAT)

Site B Router:
wg0 - 10.20.0.1/31 (---- > VPS wg1 10.20.0.0/31)
eth0 - 172.16.20.0/24 (local lan)
eth1 - Internet (carrier grade NAT)

VPS wg0.conf:

[Interface]
Address = 10.10.0.0/31
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ListenPort = 60174
PostUp = iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# BEGIN_PEER SITE A
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 10.10.0.0/31, 172.16.10.0/24
# END_PEER SITE A

VPS wg1.conf:

[Interface]
Address = 10.20.0.0/31
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ListenPort = 60175
PostUp = iptables -A FORWARD -i eth0 -o wg1 -j ACCEPT; iptables -A FORWARD -i wg1 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i eth0 -o wg1 -j ACCEPT; iptables -D FORWARD -i wg1 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# BEGIN_PEER SITE B
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PresharedKey = Exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 10.20.0.0/31, 172.16.20.0/24
# END_PEER SITE B

VPS iptables設定:

# Generated by iptables-save v1.8.7 
*filter
:INPUT DROP [215:23625]
:FORWARD DROP [21:1140]
:OUTPUT ACCEPT [20568:6762867]
-A INPUT -p udp -m udp --dport 60174 -j ACCEPT
-A INPUT -p udp -m udp --dport 60175 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o wg1 -j ACCEPT
-A FORWARD -i eth0 -o wg0 -j ACCEPT
-A FORWARD -i wg1 -j ACCEPT
-A FORWARD -i wg0 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on 
# Generated by iptables-save v1.8.7 
*nat
:PREROUTING ACCEPT [2094:151039]
:INPUT ACCEPT [7:501]
:OUTPUT ACCEPT [12:841]
:POSTROUTING ACCEPT [870:73441]
-A POSTROUTING -o eth0 -j MASQUERADE

サイトA wg0.conf:

[Interface]
Address = 10.10.0.1/31
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# BEGIN_PEER VPS
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PresharedKey = Exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 0.0.0.0/0

サイトB wg0.conf:

[Interface]
Address = 10.20.0.1/31
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# BEGIN_PEER VPS
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PresharedKey = Exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 0.0.0.0/0

VPSでIP転送を有効にします。

VPS(10.20.0.0)のサイトAからwg1でpingを実行できますが、サイトB(10.20.0.1)またはサイトBのLAN上の他のトンネルの末尾ではpingを実行できません。その逆:VPSのサイトBからwg0(10.10.0.0)でpingできますが、サイトAトンネル(10.10.0.1)のもう一方の端、またはサイトA LANの他の項目ではpingできません。現在、wgインターフェイスでテストするためにファイアウォールが完全に開いているので、ファイアウォールがブロックされず、ルーティングの問題であることがわかります。 VPS自体では、トンネルの反対側の端と両方のサイトのLANの両方に対してpingを実行できます。問題は、VPS wgインターフェイス間のルーティングにのみあるようです。

VPS で許可されている IP の wg0.conf には 172.16.10.0/24 と 10.10.0.1/31 が含まれているため、wg1.conf で許可するように設定できず、その逆も同様です。

私が見た他のすべてのガイドは、他のネットワークのルーターとしてのピアではなく、単一のホストとしてのWireguardピアについてです。

問題を引き起こすことは許可されたIPのようですが、わかりません。この問題を解決する方法は、VPSのwgインターフェイス間のNAT、何らかの方法でFwMarkタグの使用、他のルーティングテーブルの使用、wgインターフェイスを別のネットワークネームスペースに配置するなどの単純なものと推測されますが、わかりません。降りる最良の方法は何ですか?

答え1

PersistentKeepaliveサイトAとBルーターのWireGuard設定に設定を追加するだけです。

[Interface]
Address = 10.10.0.1/31
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# BEGIN_PEER VPS
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 0.0.0.0/0
Endpoint = vps.example.com:60174
PersistentKeepalive = 25

これにより、WireGuardは25秒ごとにルータからVPSへの接続維持パケットを送信し、ルータとVPS間のCGNATを介して開いた接続を維持し、VPSがトラフィックを送信できるようにします。

答え2

私は仕事を過度に考え、必要以上に仕事をより複雑にしていたことがわかりました。

VPSには2つのwgインターフェイスは必要ありません。これを 1 に減らし、両方のサイトをピアとして構成し、関連する許可ネットワークを各ピアに追加しました。

関連情報