Я хочу пересылать трафик с помощью iptables, не показывая другой IP/порт отправляющему хосту.
Мое приложение прослушивает хост xx15.42, порт 23555, используя TCP. Клиент будет подключаться к xx15.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?
решение1
Итак, первое правило брандмауэра, которое я использовал, работает:
iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination x.x.15.42:23555
Единственная проблема заключалась в том, что сервер говорил клиенту подключаться к порту 23555 вместо порта 5555, как я хотел. Изменение этого на стороне сервера исправило проблему.
решение2
Я только начинаю работать с 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
необходима ли опция interface.