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 に減らし、両方のサイトをピアとして構成し、関連する許可ネットワークを各ピアに追加しました。