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 はパケットを前後に変換し、通信は継続します。