NAT e PAT: uma explicação completa

A tradução de endereços de rede (NAT) é o processo de modificação de informações de endereços IP em cabeçalhos de pacotes IP enquanto em trânsito através de um dispositivo de roteamento de tráfego.

Existem dois tipos diferentes de NAT:

  • NAT
    • NAT estático: O tipo mais simples de NAT fornece uma tradução um-para-um de endereços IP. Também é frequentemente referido como NAT um-para-um. Neste tipo de NAT apenas os endereços IP, o checksum do cabeçalho IP e quaisquer checksums de nível superior que incluam o endereço IP precisam ser alterados. O resto do pacote pode ser deixado intocado (pelo menos para a funcionalidade TCP/UDP básica, alguns protocolos de nível mais alto podem precisar de mais tradução). NATs básicos podem ser usados quando houver a necessidade de interconectar duas redes IP com endereçamento incompatível. Com NAT estático, existem traduções na tabela de tradução NAT assim que você configura o(s) comando(s) NAT estático(s), e elas permanecem na tabela de tradução até que você apague o(s) comando(s) NAT estático(s).
    • NAT dinâmico: O NAT dinâmico tem algumas semelhanças e diferenças em relação ao NAT estático. Como o NAT estático, o roteador NAT cria um mapeamento um-a-um entre um endereço interno local e um interno global e muda os endereços IP nos pacotes à medida que eles saem e entram na rede interna. No entanto, o mapeamento de um endereço local interno para um endereço global interno acontece dinamicamente. O NAT dinâmico configura um pool de possíveis endereços globais internos e define critérios de correspondência para determinar quais endereços IP internos locais devem ser traduzidos com NAT. A entrada dinâmica permanece na tabela enquanto o tráfego flui ocasionalmente. Com NAT dinâmico, as traduções não existem na tabela NAT até que o roteador receba o tráfego que requer tradução. As traduções dinâmicas têm um timeout após o qual elas são purgadas da tabela de tradução.
  • PAT
    • PAT estático: As traduções PAT estáticas permitem que uma porta UDP ou TCP específica em um endereço global seja traduzida para uma porta específica em um endereço local. PAT estático é o mesmo que NAT estático, exceto que ele permite especificar o protocolo (TCP ou UDP) e a porta para os endereços reais e mapeados. O PAT estático permite que você identifique o mesmo endereço mapeado em muitas instruções estáticas diferentes, desde que a porta seja diferente para cada instrução. Você não pode usar o mesmo endereço mapeado para várias instruções NAT estáticas. Com o PAT estático, existem traduções na tabela de tradução NAT assim que você configura o(s) comando(s) PAT estático(s), e elas permanecem na tabela de tradução até que você apague o(s) comando(s) PAT estático(s).
    • NAT Overload ou PAT: É comum esconder todo um espaço de endereços IP, geralmente consistindo de endereços IP privados, atrás de um único endereço IP (ou em alguns casos um pequeno grupo de endereços IP) em outro espaço de endereços (geralmente público). Este tipo de NAT é chamado de PAT em sobrecarga. A entrada dinâmica permanece na tabela enquanto o tráfego flui ocasionalmente. Com PAT em sobrecarga, as traduções não existem na tabela NAT até que o roteador receba o tráfego que requer tradução. As traduções têm um timeout após o qual elas são purgadas da tabela de tradução.

Exemplo #1: NAT de origem estática

Como traduzir o endereço IP 172.16.0.5 para o endereço IP 10.16.0.5.

Definir o ip nat dentro:

Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside

Definir o ip nat fora:

Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside

Definir a entrada NAT estático:

ip nat inside source static 172.16.0.5 10.16.0.5

Com NAT estático, a tradução existe na tabela de tradução NAT assim que você configura o comando NAT estático, e ela permanece na tabela de tradução até que você apague o comando NAT estático:

Ciscozine#sh ip nat translationsPro Inside global Inside local Outside local Outside global--- 10.16.0.5 172.16.0.5 --- ---Ciscozine#

Se o cliente envia um pacote ICMP ou um pedido HTTP para o servidor web, a tabela nat será:

Ciscozine#sh ip nat translationsPro Inside global Inside local Outside local Outside globalicmp 10.16.0.5:1 172.16.0.5:1 10.0.0.100:1 10.0.0.100:1tcp 10.16.0.5:56080 172.16.0.5:56080 10.0.0.100:80 10.0.0.100:80--- 10.16.0.5 172.16.0.5 --- ---Ciscozine#

Remember: Como o endereço mapeado é o mesmo para cada conexão consecutiva com NAT estático, e existe uma regra de tradução persistente, NAT estático permite que hosts na rede de destino iniciem tráfego para um host traduzido (se existir uma lista de acesso que o permita).

Exemplo #2: NAT de origem dinâmica

Como traduzir a rede 172.16.0.0/28 na rede 10.16.0.0/29.

Definir o ip nat dentro:

Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside

Definir o ip nat fora:

Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside

Definir o pool nat usado na tradução NAT:

Ciscozine(config)#ip nat pool dynamic-ip 10.0.16.1 10.0.16.6 prefix-length 29

Definir qual rede será traduzida:

Ciscozine(config)#ip access-list standard client-listCiscozine(config-std-nacl)#permit 172.16.0.0 0.0.0.15

Definir a fonte dinâmica NAT:

Ciscozine(config)#ip nat inside source list client-list pool dynamic-ip

Com NAT dinâmico, as traduções não existem na tabela NAT até que o roteador receba o tráfego que requer tradução.

Ciscozine#sh ip nat translationsCiscozine#

mas quando alguns pacotes correspondem à ACL..

Ciscozine#sh ip nat translations Pro Inside global Inside local Outside local Outside globalicmp 10.0.16.1:2 172.16.0.1:2 10.0.0.100:2 10.0.0.100:2tcp 10.0.16.2:35694 172.16.0.2:35694 10.0.0.100:80 10.0.0.100:80tcp 10.0.16.1:56185 172.16.0.1:56185 10.0.0.100:80 10.0.0.100:80--- 10.0.16.1 172.16.0.1 --- ------ 10.0.16.2 172.16.0.2 --- ---Ciscozine#

Nota: Se um novo pacote chega de mais um host interno, e ele precisa de uma entrada NAT, mas todos os endereços IP agrupados estão em uso, o roteador simplesmente descarta o pacote.

Isso pode ser verificado habilitando o “debug ip nat”.

Feb 12 19:26:09.895: NAT: translation failed (E), dropping packet s=172.16.0.5 d=10.0.0.100

O usuário deve tentar novamente até que uma entrada NAT seja lançada, momento em que a função NAT funciona para a próxima máquina que enviar um pacote. Essencialmente, o pool global interno de endereços precisa ser tão grande quanto o número máximo de hosts simultâneos que precisam usar a Internet ao mesmo tempo – a menos que utilizemos PAT.

Remember: A principal diferença entre NAT dinâmico e um intervalo de endereços para NAT estático é que o NAT estático permite que um host remoto inicie uma conexão com um host traduzido (se existir uma lista de acesso que o permita), enquanto o NAT dinâmico não o permite. Você também precisa de um número igual de endereços mapeados como endereços reais com NAT estático.

Exemplo #3: Static PAT

Como expor dois serviços diferentes na Internet:

  1. O servidor Web (172.16.0.5) está ouvindo na porta tcp 80; este servidor responde no endereço público 88.88.88.88:80 da Internet (fora).
  2. O servidor SSH (172.16.0.6) está ouvindo na porta tcp 22; este servidor responde no endereço público 88.88.88.88:666 a partir da Internet (fora) .

Definir o ip nat dentro:

Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside

Definir o ip nat fora:

Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside

Definir o PAT estático:

O servidor web responde na porta tcp 80 na interface ‘fora’.

ip nat inside source static tcp 172.17.0.5 80 88.88.88.88 80

O servidor SSH responde na porta tcp 666 na interface ‘externa’; neste caso, a porta real (22 tcp) é traduzida para a porta tcp 666 quando um pedido vem da Internet.

ip nat inside source static tcp 172.17.0.6 22 88.88.88.88 666

Tal como o NAT estático, a tradução PAT estática existe na tabela de tradução NAT assim que você configura o comando PAT estático, e ela permanece na tabela de tradução até que você apague o comando PAT estático.

Ciscozine#sh ip nat translations Pro Inside global Inside local Outside local Outside globaltcp 88.88.88.88:80 172.16.0.5:80 --- ---tcp 88.88.88.88:666 172.16.0.6:22 --- ---Ciscozine#

Se um cliente de Internet envia um pedido HTTP ou uma conexão SSH (na porta tcp 666), a tabela nat será:

Ciscozine#sh ip nat translations Pro Inside global Inside local Outside local Outside globaltcp 88.88.88.88:80 172.16.0.5:80 56.56.56.56:54686 56.56.56.56:54686tcp 88.88.88.88:80 172.16.0.5:80 --- ---tcp 88.88.88.88:666 172.16.0.6:22 56.56.56.56:33704 56.56.56.56:33704tcp 88.88.88.88:666 172.16.0.6:22 --- ---Ciscozine#

Exemplo #4: PAT – NAT Overload

Como compartilhar uma conexão de Internet.

>

Definir o ip nat dentro:

Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside

Definir o ip nat fora:

Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside

Definir qual rede será traduzida:

Ciscozine(config)#ip access-list standard client-listCiscozine(config-std-nacl)#permit 172.16.0.0 0.0.0.255

Definir a sobrecarga de NAT:

Ciscozine(config)#ip nat inside source list client-list interface fastethernet0/1 overload

Como NAT dinâmico, as traduções não existem na tabela NAT até que o roteador receba o tráfego que requer tradução:

Ciscozine#sh ip nat translationsCiscozine#

mas quando alguns pacotes combinam com a ACL..

Ciscozine#show ip nat translationsPro Inside global Inside local Outside local Outside globaltcp 88.88.88.88:7921 172.16.0.2:7921 95.100.96.233:443 95.100.96.233:443tcp 88.88.88.88:8651 172.16.0.5:8651 173.194.44.18:80 173.194.44.18:80tcp 88.88.88.88:8652 172.16.0.111:8652 173.194.44.18:443 173.194.44.18:443tcp 88.88.88.88:8653 172.16.0.223:8653 173.194.70.84:443 173.194.70.84:443udp 88.88.88.88:64116 172.16.0.222:64116 8.8.8.8:53 8.8.8.8:53udp 88.88.88.88:64756 172.16.0.223:64756 8.8.4.4:53 8.8.4.4:53Ciscozine#

Existem outros tipos de NAT/PAT?

A resposta é SIM! Um tipo de NAT/PAT amplamente utilizado é o ip nat de origem externa; este comando permite traduzir o endereço de origem de um pacote que entra na interface ‘externa’ e deixa a interface ‘interna’.

Em termos simples, se você ver o primeiro exemplo #1

O comando:

ip nat outside source static 10.0.0.100 192.168.0.100

traduzir a 10.0.0.100 para a 192.168.0.100 , então o cliente deve chamar a 192.168.0.100 endereço ip para contatar a web do servidor e não o 10.0.0.100.

Um outro tipo de nat particolar é o ip nat de destino interno usado quando múltiplos dispositivos internos são servidores idênticos com conteúdo espelhado, que por fora parecem ser um único servidor de balanceamento de carga.

Você define um pool de endereços contendo os endereços reais dos hosts terminando com “type rotary” tornando os servidores disponíveis de forma round-robin. A lista de acesso agora permite o endereço IP do host virtual, ou seja, o que o mundo exterior pensa que é o endereço do host. Então o host virtual é 123.123.123.132, com os hosts reais sendo 172.16.0.2 até 10.

Configuração parcial

interface FastEthernet0/0ip address 172.16.0.0 255.255.255.0ip nat inside!interface FastEthernet0/1ip address 88.88.88.88 255.255.255.252ip nat outside!ip nat pool real-ip-server 172.16.0.2 172.16.0.10 prefix-length 24 type rotaryip nat inside destination list 1 pool real-ip-server!ip route 0.0.0.0 0.0.0.0 FastEthernet0/1!access-list 1 permit 123.123.123.123

Esta tradução não é bi-direcional por natureza. Você terá que usar uma NAT estática de um para um para realizá-la. Um tipo de funcionalidade “ip nat dentro da fonte estática” pode ser obtida com a configuração acima usando um único endereço no pool NAT, mas isso só funcionaria para tráfego de fora para dentro.

Onde aplicar nat dentro/fora?

Tipicamente “ip nat inside” é configurado nas interfaces em seu ambiente local que não podem ser roteadas para a Internet (tipicamente uma faixa privada de endereços IP) e “ip nat outside” na interface que está conectada à Internet.

Quando o roteador realiza NAT?

Inside to Outside:

  1. Se IPSec então verificar lista de acesso de entrada
  2. decriptação – para CET (Tecnologia de Criptografia Cisco) ou IPSec
  3. verificar lista de acesso de entrada
  4. verificar limites de taxa de entrada
  5. contabilidade de entrada
  6. redireto para o cache da web
  7. roteamento de políticas
  8. roteamento
  9. NAT de dentro para fora (tradução local para global)
  10. crypto (verificar mapa e marcar para encriptação)
  11. verificar lista de acesso de saída
  12. inspectar (Contexto-Controle de Acesso baseado em CBAC)
  13. Intercepção PCC
  14. Encriptação
  15. Enfileiramento

Sair para Dentro:

  1. Se IPSec, verificar a lista de acesso de entrada
  2. decriptação – para CET ou IPSec
  3. verificar a lista de acesso de entrada
  4. verificar os limites da taxa de entrada
  5. contabilidade de entrada
  6. redireto para o cache da web
  7. NAT de fora para dentro (global para local tradução)
  8. roteamento de políticas
  9. roteamento
  10. cripto (verificar mapa e marcar para criptografia)
  11. verificar lista de acesso de saída
  12. inspeccionar CBAC
  13. intercepção do TCP
  14. encriptação
  15. Encryption
  16. Enfileiramento

alguns comandos úteis:

  • Para ver algumas estatísticas sobre NAT: mostrar estatísticas ip nat
  • Para ver uma lista completa das entradas estáticas/dinâmicas NAT/PAT: mostrar traduções ip nat
  • Para limpar a entrada dinâmica nat: limpar ip na tradução *
  • Para depurar NAT: depurar ip nat

Deixe uma resposta

O seu endereço de email não será publicado.