Iptables

pf (Mac OS X) 規則將所有流量重定向到特定 IP/埠

  • January 5, 2016

我正在嘗試使用 pf重新創建此 iptables 設置(來自https://github.com/darkk/redsocks ):

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 重定向。Redsocks 需要連接來保持目標 ip/port 以便通過代理正確轉發。所以我猜包中的目的地不應該更改/重寫為 127.0.0.1:12345。

所以,我可能會誤解,但我認為您可能會混淆 iptables TPROXY 和 REDIRECT 目標 - 但我認為這並不重要。忽略這一點,您可能仍然能夠實現您的目標。

您對 rdr pf 規則的不滿是因為僅適用於傳入的數據包。根據 2005 FreeBSD-pf mailinglist post,您可以通過路由規則規避該限制。我從未使用過 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 重定向。Redsocks 需要連接來保持目標 ip/port 以便通過代理正確轉發。所以我猜包中的目的地不應該更改/重寫為 127.0.0.1:12345。

根據 iptables-extensions(8),REDIRECT 目標:

“它通過將目標 IP 更改為傳入介面的主地址,將數據包重定向到機器本身……”

並且,TPROXY 保留原始目標地址:

“它將數據包重定向到本地套接字,而不以任何方式更改數據包標頭。”

我不知道 pf 是否支持 linux-specific style TPROXY 操作。

引用自:https://serverfault.com/questions/709369