我有一个 RaspberryPi,它连接到具有静态 IP 的 eth0 上的互联网,我安装了 Squid,并且我还在我的 Mikrotik 路由器上启用了 1694 端口转发到我的树莓上的 3128 端口,所以我可以使用我的树莓作为代理服务器。例如,当我从另一个互联网上的另一个设备上测试它时,它可以工作:
$ curl -x MY.STAT.IC.IP:1694 https://wtfismyip.com/text
MY.STAT.IC.IP
现在我已经为我的树莓添加了一个 3g 屏蔽,我能够连接到 3g 网络,现在我在 ppp0 接口上有了互联网,它有一个动态 IP。现在我想将所有传入的请求转发到 eth0 以通过 ppp0 路由,所以当我在 curl 上执行时,我得到了我的 3g 网络 IP。
我不想tcp_outgoing_address
在 squid 上使用,因为它有很多问题,我想做端口转发,我已经完成了以下操作,但它仍然返回我的静态 IP。
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i ppp0 -o eth0 -j ACCEPT
我已经尝试了很多其他的 iptables 转发,但都没有奏效。我已经尝试过这个 bash 脚本(当然编辑过),但它也没有工作,我也尝试了 ipt.sh 从这个链接,我确信它会工作,但仍然没有成功,那么,我错过了什么?
1.检查PI是否使用3g
首先,您必须确保 PI 使用 3g ppp0 连接来传输数据包。
应该输出如下内容:
此外,在 pi 上执行您提到的 curl(代理 ip 设置为 localhost)应该会给您 3g 地址。
2.检查本地代理是否有效
在此之后:尝试本地代理是否有效。因此,使用网络中的计算机,将 PI 设置为代理并运行 curl ip 检查。它还应该返回 3g IP。
如果这行得通,你将不得不在你的 Mikrotik 中加入一条规则,将数据包伪装成鱿鱼,就好像它们来自 Mikrotik:
3. 让 Mikrotik 看起来像数据包的来源
因此,您必须在 DSTNAT 规则中添加一个类似的 SRCNAT 规则,该规则已
action
设置为 MASQUERADE 选项。如果操作正确,这将使 Mikrotik 转发给 squid 的任何数据包看起来都像是来自 Mikrotik 本身。这是一个本地设备。这将您的问题减少到上面第2点已经解决的问题。