有一个很酷的实用程序,叫做sshuttle。过去它依赖于ipfw
转发数据包。看起来这ipfw
在 Mavericks 中大部分都被破坏了,建议现在使用 PacketFilter。
我大部分时间都在看 PacketFilter,它似乎ipfw
有一个 PacketFilter 不支持的功能(希望我错了)。
以下规则:
ipfw -q add 12300 fwd 127.0.0.1,12300 tcp from any to any not ipttl 42 keep-state setup
会将所有流量转发到 127.0.0.1 (localhost) 端口 12300。但是,它不会更改 TCP 数据包中的目标 IP 或端口。这对于 sshuttle 很重要,因为它使用有关原始目的地的信息将数据包转发到另一个网络。
我可以在 PacketFilter 世界中找到的最接近的规则是:
rdr pass proto tcp from any to any -> 127.0.0.1 port 12300
此规则确实将流量发送到 127.0.0.1 (localhost) 端口 12300,但它还将目标地址重写为 127.0.0.1。
关于如何在 OS X 中获得行为 sshuttle 需要的任何想法?