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:
- Ela vai mudar o IP de origem para o Router público exclusivo de IP E
- 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.
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: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.
fonte