Linux iptables DNAT no pacote recebido sem conntrack (sem estado)

Linux iptables DNAT no pacote recebido sem conntrack (sem estado)

Na minha caixa Linux 10.20.1.1, tenho dois aplicativos UDP vinculados na porta 46000 (App A)e 36000(App B)respectivamente. Os aplicativos se comunicam com dois servidores UDP vinculados como 10.10.1.1:36000 (Srv X)e 10.10.1.2:36000 (Srv Y)respectivamente.

Quando eu envio o pacote, tenho a necessidade de sempre usar a porta UDP src como 36000. O pacote no fio será sempre 36000 - 36000as portas src e dst.

Minhas regras do iptables são como abaixo. Minha intenção é enviar DNATo pacote recebido do Srv X da porta 36000 to 46000para que o App A o receba.

*nat
-A PREROUTING -s 10.10.1.1/32 -p udp --dport 36000 -j DNAT --to-destination :46000

*raw
-A PREROUTING -p udp --dport 36000 -j CT --notrack
-A PREROUTING -p udp -j ACCEPT
-A OUTPUT -p udp --dport 36000 -j CT --notrack
-A OUTPUT -p udp -j ACCEPT

*filter

-A INPUT -p udp -m udp --dport 36000 -j ACCEPT --> rule 1
-A INPUT -p udp -m udp --dport 46000 -j ACCEPT --> rule 2
-A OUTPUT -p udp -m udp --dport 36000 -j ACCEPT -> rule 3

Quando eu envio um pacote, App A to Srv Xtudo corre bem. Não há nenhuma /proc/net/ip_conntrackcorrespondência de entrada e saída do pacote conntrack rule 3. Quando a resposta vem de Srv X to App A, o pacote atravessa a tabela bruta, mas DOES NOTpassa DNATe salta diretamente para a regra 1 da tabela de filtro. Isso significa que a resposta Srv X chega à minha caixa, mas vai para o Aplicativo B em vez do Aplicativo A.

Questões:

  1. A tabela RAW indica que não há arquivo CONNTRACK. No entanto, o comportamento acima indica que o primeiro pacote App A -> Srv Xcom porta src e dst 36000 - 36000está sendo rastreado por algum módulo em algum lugar. Portanto, a resposta de Srv X -> App Anão parece passar por DNAT. Como posso evitar isso CONNTRACK?

  2. Como garantir que todos os pacotes recebidos do Srv X com porta dst 36000 sempre passem por DNAT?

Agradecemos antecipadamente, Telex

Responder1

Ao olhar paraDocumentação do Netfilter, diz-se que"O rastreamento de conexão é fundamental para o NAT", portanto, você não pode ter DNAT sem ativarconexão.

informação relacionada