For TCP and UDP NAT users port info. For other protocols like ICMP it can use protocol specific tricks.
Bem, o mesmo TCP e UDP são também "truques específicos de protocolo" - eles realmente não são diferentes de "IDs de solicitação" de ICMP Echo, ou "SPIs" de IPsec. (NAT em si é um 'truque'.)
Can such a packet even leave the target interface? If so, what happens? Does the source IP just get changed?
Normalmente sim. A maioria dos NATs passará por tais pacotes mesmo que eles não reconheçam o protocolo interno, já que ele ainda tem uma chance maior de funcionar do que "soltar tudo".
What happens on the way back?
Depende de o NAT realmente rastrear o pacote de saída. (Isso varia.)
Mesmo que o NAT não entenda como extrair portas ou IDs do protocolo interno, ele ainda pode rastrear o tipo de protocolo , o que pode ser suficiente para algumas situações. (Cada pacote IP tem um campo de tipo de protocolo, então o que você chama de "IP bruto" é meramente um caso de "tipo de protocolo IP desconhecido").
Por exemplo, uma conexão TCP (protocolo IP 6) e um ping ICMP (protocolo IP 1, tipo ICMP 8) seriam rastreados como:
-
host 192.168.1.2 (as 42.0.2.1) → 62.205.132.12
,proto 6
,port 21445 → 80
-
host 192.168.1.2 (as 42.0.2.1) → 62.205.132.12
,proto 1
,type 8 code 0 id 1227
Enquanto isso, um protocolo não reconhecido, como um túnel 6in4 , seria rastreado como:
-
host 192.168.1.2 (as 42.0.2.1) → 62.205.132.12
,proto 41
,—
Portanto, todos pacotes do protocolo de entrada-41 seriam encaminhados de volta para 192.168.1.2
. Isso significa que um computador ainda pode falar o protocolo, mas provavelmente dois computadores não conseguiram. (Muito parecido com o UDP, alguns NATs também verificam o endereço IP de origem, mas muitos só se preocupam com protocolo & porta.)
Enquanto eu usei o 6in4 no exemplo acima, o mesmo também aconteceria com todos protocolos que o NAT não entende, mesmo que eles façam portas (eg UDP-Lite ou SCTP).
- Além disso: se o seu roteador executa o Linux, você pode executar
conntrack -L
oucat /proc/net/nf_conntrack
para ver todos os estados sendo rastreados atualmente. Alguns roteadores até mostram isso na interface da Web deles.
Finalmente, se o NAT não mantém nenhum estado, então o pacote é assumido como destinado ao próprio roteador (o mesmo que com qualquer outro pacote de entrada não rastreado), e normalmente caiu no chão.
Is it possible that a return packet can go to the wrong ip?
No caso mais simples, não. Ou o NAT pode associar o pacote de retorno a algum estado conhecido, ou não, mas ele não irá inventar aleatoriamente o lixo. (Geralmente.)
No entanto, se dois computadores atrás da rede local estiverem tentando falar o mesmo protocolo para o mesmo host remoto, seus estados podem entrar em conflito. Qual deles ganha pode variar - ou o estado mais antigo é usado até expirar (então as respostas para ambos os computadores continuam indo para o primeiro), ou eles continuam substituindo um ao outro em alguns momentos (isto é, flip-flops entre ambos). É uma situação em que o NAT dinâmico definitivamente não foi projetado para ...
Perhaps even all ips available?
Não. É possível em teoria - por ex. algumas pessoas fazem isso com configurações de encaminhamento de porta estática para o Wake-on-LAN - mas fazê-lo por padrão não seria muito útil. Se qualquer coisa, isso tornaria sua LAN mais vulnerável a pacotes falsificados.
(Embora, na verdade, é assim que funciona a comutação Ethernet - pacotes para MACs desconhecidos são inundados por todas as portas físicas.)
Como observação, isso não é específico para os NATs IPv4. O rastreamento de estado é parte integrante de um firewall com estado , usado tanto pelo IPv4 quanto pelo IPv6. Mesmo sem NAT / PAT, o rastreamento de estado também permite que o firewall aceite automaticamente todos os pacotes conhecidos e rejeite os desconhecidos.
Então, quando as pessoas afirmam que "NAT adiciona segurança", elas estão realmente falando sobre a configuração do firewall que geralmente vem com ele (e pode ser usada igualmente bem sem o NAT).