インターネットからアドレス 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
これらの変更は再起動後には維持されないため、必要であれば永続的に変更する必要があることに注意してください。