У меня есть устройство Ubuntu 18.04 с двумя сетевыми интерфейсами, Ethernet и USB LTE-модемом. IP-камера подключена напрямую к порту Ethernet и имеет адрес 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. Поскольку у вас есть два интерфейса к Интернету, можно указать его дважды. Каждый будет применяться только к трафику, выходящему из этого интерфейса. Например:
iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wwp0s20f0u3 -j MASQUERADE
Если после исправления вы все еще получаете ошибку 502, убедитесь, что ваше веб-приложение действительно работает и прослушивает ожидаемый порт. Обычно причиной этой ошибки является то, что приложение не работает или не прослушивает другой порт.
P.S. Если вы не работаете в компании La Jolla Baking Company в Плано, штат Техас, США, вам следует использовать другой блок IP-адресов. Им принадлежит глобальный адрес 172.10.0.10, который вы использовали в своем вопросе. Использование глобальных IP-адресов других людей также может вызвать проблемы.