web-dev-qa-db-ja.com

Racoon IPSecVPNを介したSNAT

Ubuntuボックス(「ホスト」と呼びます)に接続されているデバイス(「ターゲット」と呼びます)からリモートオフィスのサーバーにトラフィックをルーティングしようとしています。

ホストは、NIC efixと呼ばれる)を介して接続されたRacoon IPSec VPNを使用します。これにより、IPアドレスefix:0を持つ192.168.190.132と呼ばれるエイリアスIFが作成されます。サーバーに到達できます。

ホストとターゲット間のリンクはイーサネットリンクであり、ホストの場合はIF eusbのIPアドレス10.0.0.1を使用し、ターゲットの場合はIF 10.0.0.2eth0を使用します。

次のルートとiptablesエントリを設定しました。

  • 目標通り:

    10.0.0.0 *        255.255.255.0 U  0 0 0 eth0
    default  10.0.0.1 0.0.0.0       UG 0 0 0 eth0
    
  • ホスト上:

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to 192.168.190.132
    iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT
    iptables -A FORWARD -d 10.0.0.0/24 -j ACCEPT
    

Wiresharkを使用してHTTPGETを監視すると、ターゲットからのSYNパケットがサーバーに到達するのを確認できますが、サーバーのSYNACKパケットはホストで停止し、ターゲットに転送されません。 。ここで何かが足りませんか? SNATは接続を追跡することになっているのではありませんか?

2
Mithfindel

問題は、フォワードルールがSNATに依存してリターンパケットに対してすでに発生している可能性があります。 「iptables-AFORWARD -d 10.0.0.0/24」と言うと、NATを介してすでに変更されているトラフィックに依存します。これはafter転送です。最初のパケットが着信すると、宛先としてNATされたIPアドレス(192.168.190.32)があります。

おそらくあなたが望むのはこのようなルールです:

iptables -A forward -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A -i efix -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.190.132

最初のルールは、「ホスト」からのSNATされた接続からのリターントラフィックなど、既存の接続に関連するトラフィックを許可します。 2つ目は、「ホスト」からのトラフィックを受け入れます(レイアウトを理解している場合、「ホスト」はトラフィックを「etho0」インターフェイス上のNATファイアウォールに渡しますよね?)。さらに、正確なニーズに応じて、「-d192.168.190.0/24」でそのルールを制限することもできます。

最後のルールは、トラフィックをSNATするように指示する、既に投稿したものです。

1