将 eth0 端口转发至 ppp0

将 eth0 端口转发至 ppp0

我有一台 RaspberryPi,它通过具有静态 IP 的 eth0 连接到互联网,我安装了 Squid,还启用了 Mikrotik 路由器上的 1694 端口以转发到 Raspberry 上的 3128 端口,这样我就可以使用 Raspberry 作为代理服务器。例如,当我从另一个互联网上的另一台设备进行这样的测试时,它可以正常工作:

$ curl -x MY.STAT.IC.IP:1694 https://wtfismyip.com/text

MY.STAT.IC.IP

现在我已经为我的 Raspberry 添加了 3g 屏蔽,并且能够连接到 3g 网络,现在我可以通过具有动态 IP 的 ppp0 接口上网。现在我想将所有传入请求转发到 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

1.检查PI是否使用3g


首先,您必须确保 PI 使用 3g ppp0 连接来发送数据包。

ip route

应该输出类似这样的内容:

default via XXXXXX dev ppp0

另外,在 pi 上执行您提到的 curl(将代理 ip 设置为 localhost)应该会为您提供 3g 地址。

2. 检查本地代理是否有效

之后:尝试本地代理是否有效。因此,使用网络中的计算机,将 PI 设置为代理并运行 curl ip 检查。它还应该返回 3g IP。

如果这可行,您将必须在 Mikrotik 中放入一条规则,将数据包伪装成来自 Mikrotik 的数据包:

3. 让 Mikrotik 看起来像数据包来源

因此,您必须在 DSTNAT 规则中添加一个类似的 SRCNAT 规则,该规则已action设置为 MASQUERADE 选项。

如果操作正确,这将使 Mikrotik 转发给 Squid 的任何数据包看起来都像是来自 Mikrotik 本身。这是一个本地设备。这将把你的问题简化为上面已经解决的问题2

相关内容