Я хочу перенаправлять трафик с помощью iptables, не показывая другой ip / порт отправляющему хосту.
Мое приложение прослушивает хост x.x.15.42, порт 23555, используя TCP. Клиент будет подключаться к x.x.15.42: 5555. Я хочу, чтобы соединение было перенаправлено на порт 23555, не открывая этот порт клиенту.
Я уже пробовал использовать DNAT:
iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination x.x.15.42:23555
Но клиенту будет показано, что он подключается к порту 23555.
Я также пробовал использовать REDIRECT, но по какой-то причине это вообще не работает. Клиент не может подключиться.
iptables -t nat -A PREROUTING -p tcp --dport 5555 -d x.x.15.42 -j REDIRECT --to-port 23555
Как перенаправить этот трафик, чтобы он выглядел так, будто приложение прослушивает порт 5555?
Итак, первое правило брандмауэра, которое я использовал, работает:
iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination x.x.15.42:23555
Единственная проблема действительно заключалась в том, что сервер говорил клиенту подключиться к порту 23555 вместо порта 5555, как я хотел. Изменение этого параметра на сервере устраняет проблему.
Я всего лишь любитель iptables, так что не могли бы вы попробовать следующее:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 5555 -j DNAT --to x.x.15.42:23555
iptables -A FORWARD -p tcp -d x.x.15.42 --dport 23555 -j ACCEPT
Обе строки необходимы (я думаю, что это вызывает отсутствие опции FORWARD), хотя не уверен, что опция интерфейса -i eth0
это необходимо