
そうですね、私が鈍感なせいか、あるいは適切な情報源を見つけられなかっただけかもしれませんが、これらの IPTABLES 設定の 1 つが他の設定よりも優れている理由が理解できません。
私の設定は次のとおりです:
透過プロキシやルーターなどの機能を持つボックスがあります。このボックスには ETH0 と ETH1 という 2 つのインターフェイスがあり、アドレス スキームは次のようになっています。
ETH0 = DHCP ETH1 = 192.168.5.1/24 は、LAN 内の背後にあるクライアントに 192.168.5.0/24 ネットワークの DHCP を提供します。
私は privoxy をインストールし、透過プロキシとしてポート 8080 をリッスンしています。このセットアップで実現しているのは、最小限の構成でこのボックスを既存のネットワークにドロップし、プロキシにクライアントを接続できるようにすることです。
これが私のオリジナルのIPTABLESファイルです
*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT
この構成は正常に動作し、トラフィックは問題なく行き来しています。発信元クライアントの IP アドレスは privoxy ログファイルで取得でき、問題はありません。
他の人の設定を見て、REDIRECT ではなく DNAT を使用しているのがわかり、どちらが他よりも優れているのか理解しようとしたときに、混乱が生じます。サンプルの設定は次のとおりです。
*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to 192.168.5.1:8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT
繰り返しになりますが、この構成も機能し、ログ記録の観点から必要なものがすべて提供されます...
どちらが正しいのでしょうか、あるいは、どちらが他よりも正しいのでしょうか?
ここまで読んでくださりありがとうございます。
答え1
REDIRECT
マシン自体に送信する宛先 IP アドレスを変更します。言い換えると、ローカルで生成されたパケットは 127.0.0.1 アドレスにマップされます。これはローカル パケットをリダイレクトするためのものです。ローカル マシン上のサービス間のトラフィックのみをリダイレクトする場合は、これが適切な選択です。
DNAT
実際のネットワークアドレス変換REDIRECT
ローカル システム外部に送信されるパケットの宛先を変更する場合は、が機能しないため、 の方が適切な選択肢です。
答え2
REDIRECT
Warner@ の回答にあるように、送信先 IP アドレスを変更してマシン自体に送信します。ただし、この回答は完全に正しいわけではなく、少し誤解を招くものであると思います。
REDIRECT
ローカル パケットをリダイレクトするためだけのものではありません。実際には、DNAT
使用する宛先 IP アドレスが暗黙的に指定され、ローカル パケットの場合は 127.0.0.1、それ以外の場合はマシン インターフェイスの IP アドレス (OP の場合は 192.168.5.1) になります。
したがって、この質問では、最終的な宛先がどこであっても、パケットは最初にプロキシに到達するはずなので、REDIRECT
最適です。
REDIRECT
IP アドレスを指定する必要がなく、正しいアドレスが取得されるため、次のような利点がありますDNAT
。
何らかの理由でマシンの IP アドレスが変更された場合、ルールを変更する必要はありません。特に、
DNAT
DHCP 制御のインターフェースでは機能しません。特定の IP アドレスによってわずかに異なるバージョンを保持することなく、複数のシステム (複数のプロキシ インスタンスなど) に対して同じルールを記述して維持できます。
答え3
トラフィックをローカル マシンに送信する場合、DNAT と REDIRECT はまったく同じです。
ドキュメントには次のように記載されています: 「[リダイレクト] は、リダイレクトと呼ばれる宛先 NAT の特殊なケースです。これは、着信インターフェイスのアドレスに DNAT を実行するのとまったく同じ、シンプルで便利な機能です。」
https://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html#ss6.2