好奇心から透明なTORプロキシに関するいくつかのチュートリアルを読んでいます。これは、ネットワークの観点から見ると非常に興味深いトピックだからです。tun
/インターフェイスのみを使用する VPN ゲートウェイとは異なり、tap
TOR プロキシは単一ポートを使用します。すべてのチュートリアルでは、次の魔法の行を繰り返します。
iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040
その中には、TORポートであるeth0
入力(LAN)インターフェースがあります。9040
問題は、なぜそのようなことがネットワークの観点から意味があるのかわからないということです。
redirect
/チェーンの私の理解dst-nat
とそれが物理ルーターでどのように機能するかによると、チェーンは次のようにdst-nat
なります。dst-port
dst-addr
今後ルーティング決定を下し、別のものに変更します。たとえば、
- フォワード
dst-nat
:192.168.1.2:46364 -> 88.88.88.88:80
- 後ろに
dst-nat
:192.168.1.2:46364 -> 99.99.99.99:8080
これは99.99.99.99:8080
、IPパケットフローチャネルの追加チェーン(filter
テーブルなど)で見られる内容であり、これからパケットがデバイスを離れる時の様子です。
現在、インターネット(このstackexchangeを含む)の多くは、これが基本的redirect
にインターフェイスにローカルアドレスを設定するのと同じであると主張しています。これを考慮すると、ルールは次のようになります。dst-nat
dst-addr
iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040
明らかに言葉ではありません。これがうまくいくなら、TORはみんなパケットの宛先はです127.0.0.1:9040
。アプリケーションがパケットを取得し、何らかの方法でそれに応答する一般的なアプリケーション(Webサーバーなど)の場合、これは完全に理解されています。なぜなら、これらのサーバープロセスはとにかくパケットの最終的な宛先なので、宛先はアドレスはlocalhostですが、それは問題ありません。ただし、TORルーターは良いルーターであるため、パケットの元の宛先を知る必要があります。私は何を逃したことがありませんか?DNAT
ローカルアプリケーションが受信する内容に影響しませんか?それともREDIRECT
命令の特定の動作ですか?
答え1
この回答を確認してください。透明なSOCKSプロキシはどのIPアドレスを使用するのかをどのように知ることができますか?
引用:
iptablesは元の宛先アドレスを上書きしますが、古いアドレスは覚えています。その後、アプリケーションコードは特別なソケットオプションを要求してそれを取得できますSO_ORIGINAL_DST
。
答え2
実際、TORに関するご意見は正しいです。受信したすべてのTCPパケットはlocalhost:9040にリダイレクトされます。
ターゲットREDIRECTは、ローカルインターフェイスのIPアドレスを変更し、それをユーザーが指定するポートにマッピングする特別なタイプのDNATターゲットです。
eth0
LANインターフェイスが(ネットワーク192.168.1.0/24
とIPアドレス:)192.168.1.1
で、ルータのiptablesルールに次のルータがあるとします。
iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040
その後、LAN内のクライアントのすべてのTCPパケットが192.168.1.1:9040
。
192.168.1.2
LANのクライアント(IPアドレスを含む)がgoogle.comへのTCP接続を持っているとします(IP:仮定)8.8.1.1
。
元の要求: 192.168.1.2:12345 -> 8.8.1.1:80
ルータの事前ルーティングチェーン 次:192.168.1.2:12345->192.168.1.1:9040