Como desabilitar o mapeamento de porta de origem implícito nos pacotes UDP enviados através do NAT no iptables?

2

iptables está reescrevendo a porta de origem em meus pacotes UDP que saem de uma interface tun. Eu tenho configuração de regras NAT com porta X encaminhada (detalhes abaixo). Quando um aplicativo por trás do NAT recebe um pacote UDP encaminhado na porta X e, em seguida, "responde" enviando outro pacote UDP, que deve ter a porta de origem X), esse pacote recebe a porta de origem 1024. A porta de origem já está -written antes mesmo deixa a caixa NATed. O aplicativo remoto rejeita este pacote porque está esperando a porta de origem X, não a 1024.

Acho que o " mapeamento de porta de origem implícito " está em andamento. Eu não preciso disso porque a porta X é dedicada a uma função e nenhuma interferência pode ocorrer: nem a máquina NAT, nem qualquer outra máquina usará essa porta. Como forçar o iptables a manter apenas a porta de origem?

No host por trás do NAT em que os pacotes com porta de origem reescrita se originaram, tentei o seguinte (um por vez), todos com os mesmos resultados:

iptables -t nat -A POSTROUTING -o tun0 -p udp --sport X -j SNAT --to 10.7.0.5:X
iptables -t nat -A POSTROUTING -o tun0 -p udp -j SNAT --to 10.7.0.5
iptables -t nat -A POSTROUTING -o tun0 -p udp -j MASQUERADE

Na caixa externa de controle remoto que faz o NAT:

iptables -t nat -A PREROUTING -i eth0 -p udp --dport X -j DNAT --to-destination 10.7.0.5:X
 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    
por redfish 03.12.2017 / 19:16

1 resposta

2

Problema resolvido vinculando o aplicativo à interface tun0, em vez de a 0.0.0.0.

Eu tentei isso porque, em conntrack -E , vi que a conexão tinha o endereço de origem de uma interface diferente (não tun0). Portanto, mesmo que o pacote tenha chegado ao destino correto, com o endereço de origem correto reescrito, o estado do pacote no rastreador de conexão não estava correto.

    
por 03.12.2017 / 20:55