我正在尝试将本地计算机上端口843上的所有传出流量重定向到端口1234上的本地服务。
因此,当我向例如发送请求时1.2.3.4:843
,我希望它连接到127.0.0.1:1234
(透明地发送到发出请求的应用程序)。
我在OS X上,因此尝试使用来实现pf
。
这是我所拥有的:
ext_if = "en0"
int_if = "lo0"
rdr on $ext_if inet proto tcp from self to any port 843 -> 127.0.0.1 port 1234
现在,当我这样做时,我telnet 1.2.3.4 843
期望本地服务上有连接(在端口1234上运行)。
但是,它似乎无法正确重定向。使用tcpdump
I,我可以看到数据包被放置在与目标接口上1.2.3.4
。
如果我只执行本地主机规则,例如
rdr on $int_if inet proto tcp from self to any port 843 -> 127.0.0.1 port 1234
然后telnet localhost 843
按预期方式工作,我从侦听port的本地服务获得响应 1234
。
我不确定自己在做什么错,现在我茫然无措。任何帮助/指针表示赞赏。
编辑:
我进行了更多测试,似乎与最后一条规则一样,落在回送接口上的任何请求都可以正常工作。因此telnet 127.2.3.4 843
也正确重定向。
我尝试添加$ext_if
到上面
rdr on { $ext_if $int_if } proto tcp from any to any port 843 -> 10.0.1.10 port 1234
但是没有成功。我还添加了sysctl转发。什么也没做。
sudo sysctl -w net.inet.ip.forwarding=1
sudo sysctl -w net.inet6.ip6.forwarding=1
1
有同样的问题,回答了在这里: serverfault.com/questions/421261/...