Como NAT / PortForwarding / TCP / IP funciona?

11

Li recentemente um artigo intitulado como o NAT funciona . Algumas coisas ainda não estão claras para mim. Eu ficaria agradecido se alguém pudesse explicar.

Abaixo está a parte do artigo sobre DynamicNAT mais confusa:

Um computador no domínio stub tenta se conectar a um computador fora da rede, como um servidor Web.

O roteador recebe o pacote do computador no domínio stub. O roteador salva o endereço IP não roteável do computador em uma tabela de conversão de endereços. O roteador substitui o endereço IP não roteável do computador remetente pelo primeiro endereço IP disponível fora do intervalo de endereços IP exclusivos. A tabela de conversão agora possui um mapeamento do endereço IP não roteável do computador, correspondente a um dos endereços IP exclusivos.

Quando um pacote volta do computador de destino, o roteador verifica o endereço de destino no pacote. Em seguida, ele pesquisa na tabela de conversão de endereços para ver a qual computador no domínio stub o pacote pertence.

1) Como o NAT sabe que o pacote "volta" ao computador de destino?

2) E se outros computadores na LAN estiverem conectados ao mesmo servidor? Como o NAT sabe qual pacote deve "voltar" para onde?

3) A modificação do cabeçalho do pacote permite realizar um ataque na Internet, no qual o "IP de origem" é substituído pelo IP da vítima, e o servidor de resposta inundará a vítima com pacotes indesejados?

Eu acho que vários invasores precisariam estar envolvidos ...

4) O StaticNAT é equivalente ao PortForwarding de todas as portas?

user2449761
fonte

Respostas:

10

Existe um equívoco geral entre NAT (Network Address Translation) e PAT (Port Address Translation), que é o que mais usamos em nossos roteadores domésticos.

NAT
Vamos supor que temos uma rede com a seguinte topologia:

Rede Privada <-------> Roteador <-------> The_Internet

A interface do roteador conectada à Private_Network possui um endereço IP privado , ou seja, um que não é exclusivo na Internet . Por outro lado, no caso do NAT , o roteador possui várias interfaces conectadas ao The_Internet . Cada interface possui um endereço IP exclusivo na Internet . Agora vamos supor que Host_A e Host_B estejam na Private_Network e que ambos desejam acessar o Website_X na The_Internet ao mesmo tempo. Os IPs e as portas do Host_AO pacote será:

Fonte IP: Host_A 's IP privado
Porta de origem: Uma porta no Host_A
Destino IP: Website_X ' s público / IP exclusivo
Destination Port: Um porto em que Website_X servidor 's está a ouvir

e da mesma maneira para um pacote vindo do Host_B .
Se o IP de origem não for alterado, o Website_X responderá a um endereço IP privado, ou seja, não exclusivo, e, portanto, o pacote nunca poderá encontrar seu caminho de volta. Para resolver esse problema, o roteador verifica se um de seus endereços IP exclusivos conectados ao The_Internet não está sendo usado. Se for esse o caso, ele faz o seguinte mapeamento:

Host_A 's privada IP ======= Router's_unique_IP_K

e agora o pacote iniciado a partir do Host_A, indo para o Website_X e agora deixando a interface do roteador conectado ao The_Internet , terá o formato:

Fonte IP: Router's_unique_IP_K
Porto Fonte: A porta na Host_A
Destino IP: Website_X 's público / IP exclusivo
Destination Port: Porta A, onde Website_X ' servidor s está ouvindo

Assim, você pode entender que há uma associação individual entre IPs privados e IPs públicos. Portanto, quando um pacote chega do Website_X ao roteador , essa associação é verificada e o endereço IP de destino é alterado novamente para o privado e entregue com êxito no host certo.
Como você pode ver, esse método é bastante simples, mas tem uma grande desvantagem: cada host privado precisa ter um endereço IP exclusivo reservado, o que é caro, portanto, optamos por ter menos endereços IP exclusivos do que os hosts na rede privada. Portanto, se todos os hosts privados tentarem acessar The_Internet ao mesmo tempo, apenas um subconjunto deles será igual ao número de endereços IP públicos disponíveis que o roteadortem, terá acesso e o restante será negado.
Para combater isso, criamos o PAT .

PAT
PAT é o que a grande maioria de nossos roteadores domésticos está usando. A limitação básica é que o roteador possui um único endereço IP único com o qual se conecta ao The_Internet , mas ainda queremos permitir que vários hosts da rede privada acessem o The_Internet ao mesmo tempo.
A maneira como fazemos isso é "semelhante" à maneira como o NAT o faz com uma diferença importante: em vez de o roteador possuir um conjunto de endereços IP, ele possui um conjunto de números de porta. Mais precisamente, um pacote que chega ao roteador do Host_A no Private_Network destinado ao Website_X noA Internet terá o seguinte formato:

Fonte IP: Host_A 's IP privado
Porta de origem: Uma porta no Host_A
Destino IP: Website_X ' s público / IP exclusivo
Destination Port: Um porto em que Website_X servidor 's está a ouvir

Agora o roteador fará duas tarefas:

  1. Ela vai mudar o IP de origem para o Router público exclusivo de IP E
  2. Ele mudará a porta de origem para uma porta de um pool que o roteador está mantendo e ainda não está sendo usado, por exemplo, Port_Z

e agora o pacote iniciado a partir do Host_A, indo para o Website_X e agora deixando a interface do roteador conectado ao The_Internet , terá o formato:

IP Fonte: Router's_unique_IP_K
Porto Fonte: Port_Z
Destino IP: Website_X 's público / IP exclusivo
Destination Port: Porta A, onde Website_X ' servidor s está ouvindo

e o roteador manterá o seguinte mapeamento:

IP privado do Host_A E uma porta no Host_A ======= Port_Z

Por que isso funciona?
Agora, quando um pacote volta, o roteador simplesmente verifica o número da porta de destino e altera o endereço IP de destino e o número da porta de destino de acordo com o mapeamento mencionado anteriormente, e o pacote é entregue com êxito.

E se eu executar vários aplicativos no mesmo host?
Aplicativos diferentes terão portas diferentes, por definição, portanto serão mapeados para uma porta diferente do roteador .

E se vários Hosts tentarem acessar The_Internet ao mesmo tempo e todos usarem o mesmo aplicativo?
Hosts diferentes terão diferentes endereços IP privados, por definição, portanto serão mapeados para uma porta diferente do roteador .

O PAT está se equilibrando perigosamente em um espaço cinza da camada cruzada. Os números de porta fazem parte do Protocolo de Transporte, enquanto os Roteadores podem operar até o Protocolo da Internet. Então, tecnicamente falando, é algo que não é permitido pelos protocolos. Portanto, existem, pelo menos teoricamente, perigos em potencial: o pool de portas é limitado. Portanto, se minha rede privada consistir em 1000 hosts e cada um estiver executando aplicativos port_pool / 10, a tabela de mapeamento no roteador ficará sem entradas disponíveis e o acesso aos aplicativos será negado.

Essa resposta excedeu em muito o comprimento pretendido, mas espero que tenha sido útil.

George
fonte
2
Algumas notas: Primeiro, você está usando o termo "NAT" para se referir ao que os RFCs chamam de "NAT básico" e "PAT" para se referir ao que os RFCs chamam de "NAPT". Os RFCs geralmente usam "NAT" como um termo genérico que abrange "NAT básico" e "NAPT". Em segundo lugar, mesmo o "NAT básico" precisa modificar o cabeçalho TCP / UDP porque o cabeçalho TCP / UDP contém uma soma de verificação que cobre os endereços IP.
Peter Green
@ PeterGreen, mas a essência da resposta é precisa?
lpydawa
6

O roteador sabe onde os pacotes pertencem porque se The router saves ... an address translation table.lembra de quais traduções de endereços dentro e fora foram feitas. Como tal, um endereço interno é igual a um endereço externo e o destino da Internet é irrelevante. Evidentemente, isso ignora o firewall presente em praticamente todos os roteadores NAT, que rastreiam as conexões completas:

(inside) src:ip+port,dst:ip+port <-> (outside) src:ip+port,dst:ip+port

O NAT pode alterar qualquer combinação de ip e / ou porta.

# 3 é um assunto completamente diferente: falsificação

# 4 "NAT estático", ou "1 para 1", é um mapa apenas de endereço. Portanto, a porta (e até o protocolo: tcp, udp, gre, etc.) é irrelevante.

Ricky Beam
fonte
2) E se outros computadores na LAN estiverem conectados ao mesmo servidor? Como o NAT sabe qual pacote deve "voltar" para onde?
user2449761
1 e 2 são a mesma resposta: porque está rastreando conexões / traduções. Dois hosts internos não serão mapeados para o mesmo endereço externo; portanto, qualquer pacote que chegue a um endereço externo mapeado terá automaticamente apenas um destino interno. Se você tiver apenas um fora de endereço (público), então não é "NAT", mas PAT (tradução de porta)
Ricky feixe