Переадресация портов iptables для активных UDP-подключений

Переадресация портов iptables для активных UDP-подключений

Я пытаюсь настроить переадресацию портов по UDP с port 12345на port 54321с помощью следующего:

iptables -t nat -A PREROUTING -p udp -i eth0 -d 192.168.0.1  --dport 12345 -j DNAT --to 192.168.0.1:54321

iptables -A FORWARD -p udp -i eth0 -d 192.168.0.1 --dport 54321 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Это отлично работает для новых подключений, однако не будет работать для подключений, которые в данный момент активны.

Чтобы пояснить, что я имею в виду, предположим, что перед добавлением правил имеется активное соединение с 192.168.0.2:55555<---> 192.168.0.1:12345, и я пытаюсь перенаправить все входящие соединения 192.168.0.1:12345на 192.168.0.1:54321.

После добавления двух вышеуказанных правил все остальные пакеты, предназначенные для , 192.168.0.1:12345принимаются по адресу , 192.168.0.1:54321за исключением пакетов от 192.168.0.2:55555.

Я думаю, что состояние соединения играет в этом роль. Как я могу решить эту проблему и заставить пакеты из 192.168.0.1:55555предназначенных port 12345быть доставленными в port 54321?

решение1

Я придумал, как это сделать!

Вам нужно использовать REDIRECT на NAT! Однако перед этим вам нужно стереть запись, соответствующую этому соединению из conntrack! Что-то вроде следующего

conntrack -D -p udp -d  192.168.0.1 --dport=55555 

Связанный контент