pf(Mac OS X)规则将所有stream量redirect到特定的IP /端口

我试图重新创build这个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 

我想redirect到10.0.0.0/8(不pipe什么端口)到本地端口12345的所有连接。在Linux中,这与以上指定的规则很好地工作。 现在我试图在Mac OS X上重新创build它。目前没有任何我已经尝试工作,例如

 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 NATredirect。 Redsocks需要通过代理连接来保持目标IP /端口的正确转发。 所以我想包中的目的地不应该改变/重写为127.0.0.1:12345。

所以,我可能会误解,但我认为你可能会混淆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 

我意识到我很难作为任何方式的专家在这里评论; 但是,我希望我的意见可以帮助您find解决scheme。


关于你在你问题结尾的评论,你写了:

我不确定连rdr规则是否相当于iptables NATredirect。 Redsocks需要通过代理连接来保持目标IP /端口的正确转发。 所以我想包中的目的地不应该改变/重写为127.0.0.1:12345。

根据iptables-extensions(8),REDIRECT的目标是:

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

TPROXY保留原始的目的地址:

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

我不知道如果PF支持Linux特有的风格TPROXY操作。