pf (Mac OS X) 规则将所有流量重定向到特定的 ip/端口

bko*_*ara 5 nat iptables mac-osx redirect pf

我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)

我想将所有去往 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
Run Code Online (Sandbox Code Playgroud)

我已经设置了sysctl net.inet.ip.forwarding=1

我不确定甚至 rdr 规则是否等同于 iptables nat 重定向。Redsocks 要求连接保持目标 IP/端口,以便通过代理正确转发。所以我想包中的目的地不应该更改/重写为 127.0.0.1:12345。

eth*_*ish 4

所以,我可能会误解,但我认为您可能会混淆 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
Run Code Online (Sandbox Code Playgroud)

我意识到我几乎没有资格作为任何专家在这里发表评论;但是,我希望我的评论可以帮助您找到解决方案。


关于您在问题末尾所写的评论:

我不确定 rdr 规则是否等同于 iptables nat 重定向。Redsocks 要求连接保留目标 ip/端口,以便通过代理正确转发。所以我想包中的目的地不应该更改/重写为127.0.0.1:12345。

根据 iptables-extensions(8),重定向目标:

“它通过将目标 IP 更改为传入接口的主地址,将数据包重定向到机器本身......”

并且,TPROXY 保留原始目标地址:

“它将数据包重定向到本地套接字,而不以任何方式更改数据包标头。”

我不知道pf是否支持linux特有风格的TPROXY操作。