IPtablesをVPNエッジとして機能するルータとして設定する

IPtablesをVPNエッジとして機能するルータとして設定する

パケットがVPNに出入りできるように、LinuxシステムでIPtablesを設定したいと思います。

これは3つのノードを持つ小規模ネットワークです。

  1. v1:VPN内部のLinuxマシン。 VPN サブネットは 10.10.100.0/22 です。
  2. out1: VPN 外部の Linux システムです。 VPN および VPN IP 内に存在するノードの数に関する情報が含まれますが、VPN 自体にはありません。
  3. 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

答え2

次の例では、VPN デバイス名はtun0(OpenVPN)、VPN ゲートウェイは 172.21.23.172 です。

  1. LinuxルーターへのVPNのインストール(私はipvanish w. openvpnを使用しています)

  2. iptablesを使用したトラフィックのルーティング

    sudo iptables -t nat -A POSTROUTING -o [VPN dev] -j MASQUERADE
    

    例:

    sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
    
  3. ルーティングテーブルの設定(すべてのトラフィックがVPN経由でルーティングされるように)

    sudo ip route add default via [VPN ipv4 address] dev [VPN dev]
    

    例:

    sudo ip route add default via 172.21.23.172 dev tun0
    
  4. 次のコマンドを実行して、ネットワーク上のデバイスが実際にVPN経由でルーティングされていることを確認します。

    Windows:tracert 1.1.1.1Linux:traceroute 1.1.1.1

もう終わりました!

関連情報