Uma pequena dúvida sobre MASQUERADE e SNAT / DNAT

1

Eu sei o que significa SNAT e DNAT. E eu sei quando eu quero configurar um serviço de servidor de rede local aberto para a internet, eu deveria usar:

  • SNAT para ajudar a mudar os pacotes vindos do servidor de rede local para o endereço do roteador.
  • DNAT para ajudar a mudar os pacotes vindos da internet para o ip da rede local do servidor

Mas quando compartilhamos a rede usando o MASQUERADE, não precisamos configurar o DNAT para esses pacotes vindos da Internet. Alguns artigos dizem que o MASQUERADE é o mesmo que o SNAT, exceto para o ip externo do roteador de localização automática. Mas por que o MASQUERADE não precisa da configuração DNAT? E suponha que o MASUQERADE possa fazer isso por nós, por que o iptables não define o SNAT automaticamente quando configuramos o DNAT?

Editar

Eu só tenho uma nova pergunta. Suponha que dois usuários na rede local naveguem na mesma página da Web e as portas de clientes que eles abriram sejam as mesmas. Quando os pacotes de resposta do servidor da página da web para o roteador, como o roteador sabe que os pacotes pertencem a qual usuário?

    
por Frio 15.12.2017 / 08:11

1 resposta

1

Tanto o SNAT quanto o DNAT tratam da tradução tanto para pacotes de entrada quanto de saída, usando o recurso de rastreamento de conexão ( conntrack ) do kernel. Portanto, se o kernel detectar que um pacote na direção inversa pertence a uma conexão NAT, ele fará a tradução reversa automaticamente, sem uma regra especial para ele.

É por isso que, por exemplo uma única regra SNAT é suficiente (embora não atrapalhe se você tiver uma regra DNAT para outra direção).

E sim, MASQUERADE é basicamente SNAT com o endereço retirado da interface. Para citar man iptables-extensions :

Masquerading is equivalent to specifying a mapping to the IP address of the interface the packet is going out, but also has the effect that connections are forgotten when the interface goes down.

BTW, acho mais simples lembrar que SNAT = Source NAT (altera o endereço de origem do pacote) e DNAT = Destination NAT (altera o endereço de destino do pacote).

Editar

(Normalmente, você deve fazer novas perguntas como uma questão separada).

netstat mostra apenas conexões entre aplicativos em execução no computador local e outros hosts. Ele não mostra o rastreamento de conexão do kernel. Você pode encontrar informações sobre isso em /proc (por exemplo, /proc/net/nf_conntrack ) com utilitários adicionais do pacote conntrack .

A camada de rede não sabe nada sobre "usuários". Uma conexão consiste no endereço de origem, na porta de origem, no endereço de destino e na porta de destino. Isso é tudo que a camada de rede conhece. Ele faz NAT (Network Address Translation), substituindo o endereço de origem / destino, e também substituindo o número de porta de destino / fonte (isto é, local) por algum outro número, se essa porta já estiver em uso.

Portanto, dois usuários em diferentes hosts com portas idênticas (em sua máquina) que não são NAT, terão portas diferentes no host NAT. Dois usuários na mesma máquina sempre usarão portas locais diferentes, o que nunca é um problema. O mesmo se um usuário abrir duas conexões de uma só vez.

    
por 15.12.2017 / 08:43

Tags