Назад | Перейти на главную страницу

переадресация портов с помощью iptables не удалась

Надеюсь переадресовать с 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 И проверить счетчики пакетов, чтобы понять, что проходит через каждое правило.