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 .
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 :
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
?
Como garantir que todos os pacotes de entrada do Srv X com porta dst 36000 sempre passem por DNAT?
Obrigado antecipadamente, Telex
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 .
Tags iptables