Я пытаюсь настроить переадресацию портов по 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