Eu descobri como fazer isso!
Você precisa usar o REDIRECT no NAT! No entanto, antes disso, você tem que apagar a entrada correspondente a esta conexão da conntrack! Algo como o seguinte
conntrack -D -p udp -d 192.168.0.1 --dport=55555
Estou tentando configurar o encaminhamento de porta no UDP de port 12345
para port 54321
usando o seguinte:
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
Isso funciona bem para novas conexões, no entanto, não funcionaria para conexões atualmente ativas.
Para esclarecer o que quero dizer, digamos que, antes de adicionar as regras, haja uma conexão ativa de 192.168.0.2:55555
< --- > 192.168.0.1:12345
e estou tentando redirecionar todas as conexões de entrada em 192.168.0.1:12345
para 192.168.0.1:54321
.
Depois de adicionar as duas regras acima, todos os outros pacotes destinados a 192.168.0.1:12345
são recebidos em 192.168.0.1:54321
, exceto os de 192.168.0.2:55555
.
Eu acho que o estado da conexão desempenha um papel nisso. Como posso resolver isso e obter os pacotes de 192.168.0.1:55555
destinados a port 12345
são entregues em port 54321
?