iptables SNAT / DNAT explicam o comportamento

0

Eu sou novo no iptables e quero entender como o iptables nat está funcionando. Eu tenho uma máquina linux com um contêiner lxc. A configuração de rede da máquina é a seguinte: interface eth0 que conecta a máquina à internet (seu endereço IPv4 é 10.9.63.173) e uma interface veth-1 (192.168.2.1) para o contêiner lxc. No contêiner lxc há uma interface eth0 (192.168.2.2) conectada ao veth-1.

Na máquina linux eu adicionei duas regras iptables:

1) iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.9.63.173
2) iptables -t nat -A PREROUTING -d 10.9.63.173 -j DNAT --to-destination 192.168.2.2

Se eu fizer um ping 8.8.8.8 do contêiner lxc, tudo estará funcionando (o IP de origem será convertido para 10.9.63.173 ao sair da máquina linux). Mas a segunda regra nunca é correspondida pelas respostas do eco de ping. Eu observei os pacotes de entrada em eth0 (10.9.63.173) usando o tcpdump e a saída é a seguinte:

23:34:33.151565 IP google-public-dns-a.google.com > host.local: ICMP echo reply, id 536, seq 174, length 64

Portanto, os pacotes com destino 10.9.63.173 chegam na interface eth0.

Eu tenho três perguntas:

1) Por que a regra de pré-seleção de nat nunca foi igualada?

2) Como o iptables sabe como modificar respostas de modo a encaminhá-las para 192.168.2.2?

3) O alvo SNAT pode modificar a porta de origem (sem informar explicitamente para traduzir para uma (s) porta (s) específica (s))?

Obrigado!

    
por SebiSebi 04.01.2017 / 23:01

3 respostas

0

O Iptables está usando uma tabela NAT e a máquina conntrack. Dessa forma, se o seu contêiner iniciar a conexão, ele corresponderá à regra SNAT, gravará na tabela NAT e preencherá a tabela conntrack.

Quando uma resposta está chegando, conntrack sabe (com ip e porta de origem e destino, e seqüência TCP se a conexão é TCP) que o pacote pertence à conexão, e irá endereçá-lo à correspondência NAT correta.

Por conexão, somente o primeiro pacote corresponderá a uma regra NAT, então todos os outros seguirão apenas o mesmo caminho (ou caminho inverso).

Se uma nova conexão estiver vindo de fora para seu contêiner, ela corresponderá à regra DNAT.

O SNAT não pode modificar a porta de origem.

    
por 05.01.2017 / 14:13
0

Faça uma leitura do TCP e do rastreamento de conexão, eu acho: link

O SNAT só pode modificar o endereço IP de origem até agora.

    
por 09.02.2017 / 19:33
0

1) Why is the nat prerouting rule never matched?

O NAT de iptables funciona em "conexões" *, somente o primeiro pacote de cada "conexão" passa pelas tabelas nat controladas pelo usuário.

2) How does iptables know how to modify replies such that to forward them to 192.168.2.2?

Quando o primeiro pacote de uma "conexão" passa pelo NAT, ele estabelece uma entrada em uma tabela de controle de conexão interna. Isso é usado para traduzir pacotes posteriores da conexão.

3) Can the SNAT target modify the source port (without explicitly telling to translate to a specific port(s))?

Sim, pode, mas, por padrão, isso só será feito se não houver necessidade de evitar ambigüidade.

* "connection" refere-se aqui a um conjunto de critérios que podem ser usados para corresponder solicitações a suas respostas correspondentes. por exemplo. a tupla de porta ip / source de origem / ip de destino / porta de destino para TCP / UDP ou o ip de origem / tipo / id / code / destination para consultas ICMP.

    
por 12.09.2018 / 16:13