web-dev-qa-db-ja.com

すべてのトラフィックを特定のIP /ポートにリダイレクトするpf(Mac OS X)ルール

私はこのiptables設定を( https://github.com/darkk/redsocks から)pfで再作成しようとしています:

iptables -t nat -A REDSOCKS -p tcp -d 10.0.0.0/8 -j REDIRECT --to-ports 12345
iptables -t nat -A OUTPUT -p tcp -j REDSOCKS

10.0.0.0/8へのすべての接続を(どのポートでも)ローカルポート12345にリダイレクトしたいと思います。Linuxでは、これは上記で指定したルールでうまく機能します。今、私はそれをMac OS Xで再作成しようとしています。現在、私が試したことは何もありません。

rdr inet proto tcp from any to 10.0.0.0/8 port 0:65535 -> 127.0.0.1 port 12345

私は設定しましたsysctl net.inet.ip.forwarding = 1

Rdrルールがiptables nat redirectと同等かどうかはわかりません。 Redsocksでは、プロキシ経由で正しく転送するために、接続先のIP /ポートを維持するための接続が必要です。そのため、パッケージの宛先を127.0.0.1:12345に変更/書き換えしないでください。

5
bkolobara

したがって、私は誤解している可能性がありますが、iptablesのTPROXYターゲットとREDIRECTターゲットを混同していると思いますが、それは重要ではないと思います。それを無視して、あなたはまだあなたの目標を実現することができるかもしれません。

Rdr pfルールに対する不満は、着信パケットにのみ適用されるためです。 2005年の FreeBSD-pfメーリングリストの投稿 によると、ルーティング先のルールでその制限を回避できる可能性があります。私はpfを使用したことがありませんが、構文とリンクされた電子メールを理解している場合、rdrルールを使用した次のルールは正しいでしょうか?

rdr inet proto tcp from any to 10.0.0.0/8 -> 127.0.0.1 port 12345
pass out route-to (lo0 127.0.0.1) from any to 10.0.0.0/8

ここにコメントする専門家としての資格はほとんどないと私は理解しています。しかし、私のコメントが解決策を見つけるのに役立つことを願っています。


あなたが書いた質問の最後のコメントについて:

Rdrルールがiptables nat redirectと同等かどうかはわかりません。 Redsocksでは、プロキシ経由で正しく転送するために、接続先のIP /ポートを維持するための接続が必要です。そのため、パッケージの宛先を127.0.0.1:12345に変更/書き換えしないでください。

Iptables-extensions(8)によると、リダイレクトターゲット:

「宛先IPを着信インターフェイスのプライマリアドレスに変更することにより、パケットをマシン自体にリダイレクトします...」

tPROXYは元の宛先アドレスを保持します。

「パケットヘッダーをまったく変更せずに、パケットをローカルソケットにリダイレクトします。」

PfがLinux固有のスタイルのTPROXY操作をサポートしているかどうかはわかりません。

4
etherfish