Linux iptables DNAT no pacote de entrada sem conntrack (stateless)

2

Na minha caixa de Linux 10.20.1.1 , eu 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, eu tenho um requisito para sempre usar a porta src do UDP como 36000. O pacote on-wire será sempre 36000 - 36000 src e dst.

As regras do meu iptables são como abaixo. Minha intenção é DNAT o pacote de entrada do SRV X da porta 36000 to 46000 para que o App A 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 envio um pacote de App A to Srv X , tudo corre bem. Não há entrada conntrack em /proc/net/ip_conntrack e o pacote OUT corresponde a rule 3 . Quando a resposta vem de Srv X to App A , o pacote percorre a tabela bruta, mas DOES NOT sofre DNAT e pula diretamente para filtrar a regra de tabela 1. Isso significa que a resposta Srv X vem para minha caixa, mas vai para o App B em vez de App A.

Perguntas :

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

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

Obrigado antecipadamente, Telex

    
por Telex 16.04.2015 / 11:36

1 resposta

2

Ao olhar para a documentação do Netfilter , Diz-se que "Acompanhamento de conexão é fundamental para NAT" , portanto, você não pode ter DNAT sem ativar conntrack .

    
por 16.04.2015 / 17:07

Tags