Iptablesはすべての内部トラフィックを転送する

Iptablesはすべての内部トラフィックを転送する

ローカル LAN に接続された内部インターフェースを持つ VM があります。 VM には別のサイトへの OpenVPN 接続が機能しています。 iptables を使用して、ローカル インターフェース上のすべての着信トラフィックを VPN トンネル経由で転送するにはどうすればよいですか? Ubuntu ディストリビューションを実行しています。

答え1

既存の接続でサイト間 VPN を実行するには、VPN 経由のルーティング パスが必要です。サイト #1 にいるとします (OpenVPN サーバーとして動作しているかどうかに関係なく、すべてが対称です)。

  1. まず、VPN接続を持つVM(「VPN#1」と呼ぶ)がリモートサブネットに到達できることを確認する必要があります。これは、OpenVPN構成を使用してルートを追加することで行われます。
    • 「VPN#1」がOpenVPNクライアントの場合、キーワードを使用してサーバーに追加するpushか、ローカルで追加することができます。route
    • 「VPN#1」がOpenVPNサーバーの場合、を使用して追加するrouteか、次のような外部ツールを使用して追加できます。ip
  2. 次に、「VPN#1」とリモートエンドポイントの両方でIP転送が有効になっていることを確認する必要があります(を使用して追加しnet.ipv4.ip_forward=1/etc/sysctl.conf再ロードしますsysctl -p)。
  3. VPN#1 がデフォルト ゲートウェイである場合は、これで完了です。そうでない場合は、デフォルト ゲートウェイにリモート LAN の静的ルートを追加するか、LAN の各ホストに静的ルートを追加する必要があります。
  4. VPN#1 のファイアウォールを確認します。LAN と VPN インターフェイス間のトラフィックを許可するように設定されている必要があります (表FORWARDのチェーンを参照)filteriptables

これをリモート側で繰り返すと、すべてが機能するはずです。pingおよび を使用しtracerouteて問題をデバッグします。

答え2

OK、これで動作するようになりました。ローカル LAN から反対側のサーバーに RDP できます。反対側の Windows サーバーの管理共有に smb を使用することはできません。使用した IP テーブル ルールは次のとおりです。

/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE /sbin/iptables -A FORWARD -i tun0 -o ens160 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A FORWARD -i ens160 -o tun0 -j ACCEPT

関連情報