Я пытаюсь настроить переадресацию портов по 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
?
Разобрался как это сделать!
Вам нужно использовать REDIRECT на NAT! Однако перед этим вы должны удалить запись, соответствующую этому соединению, из conntrack! Что-то вроде следующего
conntrack -D -p udp -d 192.168.0.1 --dport=55555