NAT反射(NATループバック)はどのように機能しますか?

NAT反射(NATループバック)はどのように機能しますか?

NAT反射(NATループバック)の例として、OpenWRTによって自動的に生成されたルールを使用しています。

したがって、2つのホスト(+ルーター)(192.168.1.100と192.168.1.200)を持つネットワーク192.168.1.0/24があるとします。ルータには、LAN(br-lan)とWAN(eth0)の2つのインターフェイスがあります。 LANインターフェイスのIPは192.168.1.1で、WANインターフェイスのIPは82.120.11.22(パブリック)です。 192.168.1.200にwwwサーバーがあります。パブリックIPアドレスを使用して192.168.1.100でWebサーバーに接続しようとしています。

インターネットユーザーがWebサーバーにアクセスできるようにWAN-> LANをリダイレクトするには、iptablesに次のルールを追加できます。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.200:80

私はルールが何を意味するのかを知っています。しかし、NAT反射を担当する2つの異なる規則があります。そのうちの1つは上記のように私には明確ではありません。したがって、最初のルールは次のようになります。

iptables -t nat -A PREROUTING -i br-lan -s 192.168.1.0/24 -d 82.120.11.22/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.200

これは、192.168.1.0/24ネットワークからパブリックIP、ポート80までのすべてのトラフィックがローカルWebサーバーに送信される必要があることを意味します。つまり、FirefoxにパブリックIPを入力すると、サーバーから返されたページを受け取る必要があります。右?テーブル内の他のすべての転送魔法filterが完了しましたが、まだパブリックIPを使用してWebサーバーに接続することはできません。パケットはルールと一致しますが、何も起こりません。

nat完全なメカニズムが機能するには別の規則が必要です。

iptables -t nat -A POSTROUTING -o br-lan -s 192.168.1.0/24 -d 192.168.1.200/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.1

このルールがなぜ必要なのかわかりません。このルールが何であるかを説明できる人はいますか?

ベストアンサー1

NATが正しく機能するためには、クライアントからサーバーへ、サーバーからクライアントへのパケットはNATを通過する必要があります。

iptables の NAT テーブルは、接続の最初のパケットにのみ使用されます。接続に関連する後続のパケットは、最初のパケットが変換されたときに生成された内部マッピングテーブルを使用して処理されます。

iptables -t nat -A PREROUTING -i br-lan -s 192.168.1.0/24 -d 82.120.11.22/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.200

このルールが適用されるたびに、以下が発生します。

  • クライアントは初期パケット(tcp syn)を生成し、それをパブリックIPとして指定します。クライアントは、送信元IP /ポートと宛先IP /ポートが交換されるこのパケットに対する応答を期待します。
  • クライアントのルーティングテーブルには特定のエントリがないため、デフォルトゲートウェイに送信されます。デフォルトゲートウェイはNATボックスです。
  • NAT ボックスは初期パケットを受信し、宛先 IP を変更し、マッピングテーブルエントリを設定し、ルーティングテーブルで新しい宛先を探し、パケットをサーバに送信します。ソースアドレスは変更されません。
  • サーバーは初期パケットを受信し、応答(syn-ack)を行います。これに応答して、送信元IP /ポートは宛先IP /ポートと交換されます。着信パケットの送信元 IP は変更されていないため、応答の宛先 IP はクライアントの IP です。
  • サーバはルーティングテーブルから IP を検索し、パケットをクライアントに送り返します。
  • クライアントは、送信元アドレスが予想されるアドレスと一致しないため、パケットを拒否します。
iptables -t nat -A POSTROUTING -o br-lan -s 192.168.1.0/24 -d 192.168.1.200/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.1

このルールを追加すると、イベントの順序が変更されます。

  • クライアントは初期パケット(tcp syn)を生成し、それをパブリックIPとして指定します。クライアントは、送信元IP /ポートと宛先IP /ポートが交換されるこのパケットに対する応答を期待します。
  • クライアントのルーティングテーブルには特定のエントリがないため、デフォルトゲートウェイに送信されます。デフォルトゲートウェイはNATボックスです。
  • NATボックスは初期パケットを受信し、NATテーブルのエントリに基づいてターゲットIP、ソースIP、および可能であればソースポートを変更し(あいまいさを明確にする必要がある場合にのみソースポートを変更)、マッピングテーブルエントリを構築し、ルーティングテーブルに新しい宛先を追加し、パケットをサーバーに送信します。
  • サーバーは初期パケットを受信し、応答(syn-ack)を行います。これに応答して、送信元IP /ポートは宛先IP /ポートと交換されます。着信パケットの送信元 IP は NAT ボックスによって変更されたため、パケットの宛先 IP は NAT ボックスの IP です。
  • サーバはルーティングテーブルからIPを検索し、パケットをNATボックスに送り返します。
  • NATボックスは、NATマッピングテーブルでパケットの詳細(ソースIP、送信元ポート、宛先IP、宛先ポート)を検索し、逆変換を実行します。これにより、送信元IPがパブリックIP、送信元ポートが80、宛先IPがクライアントIP、宛先ポートがクライアントが使用した送信元ポートに戻ります。
  • NAT ボックスは、ルーティング テーブルで新しい宛先 IP を検索し、パケットをクライアントに送り返します。
  • クライアントはパケットを受け入れます。
  • NAT はパケットを前後に変換し、通信は継続します。

おすすめ記事