Надеюсь переадресовать с 192.168.1.230:9090 на 192.168.1.231:8080. Выполняю следующую команду:
iptables -t nat -A PREROUTING -d 192.168.1.230 -p tcp --dport 9090 -j DNAT --to 192.168.1.231:8080
iptables -t nat -A POSTROUTING -d 192.168.1.231 -p tcp --dport 8080 -j SNAT --to 192.168.1.230:9090
Очень странно, что иногда работает по открытому url http://192.168.1.230:9090/ в браузере, но в большинстве случаев не работает.
Я что-то упускаю?
iptables -t nat -A PREROUTING -d 192.168.1.230 -p tcp --dport 9090 -j DNAT --to 192.168.1.231:8080 iptables -t nat -A POSTROUTING -d 192.168.1.231 -p tcp --dport 8080 - j SNAT - к 192.168.1.230:9090
Я считаю, что вы неправильно понимаете использование цепочки POSTROUTING. Это не «обратный» путь. Постмаршрутизация просто выполняется после принятия решения о маршрутизации на вашем узле. Правило PREROUTING предназначено для изменения IP-адреса назначения, а правило POSTROUTING предназначено для изменения источника. Это не связано с тем, является пакет возвращаемым или нет. Итак, в вашем примере команда POSTROUTING должна быть:
iptables -t nat -A POSTROUTING -d 192.168.1.230 -p tcp -j MASQUERADE
вместо -j MASQUERADE, если вы знаете IP-адрес своего прокси-узла, вы можете использовать:
iptables -t nat -A POSTROUTING -d 192.168.1.230 -p tcp -j SNAT --to-source xx.xxx.xx.xx
где xx.xxx.xx.xx - это IP-адрес прокси
Первое правило кажется правильным. Кажется, проблема во втором правиле. Когда пакет возвращается из 192.168.1.231:8080, вы хотите проверить, что это спорт 8080 (а не порт dport). Вы можете использовать iptables -t nat -nvL PREROUTING и iptables -t nat -nvL POSTROUTING И проверить счетчики пакетов, чтобы понять, что проходит через каждое правило.