IPTABLESでのDNATとリダイレクトの違い


14

さて、それは私が密度が高いか、おそらく正しいソースを見つけられないためかもしれませんが、これらのIPTABLESセットアップの1つが他のものより優れている理由を理解できません。

私のセットアップは次のとおりです。

透過プロキシとルーターとして機能するボックスまたはソートがあります。ETH0とETH1の2つのインターフェイスと、次のアドレススキームがあります。

ETH0 = DHCP ETH1 = 192.168.5.1/24は、192.168.5.0 / 24ネットワークのDHCPをLAN内の背後のクライアントに提供します

私は、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

この構成は正常に機能し、トラフィックは問題なく行き来します。privoxyログファイルで発信元クライアントのIPアドレスを取得しましたが、寿命は良好です。

私の混乱は、他の人の構成を見始めて、彼らがリダイレクトの代わりに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

繰り返しますが、この構成も機能し、ロギングの観点から必要なものすべてを提供してくれます...

どちらが正しいのか、それとも他のどれよりも正しいのか?

ここまで読んでくれてありがとう...

回答:


14

REDIRECT宛先IPアドレスを変更して、マシン自体に送信します。つまり、ローカルで生成されたパケットは127.0.0.1アドレスにマッピングされます。ローカルパケットのリダイレクト用です。ローカルマシン上のサービス間のトラフィックのみをリダイレクトする場合は、適切な選択になります。

DNATは実際のネットワークアドレス変換です。ローカルシステムの外部を宛先とするパケットで宛先を変更する場合は、機能しないため、この2つの方が適切REDIRECTです。


よし、たとえば192.168.5.234のプロキシの後ろにクライアントがあり、192.168.5.1のプロキシを介してHTTP要求を「処理」したい場合、192.168へのポート80のアウトバウンドトラフィックをDNATすることを提案しています。プロキシ上の.5.1:8080。私はそれを買うことができますが、なぜ?トラフィックがプロキシのETH0を出て、デフォルトゲートウェイを経由してインターネットに到達するまでのトラフィックの処理方法と関係がありますか?これを
理解

2
DNATは、パケットがファイアウォールを通過するときにアドレスを変更し、目的のホストに到着するようにします。逆に、ファイアウォールから送信されたように見えます。DNATはアウトバウンドトラフィックにはほとんど適用されません。これはMASQUERADEルールによって処理されます。privproxyが別のホストにある場合、そのホストに対する適切な例外を除き、DNATが適切です。
BillThor

ビル、ありがとう。それが私の爬虫類の脳が行っていた場所ですが、検証があることは常に素晴らしいことです。したがって、192.168.5.234からgoogle.com宛てのパケットを送信し、そのデフォルトgwが192.168.5.1(プロキシのeth1)に設定されている場合、そのパケットをプロキシのポート8080に「リダイレクト」して、privoxyを実行する必要があります残り。これは、privoxyが別のホストではなく192.168.5.1に存在するためです。私はすべきではない何かを吸っていますか?
QWade

9

REDIRECT宛先IPアドレスを変更して、Warner @の回答に従ってマシン自体に送信します。しかし、答えは完全に正しいわけではない、または少し誤解を招くかもしれません。

REDIRECTローカルパケットをリダイレクトするためだけではありません。実際DNATには、使用する宛先IPアドレスは暗黙的であり、ローカルパケットの場合は127.0.0.1、そうでない場合はOPの場合は192.168.5.1です。

したがって、この質問では、最終的な宛先に関係なく、パケットは最初にプロキシに到達する必要があるためREDIRECT、完全に適しています。

であるのでREDIRECT、あなたがIPアドレスを指定する必要はありません、それはちょうど1を取る、それは以上のいくつかの利点がありますDNAT

  • 何らかの理由でマシンのIPアドレスが変更された場合、ルールを変更する必要はなく、特にDNATDHCPで制御されたインターフェースでは機能しません。

  • 特定のIPアドレスのためにわずかに異なるバージョンを保持することなく、複数のシステム(たとえば、複数のプロキシインスタンス)に対して同じルールを記述および維持できます。


なんとなくスナ/マスカレードのような。
Jichao

@Hod、リダイレクトはDNATの特殊なケースであると聞きますが、リダイレクトを使用し、TORはパケットの実際の宛先を知っているため、iphdrおよびtcphdr構造体のdaddrおよびdportは無傷であり、カーネル。DNATは実際に構造を変更します。私が間違っている?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.