Ubuntu

Ubuntu 18.04:設置埠轉發規則後,與 localhost 上的伺服器的通信停止工作

  • August 11, 2020

我有一個帶有兩個網路介面、乙太網和 USB LTE 調製解調器的 Ubuntu 18.04 設備。有 IP 攝影機直接連接到乙太網埠,它有地址192.168.0.90。我將 LTE 介面用於其他一切 - 網際網路、ssh 等 - 它具有靜態 IP 地址172.10.0.10(我們公司有自己的 APN)。

我的設備執行了一個 Python 應用程序,該應用程序與本地 Node.JS 伺服器通信,該應用程序http://localhost/abc通過 LTE 介面與我的伺服器通信https://myserver.com/app

IP 攝影機有自己的網路伺服器用於配置目的。為了進入攝影機的配置頁面,我設置了一個埠轉發規則,這樣我就可以訪問 IP 攝影機172.10.0.10:8888

sudo sysctl net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -p tcp --dport 8888 -j DNAT --to-destination 192.168.0.90:80
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

它工作正常,我可以很好地訪問相機和外殼。但是 Python 應用程序停止與本地 Node.JS 伺服器通信,並出現以下錯誤:

502 Server Error: Bad Gateway for url: http://localhost/abc我的猜測是我的埠轉發規則破壞了這兩個本地應用程序正在通信的一些埠。關於如何解決這個問題的任何想法?

您的 MASQUERADE 規則是錯誤的。它需要指定出介面,否則它將嘗試對所有流量進行NAT。由於您有兩個 Internet 介面,因此可以指定兩次。每個將僅適用於離開該介面的流量。例如:

iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wwp0s20f0u3 -j MASQUERADE

如果您在修復此問題後仍然收到 502 錯誤,請檢查您的 Web 應用程序是否實際執行並偵聽您期望的埠。此錯誤的通常原因是應用程序未執行或未在其他埠上偵聽。

PS 如果您不是在美國德克薩斯州普萊諾的 La Jolla Baking Company 工作,您應該使用不同的 IP 地址塊。他們擁有您在問題中使用的全球 172.10.0.10 地址。使用其他人的全球 IP 地址也會導致問題。

引用自:https://serverfault.com/questions/1029650