2 つのゲートウェイを介して VPN トラフィックをルーティングするにはどうすればよいですか?

2 つのゲートウェイを介して VPN トラフィックをルーティングするにはどうすればよいですか?

インターネットからアドレス 192.168.1.45 の OpenVPN サーバーへの VPN トンネルを確立できるようにしたいと考えています。ホーム ネットワークの設定は、Raspberry pi をゲートウェイとして使用して、ホーム ネット上のすべてのトラフィックを別の VPN (図では VPN 1 と呼ばれ、太線で示されています) にルーティングしているため、少し複雑です。

ネットワーク設定のスキーマへのリンク(どうやらまだ画像を埋め込むことはできないようです)

この構成では VPN 2 経由で接続を確立できないことを除いて、セットアップは正常に動作します。

構成の詳細: すべてのゲートウェイには固定 IP があります。LAN ゲートウェイは VPN1 ゲートウェイによって使用され、ポート 8787 の着信トラフィックをポート 1194 に転送します (ルールは ISP GW GUI を使用して設定します)。VPN 1 ゲートウェイの iptables ルールは次のとおりです。

Chain PREROUTING (policy ACCEPT 15038 packets, 1421K bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 10 packets, 1246 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 344 packets, 25041 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 183 packets, 13486 bytes)
num   pkts bytes target     prot opt in     out     source               destination
3     9959 1007K MASQUERADE  all  --  any    tun0    anywhere             anywhere
Chain INPUT (policy DROP 3111 packets, 248K bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
2        8   688 ACCEPT     icmp --  eth0   any     anywhere             anywhere
3     3507  233K ACCEPT     tcp  --  eth0   any     192.168.1.0/24       anywhere             tcp dpt:ssh
4        0     0 ACCEPT     tcp  --  eth0   any     10.8.0.0/24          anywhere             tcp dpt:ssh
5     193K  202M ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
6        0     0 ACCEPT     udp  --  eth0   any     anywhere             anywhere             udp dpt:openvpn

Chain FORWARD (policy DROP 16 packets, 1408 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     tcp  --  eth0   eth0    anywhere             anywhere             tcp spt:ssh
2        0     0 ACCEPT     tcp  --  eth0   eth0    anywhere             anywhere             tcp dpt:ssh
5    97203   12M ACCEPT     all  --  eth0   tun0    anywhere             anywhere
6     190K  190M ACCEPT     all  --  tun0   eth0    anywhere             anywhere             state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT 104K packets, 18M bytes)
num   pkts bytes target     prot opt in     out     source               destination

次のようなルールを追加してみました:

sudo iptables -t nat -A PREROUTING -p tcp --dport 1194 -j DNAT --to-destination 192.168.1.45:1194
sudo iptables -t nat -I POSTROUTING -p tcp -d 192.168.1.45 --dport 1194 -j SNAT --to-source 192.168.1.43

sudo iptables -t nat -A PREROUTING -p tcp --sport 1194 -j DNAT --to-destination 192.168.1.1:1194
sudo iptables -t nat -I POSTROUTING -p tcp -d 192.168.1.1 --sport 1194 -j SNAT --to-source 192.168.1.45

sudo iptables -I FORWARD -i eth0 -o eth0 -p tcp --dport 1194 -j ACCEPT
sudo iptables -I FORWARD -i eth0 -o eth0 -p tcp --sport 1194 -j ACCEPT

しかし、うまくいきませんでした。今、私は行き詰まっていて、オンラインで解決策を見つけることができませんでした...残念ながら、私はこの分野ではかなりの初心者で、楽しみのためにこれをやっていて、試行錯誤でしか学んでいません。どんな助けでも大歓迎です :)

答え1

成功しました! ようやく、意図したとおりにパケットをルーティングできました。解決策は、iptables だけでは不十分で、VPN パケットのルーティングを変更し、コマンドを使用して新しいルールを追加する必要があったことですip

同じようなことをしたい人のために、私がやった方法を紹介します:

# do port forwarding to the VPN 2 server and allow forward traffic
iptables -t nat -A PREROUTING -p tcp --dport 1194 -j DNAT --to-destination 192.168.1.45:1194
iptables -I FORWARD -i eth0 -o eth0 -p tcp --dport 1194 -j ACCEPT
iptables -I FORWARD -i eth0 -o eth0 -p tcp --sport 1194 -j ACCEPT
# mark all packets that have to be routed through the 192.168.1.1 gateway
iptables -t mangle -A PREROUTING -p tcp --sport 1194 -j MARK --set-mark 1
# define desired specific route for marked packets
echo 201 openvpn1194.out | tee --append /etc/iproute2/rt_tables
ip rule add fwmark 1 table openvpn1194.out
ip route add default via 192.168.1.1 dev eth0 table openvpn1194.out

これらの変更は再起動後には維持されないため、必要であれば永続的に変更する必要があることに注意してください。

関連情報