web-dev-qa-db-ja.com

NATリフレクション(NATループバック)はどのように機能しますか?

NATリフレクション(NATループバック))の例として、OpenWRTから自動生成されたルールを使用します。

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

WAN-> LANをリダイレクトして、インターネットからのユーザーがWebサーバーにアクセスできるようにする場合は、次のルールを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

ルールの意味を知っています。しかし、他にも2つのルールがあり、これらはNATリフレクションを担当します。そのうちの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

これは、パブリックIPを宛先とする192.168.1.0/24ネットワークからポート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

なぜルールが必要なのかわかりません。誰もがルールが正確に何をしているのか説明できますか?

7

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パケットを前後に変換して続行されます。
17
plugwash

リバーストラフィックもopenwrtを流れるように強制しているようです。ウェブサーバーに表示される送信元アドレスを書き換えます。

Webサーバーがクライアントに直接応答した場合、thoseパケットのソースアドレスはWebサーバーのアドレスのままです。しかし、クライアントはopenwrt IPと通信しようとしています。したがって、応答パケットは破棄されます。

最初のケースでは、この強制は必要ありません。インターネットを介したWebサーバーからクライアントへのルートは、openwrtボックスをすでに経由しているためです。

0
sourcejedi