我有一个连接到具有静态IP的eth0上的互联网的eth0,我已经安装了Squid,我还允许我的Mikrotik路由器上的1694端口被转发到我的raspberry上的3128端口,这样我就可以使用我的raspberry作为代理服务器。例如,当我在另一个互联网上的另一个设备上像这样测试它时,它可以工作:
$ curl -x MY.STAT.IC.IP:1694 https://wtfismyip.com/text
MY.STAT.IC.IP现在我给我的树莓增加了一个3g屏蔽,我能够连接到3g网络,现在我在ppp0接口上有了互联网,它有一个动态的IP。现在我想把所有传入的请求转发到eth0,以便通过ppp0路由,所以当我做以上的卷曲时,我得到了我的3g网络IP。
我不想在squid上使用tcp_outgoing_address,因为它有很多问题,我想做端口转发,我做了以下工作,但它仍然返回我的静态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,我确信它会工作,但仍然没有成功,所以,我缺少了什么?
发布于 2020-11-25 11:05:32
首先,您必须确保PI正在使用3g ppp0连接来发送数据包。
ip route应该输出如下这样的内容:
default via XXXXXX dev ppp0此外,在pi上执行您提到的卷曲(将代理ip设置为localhost)应该会给出3g地址。
在此之后:尝试本地代理是否有效。因此,在您的网络中使用计算机,将PI设置为代理,并运行curl检查。它还应该返回3g IP。
如果这样做有效,您将不得不在Mikrotik中设置一个规则,将数据包伪装为squid,就好像它们来自Mikrotik:
因此,您必须在DSTNAT规则中添加一个类似的SRCNAT规则,该规则将action设置为伪装选项。
如果做得正确,这将使任何由Mikrotik转发到squid的数据包看起来就像源自Mikrotik本身的数据包。这是一个本地设备。这将你的问题减少到上面第2点已经解决的问题。
https://serverfault.com/questions/1043862
复制相似问题