pf:将端口 80 上的所有数据包从任意接口转发到 SOCKS 代理

pf:将端口 80 上的所有数据包从任意接口转发到 SOCKS 代理

我正在尝试将端口 80 上的任何数据包从任何接口转发到我的 SOCKS 代理(服务器)。我不确定我的设置是否正确,但我无法让它转发数据包。

我像这样创建一个 SOCKS 代理机器A

ssh -D 5948 user@server

如果我更改 Chrome 中的代理设置,这允许我通过 SOCKS 代理访问互联网。

这很好,除了我连接一个设备(设备B) 到机器A使用蓝牙,我想通过 SOCKS 代理从该设备通过我的机器访问互联网。

           +---------------+    +---------------+    +--------------+
           |               |    |               |    |              |
           |               |    |               |    |              |
Internet   |    Server     <----+   Machine A   <----+   Device B   |
           |               |    |               |    |              |
           |               |    |               |    |              |
           +---------------+    +---------------+    +--------------+
                                                  Connected via Bluetooth

通过蓝牙的连接和互联网共享工作正常,除了使用我的 ISP 而不是使用 SOCKS 代理。

相反,我想要做的是pf将任何数据包从端口 80 上的任何接口转发到我的 SOCKS 代理。

我尝试通过使用以下内容创建锚文件:

rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 5948

我将锚点包含在pf.conf所有接口上并启用转发,如下所示:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

转发没有发生,我只能假设我的pf规则不正确。我已经使用以下方法验证了它:

sudo pfctl -vnf /etc/pf.anchors/org.jj.forwarding

有什么想法我哪里出错了吗?

答案1

当您启用转发时,添加以下 iptable 规则应该可以工作

iptables -t nat -A PREROUTING -i bl1 -p tcp --dport 80 -j DNAT --to 127.0.0.1:5948

bl1 是您的蓝牙接口

相关内容