Я начинаю со следующего, что не кажется необходимым, но, похоже, не больно:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
Следующие две команды создают переадресацию порта с порта 5433 на порт 5432.
sudo /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 5433 -m comment --comment "Port forward 5433->5432" -j REDIRECT --to-ports 5432
sudo /sbin/iptables -t nat -A OUTPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 5433 -m comment --comment "Port forward 5433->5432" -j REDIRECT --to-ports 5432
Это работает локально. Обе следующие команды успешно подключаются и получают «пустой ответ», потому что сервер прослушивания не является HTTP.
curl http://localhost:5432
curl http://localhost:5433
Однако, когда я запускаю те же команды с другого сервера:
curl http://<local IP>:5432
curl http://<local IP>:5433
Curl 5432 подключается, а curl 5433 - нет, что означает, что переадресация портов не работает с удаленного сервера.
Как я могу исправить свои правила iptables, чтобы переадресация портов работала как с удаленных, так и с локальных серверов?
Я вижу, что второе правило определяет IP-адрес источника 127.0.0.1/32. Я попытался изменить это и не смог найти что-то, что работало.
Вам следует знать две вещи.
Вы должны добавить правило для MASQUERADE в свой блок NAT см. инструкцию там, например, для всего интерфейса или только для одного порта. И вы должны разрешить пересылку, удалив правило в блоке фильтра, если оно существует в вашей конфигурации iptables.