埠轉發 eth0 到 ppp0
我有一個 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 連接來傳輸數據包。
ip route
應該輸出如下內容:
default via XXXXXX dev ppp0
此外,在 pi 上執行您提到的 curl(代理 ip 設置為 localhost)應該會給您 3g 地址。
2.檢查本地代理是否有效
在此之後:嘗試本地代理是否有效。因此,使用網路中的電腦,將 PI 設置為代理並執行 curl ip 檢查。它還應該返回 3g IP。
如果這行得通,你將不得不在你的 Mikrotik 中加入一條規則,將數據包偽裝成魷魚,就好像它們來自 Mikrotik:
- 讓 Mikrotik 看起來像數據包的來源
因此,您必須在 DSTNAT 規則中添加一個類似的 SRCNAT 規則,該規則已
action
設置為 MASQUERADE 選項。如果操作正確,這將使 Mikrotik 轉發給 squid 的任何數據包看起來都像是來自 Mikrotik 本身。這是一個本地設備。這將您的問題減少到上面第2點已經解決的問題。