Este documento explica como a Tradução de Endereço de Rede (NAT) gerencia fragmentos do Internet Control Message Protocol (ICMP) quando você configura a sobrecarga da NAT. Para obter informações sobre sobrecarga da NAT, consulte NAT FAQ.
O tratamento dos fragmentos ICMP depende do estado da tabela de conversão NAT e da ordem em que o roteador NAT recebe os fragmentos ICMP. Observe os três casos diferentes nos quais enviados dois pings de 172.16.0.1 até 172.17.1.2 com comprimento de 3600 bytes cada (três fragmentos IP).
Não existem requisitos específicos para este documento.
Este documento não se restringe a versões de software e hardware específicas.
For more information on document conventions, refer to the Cisco Technical Tips Conventions.
Nesse cenário, observamos o NAT criar uma entrada de tradução totalmente estendida na tabela de tradução. Feito isso, e se não houver mais nenhum outro endereço utilizável no conjunto de NAT, este descartará qualquer fragmento recebido antes do primeiro fragmento 9fragmento 0) de um pacote.
Quando iniciamos, apenas um endereço no pool executa a sobrecarga; a tabela de tradução NAT está vazia; e a configuração de NAT é exibida como:
ip nat pool POOL1 10.10.10.3 10.10.10.3 prefix-length 24 ip nat inside source list 5 pool POOL1 overload access-list 5 permit 172.16.0.0 0.0.0.31
Vejamos o que acontece quando os pacotes começam a chegar ao roteador NAT.
O fragmento 0 do pacote 1 chega e o NAT cria uma entrada de conversão totalmente estendida. Em seguida, o NAT converte e encaminha o fragmento 0 do pacote 1. A tabela de tradução agora é exibida como:
Pro Inside global Inside local Outside local Outside global icmp 10.10.10.3:24320 172.16.0.1:24320 172.17.1.2:24320 172.17.1.2:24320
Observe o número 24320 na tabela de conversão acima. É o valor de identificação ICMP incluído no cabeçalho ICMP do datagrama IP. Somente o fragmento 0 do datagrama de IP contém esse cabeçalho ICMP. Para determinar se vários fragmentos são parte do mesmo pacote, o NAT precisa rastrear o valor de identificação do IP, localizado no cabeçalho de IP de todos os fragmentos do datagrama de IP original. Se vários fragmentos tiverem o mesmo valor de identificação IP que o fragmento 0, que criou a tradução estendida, o NAT converte esses fragmentos usando a mesma entrada de tradução estendida. Consulte o RFC 791 para obter mais informações sobre o campo de identificação IP. Consulte o RFC 792 para obter mais informações sobre o campo de identificação do ICMP.
Pacote 1 fragmento 2 e pacote 1 fragmento 1 chegam. Como esses fragmentos fazem parte do mesmo pacote que contém o fragmento 0 (que criou a tradução), o NAT usa a entrada de tradução acima para traduzir e encaminhar esses fragmentos. O dispositivo de destino recebe todos os fragmentos do pacote 1 e envia uma resposta.
Chega o fragmento 1 do pacote 2. Como esse é um novo pacote, seu valor de IP ID não corresponde a nada que foi gravado pelo NAT. Portanto, o NAT não pode usar a tradução existente. Também não pode criar uma nova tradução, pois já possui uma entrada de tradução totalmente estendida e não tem a identidade ICMP para criar uma outra. O NAT descarta o fragmento 1 do pacote 2.
Chega o fragmento 0 do pacote 2. O NAT pode usar a tradução acima, desde que o identificador ICMP coincida. (Todos os pings em um único conjunto de pings usam o mesmo número de identificação ICMP.) Neste ponto, o NAT registra o IP ID desse pacote. NAT converte e encaminha o pacote 2 de fragmento 0.
O pacote 2 fragmento 2 chega. A NAT pode usar a conversão descrita acima, uma vez que seu valor de identificação do IP corresponde à NAT registrada no passo anterior. NAT converte e encaminha o pacote 2 de fragmento 2. O dispositivo de destino recebe apenas o fragmento 0 e 2 (o fragmento 1 está ausente) e, portanto, não envia resposta.
Neste cenário, vemos que se fragmentos diferentes do primeiro fragmento (fragmento 0) chegarem primeiro, o NAT cria uma tradução simples, desde que haja um endereço no pool NAT que ainda não tenha sido usado em uma tradução totalmente estendida.
Quando iniciamos, há apenas um endereço no pool NAT, a tabela de conversão NAT está vazia e a configuração aparece como:
ip nat pool POOL1 10.10.10.3 10.10.10.3 prefix-length 24 ip nat inside source list 5 pool POOL1 overload access-list 5 permit 172.16.0.0 0.0.0.31
Chega o fragmento 1 do pacote 1. O NAT não pode criar uma conversão totalmente estendida na tabela de conversão porque ele não tem as informações de identificação do ICMP neste fragmento. No entanto, como não há traduções totalmente estendidas em vigor, o NAT insere uma tradução simples. Em seguida, o NAT converte e encaminha o fragmento 1 do pacote 1. A entrada de tradução aparece como:
Pro Inside global Inside local Outside local Outside global --- 10.10.10.3 172.16.0.1 --- ---
Chega o fragmento 0 do pacote 1. Como a informação de identificação de ICMP está inclusa nesse fragmento, o NAT insere uma entrada de conversão totalmente estendida:
Pro Inside global Inside local Outside local Outside global --- 10.10.10.3 172.16.0.1 --- --- icmp 10.10.10.3:24321 172.16.0.1:24321 172.17.1.2:24321 172.17.1.2:24321
Em seguida, o NAT registra as informações de identificação de IP e converte e encaminha o fragmento 0 do pacote 1.
Chega o fragmento 1 do pacote 2. Como esse fragmento tem as mesmas informações de identificação de IP que o NAT registrou na etapa 2, o NAT usa a tradução totalmente estendida para converter e encaminhar o fragmento 2 do pacote 1.
O dispositivo de destino recebe todos os fragmentos e responde. Neste ponto, todos os pings ocorreram até a tabela de conversão NAT ser limpa ou o tempo for esgotado.
Neste cenário, vemos que se fragmentos diferentes do primeiro fragmento (fragmento 0) chegarem primeiro, o NAT cria uma tradução simples, desde que haja um endereço no pool NAT que ainda não tenha sido usado em uma tradução totalmente estendida. Se uma conversão estendida na tabela NAT já usa o endereço, você corre o risco de NAT converter cada um dos endereços origem do fragmento em um endereço diferente.
Quando começamos, mais de um endereço no pool NAT executa a sobrecarga, a tabela de conversão já tem uma tradução estendida em vigor, e a configuração é:
ip nat pool POOL1 10.10.10.3 10.10.10.5 prefix-length 24 ip nat inside source list 5 pool POOL1 overload access-list 5 permit 172.16.0.0 0.0.0.31
A tabela de tradução é exibida como:
Pro Inside global Inside local Outside local Outside global icmp 10.10.10.3:24322 172.16.0.1:24322 172.17.1.2:24322 172.17.1.2:24322
Chega o fragmento 1 do pacote 1. O NAT não pode criar uma entrada de tabela de tradução totalmente estendida, pois não tem as informações de identificação do ICMP neste fragmento, e não pode criar uma entrada de tradução simples para o endereço 10.10.10.3, pois há uma entrada estendida existente para esse endereço IP. O NAT seleciona o próximo endereço IP livre (10.10.10.4) e cria uma conversão simples. Em seguida, o NAT converte e encaminha o fragmento 1 do pacote 1. A tabela de tradução agora é exibida como:
Pro Inside global Inside local Outside local Outside global --- 10.10.10.4 172.16.0.1 --- --- icmp 10.10.10.3:24322 172.16.0.1:24322 172.17.1.2:24322 172.17.1.2:24322
Chega o fragmento 0 do pacote 1. Como as informações de identificação do ICMP estão incluídas nesse fragmento, a NAT insere uma entrada de conversão totalmente estendida para o endereço 10.10.10.3 e registra as informações de identificação do IP para esse pacote. Em seguida, o NAT converte e encaminha o fragmento 0 do pacote 1. A tabela de tradução agora é exibida como:
Pro Inside global Inside local Outside local Outside global --- 10.10.10.4 172.16.0.1 --- --- icmp 10.10.10.3:24322 172.16.0.1:24322 172.17.1.2:24322 172.17.1.2:24322 icmp 10.10.10.3:24323 172.16.0.1:24323 172.17.1.2:24323 172.17.1.2:24323
Chega o fragmento 1 do pacote 2. Como suas informações de identificação de IP coincidem com as informações registradas pela NAT no passo 2, a NAT usa a conversão completamente estendida criada no passo 2 para converter e encaminhar o fragmento 2 do pacote 2.
Nesse ponto, o dispositivo de destino recebe todos os fragmentos do pacote, mas o fragmento 0 e 2 tiveram seu endereço de origem convertido em 10.10.10.3 e o fragmento 1 foi convertido em 10.10.10.4. Portanto, o dispositivo de destino não pode reagrupar o pacote e não envia nenhuma resposta.
Chega o fragmento 0 do pacote 2. O NAT usa a tradução totalmente estendida acima ou cria uma nova tradução totalmente estendida, dependendo do valor do campo de identificação do ICMP de fragmento. Em ambos os casos, o NAT registra as informações de identificação do IP. Em seguida, o NAT converte e encaminha o fragmento 0 do pacote 2.
O pacote 2 fragmento 2 chega. Suas informações de identificação de IP correspondem ao que o NAT gravou na etapa 4, portanto, o NAT usa a segunda tradução totalmente estendida criada na etapa 4. NAT converte e encaminha o pacote 2 de fragmento 2.
Chega o fragmento 1 do pacote 2. Suas informações de identificação de IP correspondem ao que o NAT gravou na etapa 4, portanto, o NAT usa a segunda tradução totalmente estendida criada na etapa 4. NAT converte e encaminha o pacote 2 de fragmento 1.
O dispositivo de destino recebe, da mesma origem (10.10.10.3), todos os três fragmentos do pacote, então o remonta e responde.
O fato de uma NAT descartar ou encaminhar um fragmento de ICMP depende de inúmeras coisas, tal como a ordem em que o roteador da NAT recebe os fragmentos e o estado da tabela de conversão naquele momento. Sob certas condições, o NAT converte os fragmentos de forma diferente, o que torna impossível para o dispositivo de destino reagrupar o pacote.