パケットがVPNに出入りできるように、LinuxシステムでIPtablesを設定したいと思います。
これは3つのノードを持つ小規模ネットワークです。
- v1:VPN内部のLinuxマシン。 VPN サブネットは 10.10.100.0/22 です。
- out1: VPN 外部の Linux システムです。 VPN および VPN IP 内に存在するノードの数に関する情報が含まれますが、VPN 自体にはありません。
- r:ルーティング要件に従って設定されたiptablesを持つLinuxシステム。これはVPNにあり、out1もVPNにパケットを送信できます。だからそれは端にあります。したがって、rのeth0はout1と同じネットワークにあり、tun0はVPNインターフェイスです。
私はrを10.10.100.0/22に向けたout1を除くすべてのパケットの「次のホップ」にしました。だからパケットはrに入っています。 rの次の2つのiptablesルールを使用すると、out1はnetcatを介してv1と通信できます。
iptables -t nat -A POSTROUTING --out-interface tun0 -j MASQUERADE
iptables -A FORWARD --in-interface eth0 -j ACCEPT
MASQUERADE機能が必要なのはなぜですか?
v1 が out1 の ACK パケットを試みると、r に到着して破棄されます。 tcpdumpを使用して、v1がout1に向かうパケットを送信し、rに到達したが決してout1に到達しないことを確認しました。
ループをどのように閉じますか? out1はすでに宛先IPを知っているため、NATを実行する必要はありません。 r このパケットを eth0 から tun0 に移動し、次に tun0 から eth0 に移動したい。
ベストアンサー1
私はこれをしました
#Forward connections coming in from eth0 to tun0
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
#Masquerade packets leaving tun0
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
#Forward Stateful connections coming in from tun0 to eth0
iptables -A FORWARD -i tun0 -o eth0 -m state --state ESTABLISHED,RELATED \
-j ACCEPT