我正在尝试重新创建这个 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 重定向。Redsocks 要求连接保留目标 ip/端口,以便通过代理正确转发。所以我猜包中的目标不应该更改/重写为 127.0.0.1:12345。
答案1
因此,我可能误解了,但我认为您可能混淆了 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 重定向。Redsocks 要求连接保留目标 ip/端口,以便通过代理正确转发。所以我猜包中的目标不应该更改/重写为 127.0.0.1:12345。
根据 iptables-extensions(8) 的规定,REDIRECT 目标:
“它通过将目标 IP 更改为传入接口的主地址将数据包重定向到机器本身...”
并且,TPROXY 保留原始目标地址:
“它将数据包重定向到本地套接字,而不以任何方式改变数据包头。”
我不知道 pf 是否支持 Linux 特定风格的 TPROXY 操作。