NAT – Network Address Translation O que é o NAT • Técnica que altera, em trânsito os endereços do cabeçalho dos datagramas IP – De forma a que a origem sob o ponto de vista do destinatário não seja a real – De forma a que o destino final seja uma máquina com endereço diferente do originalmente indicado pelo remetente • Viola uma regra fundamental assumida na criação do TCP/IP daí criar complicações! 24-05-2013 ISEL/DEETC/SRT 2 Termos usados • NATBox – Router com funcionalidades de NAT • Inbound – Sentido do tráfego da Internet para rede atrás da NATBox • Outbound – Sentido do tráfego da rede atrás da NATBox para a Internet • Endereço pré-NAT – Endereço antes de sofrer a conversão imposta pelo processo de NAT • Endereço pós-NAT – Endereço resultante da aplicação do processo de NAT 24-05-2013 ISEL/DEETC/SRT 3 Porquê NAT • Motivação principal – Escassez de endereços devido ao desperdício de endereços na atribuição clássica por classes a cada entidade e do consumo desproporcional praticado por muitas entidades – A limitação de os ISPs fornecerem aos clientes residenciais apenas um endereço IP por ligação e os clientes terem hoje em dia muitos equipamentos com necessidade de conectividade • Múltiplos PCs/MACs, PDAs, Playstations, MediaCenters, telefones IP, etc 24-05-2013 ISEL/DEETC/SRT 4 Outras aplicações de NAT • Na distribuição de serviço por diversas máquinas, em processos de balanceamento de carga (SLB) – Escalabilidade e disponibilidade • Na compatibilização de redes que necessitem de se juntar apesar de terem planos de endereçamento sobrepostos – Double NAT • Permitir o acesso público a serviços disponibilizados por máquinas com endereçamento privado – Mapeamentos estáticos de NAT 24-05-2013 ISEL/DEETC/SRT 5 Variantes de NAT – IP estático • Estático ao nível do IP – Estáticamente é definido um mapeamento entre o endereço IP original (origem ou destino) e o final • Quando o tráfego atravessa a NATbox num sentido, o endereço original é substituído pelo final, no sentido contrário é realizada a substituição inversa 24-05-2013 ISEL/DEETC/SRT 6 Variantes de NAT – TCP/UDP estático • Estático ao nível da camada de transporte – Estaticamente é definido um mapeamento entre o par formado pelo endereço IP original e porto original e o IP/porto final (pós NAT) • Quando o tráfego atravessa a NATBox num sentido, se o protocolo nível 4, o endereço IP e porto destino são os do mapeamento definido, o endereço e porto destino são substituídos pelos indicados no mapeamento. No sentido contrário é realizada a substituição inversa, aplicada agora ao endereço origem 24-05-2013 ISEL/DEETC/SRT 7 Variantes de NAT – IP dinâmico • Dinâmico ao nível do IP – Processo idêntico ao da vertente estática, com a diferença de o endereço pósNAT não estar previamente definido, indo sendo dinamicamente alocado a partir de um bloco (pool) de endereços 24-05-2013 ISEL/DEETC/SRT 8 Variantes de NAT – TCP/UDP dinâmico • Dinâmico ao nível da camada de transporte – Processo idêntico ao da vertente estática, com o endereço pós- NAT a ser ou não alocado a partir de um bloco, podendo agora o porto não condicionado pelo mapeamento ser também potencialmente alterado para um valor diferente do original (o sistema escolhe) 24-05-2013 ISEL/DEETC/SRT 9 Necessidade de manter contexto • Dependente da variante de NAT usada e da implementação particular de NAT, diferentes níveis de contexto são necessários para fazer a associação do tráfego de retorno ao original – Variantes estáticas, dispensam a manutenção de contexto 24-05-2013 ISEL/DEETC/SRT 10 Um só endereço representando muitos, como? • A vertente mais comum de NAT é usada na partilha de um único endereço IP exterior por múltiplas máquinas, cada uma com o seu endereço individual interno – A informação necessária para realizar o mapeamento do tráfego de volta (inbound) é mantida no porto origem pós-NAT que se tem de manter único 24-05-2013 192.0.0.1 192.0.0.1:80->193.137.221.128:1024 192.0.0.1:80->193.137.221.128:5001 193.0.0.1 193.0.0.1:80->193.137.221.128:1025 IP Ext: 193.137.221.128 NAT Box 192.168.0.1 192.168.0.1:1024->192.0.0.1:80 IP Int: 192.168.0.254/24 192.168.0.2 192.168.0.3 192.168.0.2:1024->192.0.0.1:80 192.168.0.2:1025->193.0.0.1:80 NAT Translations Proto InsideIP:Port -> OutsideIP:Port => LocalPubIP:Port -> OutsideIP:Port Expires TCP 192.168.0.1:1024->192.0.0.1:80 => 193.137.221.128:1024->192.0.0.1:80 00:01:10 TCP 192.168.0.2:1024->192.0.0.1:80 => 193.137.221.128:5001->192.0.0.1:80 00:01:20 TCP 192.168.0.3:1025->193.0.0.1:80 => 193.137.221.128:1025->193.0.0.1:80 00:01:25 ISEL/DEETC/SRT 11 Porquê usar endereços privados atrás de NAT? • Se se usar uns quaisquer, pode acontecer ter-se necessidade de comunicar com a rede que os usa legalmente e não se consegue, porque todas as máquinas da nossa rede assumem que conseguem falar directamente com as máquinas da “sua” rede. • Usar os blocos de endereços Private Networks (RFC1918) para endereçar as redes internas – 10.0.0.0/8 – 1 Classe A – 172.16.0.0/12 – 16 Classes B – 192.168.0.0/16 – 256 Classes C 24-05-2013 ISEL/DEETC/SRT 12 O custo da transparência do NAT • • • • Recalculo de checksums Alteração de campos dos cabeçalhos Ajuste das mensagens de erro ICMP Manutenção de tabelas de mapeamento estáticas e dinâmicas 24-05-2013 ISEL/DEETC/SRT 13 Implementação de NAT • Campos dos cabeçalhos a alterar – Time To Live e Checksum – Já anteriormente eram ajustados como parte do processo de encaminhamento – Endereços Origem e/ou Destino – Segundo a aplicação de NAT pretendida – Portos Origem e/ou Destino – Dependendo da aplicação pretendida e da própria gestão do sistema • Manter quando possível, alterar para outro dentro da mesma gama quando necessário (gamas no NAT Cisco IOS: 0-511, 512-1023 e 1024-65535) – Checksum TCP/UDP – Sempre necessário devido à dependência deste dos endereços origem/destino provocada pelo uso de pseudoheaders no cálculo 24-05-2013 ISEL/DEETC/SRT 14 Pseudoheaders TCP/UDP Source Address (from IP Header) Destination Address (from IP Header) Reserved 0 • Protocol (from IP TCP Segment Length (computed) or UDP Length (from IP Header) Header) 8 16 24 TCP/UDP Pseudoheader O recalculo do checksum é realizado sobre o cabeçalho TCP/UDP, o pseudoheader respectivo e sobre os dados transportados – Impensável para volumes de tráfego elevados pela computação necessária e atraso provocado 24-05-2013 ISEL/DEETC/SRT 15 Transparência das mensagens de erro ICMP • As mensagens de erro ICMP (unrechables, TTL expired, etc.) são recebidas pela NATBox dirigidas ao endereço pós-NAT e contendo a amostra do cabeçalho IP + 8 Bytes do datagrama IP que a provocou – Há que fazer a associação desta à tabela de mapeamento NAT para saber para que endereço destino há-de ser alterada • Usando os endereços da amostra do cabeçalho original e os portos TCP/UDP ou algo que forneça contexto do protocolo em questão (ex. ICMP identifier/seq.number), contidos nos 8 bytes adicionais – Há que alterar a amostra da mensagem de erro, incluindo endereços, portos e checksums para que se mantenha a total transparência 24-05-2013 ISEL/DEETC/SRT 16 Impacto do NAT no funcionamento das aplicações • Aplicações que envolvem múltiplas ligações com parâmetros negociados no próprio protocolo não são suportadas sobre NAT directamente – As aplicações enviam os parâmetros sob o seu ponto de vista • FTP – No comando PORT indica ao servidor externo o seu IP “pré-NAT” com o qual ele não tem conectividade • Comunicações entre clientes que partilham, a algum nível dentro do domínio privado da rede, um equipamento realizando NAT – Algumas aplicações resolvem o problema usando um serviço de relay exterior para resolverem o problema – Com sérios problemas de escalabilidade (ex. MSN Messenger) • O funcionamento em válvula do NAT impossibilita em muitos casos as comunicações entre clientes atrás de NAT – X e Y podem fazer ligações para fora das suas redes (distintas), mas não se conseguem ligar entre si 24-05-2013 ISEL/DEETC/SRT 17 Soluções para os problemas levantados pelo NAT • Duas técnicas seguidas para se atingir a total transparência das aplicações numa das situações anteriores – A “NAT Box” intercepta e manipula o protocolo em questão durante o processo de NAT (tipicamente designado de fixup ou mangling) • Não é universal, só funciona para os protocolos que a “NAT Box” saiba manipular • Implica mais processamento, envolvendo em alguns casos a gestão adicional dos números de sequência TCP por o processo envolver o encurtar/alongar de segmentos • Interpretando o protocolo, são automaticamente inseridas as entradas na tabela de mapeamento NAT para se aceitarem as novas ligações negociadas – As aplicações usam técnicas/protocolos adicionais para se aperceberem da existência de NAT pelo meio, da forma como este está a ser realizado, de como as suas ligações são vistas do exterior e manipula na origem os parâmetros • Não resolve o problema da abertura dos mapeamentos NAT para as ligações adicionais • Mapeamento para aceitar ligações inbound conseguido à custa de datagramas sem conteúdo (keepalives) enviados de dentro (comum para UDP/VoIP) 24-05-2013 ISEL/DEETC/SRT 18 STUN – Simple Transversal of UDP over NAT • Protocolo usado para identificar a existência de NAT e o modo de funcionamento deste no percurso entre a máquina onde é executado o teste e determinado servidor STUN • Definido no RFC3489 • Protocolo muito usado como auxiliar do VoIP/SIP – Para experiências usar o WinSTUN 24-05-2013 ISEL/DEETC/SRT 19 Classificação de tipos de NAT para UDP (STUN) • Dependendo de que parâmetros são usados na NATBox para criar o contexto das ligações, validar e associar o tráfego inbound ao outbound, este terá algumas diferenças de comportamento com significado, especialmente na recepção de pacotes do exterior – Identificador completo • origin session, origin side, target session, target side – origin session – parâmetros do lado em que a ligação foi iniciada • source IP, source port, dest IP, dest port – target session – parâmetros vistos na interface de saída (pós-NAT) • source IP, source port, dest IP, dest port – Terminologia comum • Symmetric, Port Restricted Cone, Address Restricted Cone, Full Cone 24-05-2013 ISEL/DEETC/SRT 20 Tipos de NAT para UDP - Full Cone NAT • Todos os pedidos do mesmo endereço e porto internos são mapeados no mesmo endereço e porto externos. • Uma máquina externa pode enviar pacotes para uma interna, enviando-os para o endereço e porto externos mapeados. 24-05-2013 ISEL/DEETC/SRT 21 Tipos de NAT para UDP - Address Restricted Cone NAT • Todos os pedidos do mesmo endereço e porto internos são mapeados no mesmo endereço e porto externos. • Ao contrário do Full Cone NAT, uma máquina externa só pode enviar pacotes até uma interna se foi anteriormente o destino de pacotes enviados esta. 24-05-2013 ISEL/DEETC/SRT 22 Tipos de NAT para UDP - Port Restricted Cone NAT • Parecido ao Address Restricted Cone NAT, mas a restrição inclui agora também o porto. • Uma máquina externa só pode enviar pacotes até uma interna se foi anteriormente o destino dum pacote enviado por esta com o porto origem usado agora como destino. 24-05-2013 ISEL/DEETC/SRT 23 Tipos de NAT para UDP - Symmetric NAT • Pedidos do mesmo endereço e porto internos para determinado destino são mapeados num único IP e porto externos. Se a mesma máquina interna enviar um pacote com o mesmo endereço e porto para um destino diferente é usado um novo (diferente) mapeamento. • Só as máquinas exteriores que recebem pacotes das internas conseguem enviar pacotes de volta á máquina interna 24-05-2013 ISEL/DEETC/SRT 24 Hairpin • É definida como uma sessão de NAT com necessidades de Hairpin toda aquela que envolve dois equipamentos que partilham a algum nível um equipamento realizando NAT – Se não for suportada esta técnica, não é possível a comunicação directa entre equipamentos nesta situação – A “NAT Box” tem de identificar a situação e realizar virtualmente o duplo processo NAT envolvido, como se se tratasse de dois equipamentos isolados realizando NAT – Situação comum quando são encadeados múltiplos equipamentos realizando NAT dentro do domínio privado da rede e se recorre a servidores externos para rendez-vous (ex: Messengers, P2P, STUN/VoIP) 24-05-2013 ISEL/DEETC/SRT 25 Algoritmo STUN 24-05-2013 ISEL/DEETC/SRT 26 Relação entre protocolos comuns e NAT • • • • • • • • • • • • • Telnet SSH HTTP SMTP POP DNS SNMP FTP MSN Messenger VoIP/SIP IPSEC eDonkey2000 BitTorrent 24-05-2013 ISEL/DEETC/SRT 27 NAT vs Telnet, SSH, HTTP, SMTP ou POP • Todos estes protocolos são baseados em transporte TCP sendo suportados por uma única ligação originada do cliente para o servidor • Não têm qualquer problema no funcionamento sobre NAT 24-05-2013 ISEL/DEETC/SRT 28 NAT vs DNS • Sem problemas de maior • Tende a criar muitas entradas de contexto – Ajustar expiração para tempos razoáveis (5s a 10s ?) • Em ambientes com servidores acessíveis através de IPs internos e externos, via mapeamento estáticos – Necessário o uso de “split views” ou de modulo “helper” que ajuste os endereços dados aos clientes exterior • Quando perguntam ao DNS por XPTO.DOMINIO.PT (tipo “A”), os clientes internos obtêm o IP interno, os externos obtêm o Pós-NAT seja a diferença feita pelo servidor DNS ou por alteração do conteúdo das mensagens DNS na NATBox 24-05-2013 ISEL/DEETC/SRT 29 NAT vs SNMP • O SNMP funciona tipicamente sobre UDP com sequências de pedidos/respostas • Pormenores a ter em conta para a coexistência com NAT – Não existindo ligação (UDP) o contexto do pacote enviado é mantido durante determinado tempo na tabela de NAT até expirar • Ajustar para um valor consistente com os tempos espectáveis entre pedidos e respostas e pedidos seguintes para evitar rejeições indesejadas de respostas e o enchimento da tabela de mapeamento – Para aceitar TRAPs (alarmes assíncronos do agente) há que criar um mapeamento estático aceitando o tráfego de volta para o gestor, sendo assim, na maioria dos casos incompatível esta componente com o uso de múltiplos gestores – Como os pedidos chegarão aos agentes com o endereço origem pós-NAT, estes terão de ter incluído este endereço na lista de gestores autorizados, com o aspecto negativo adicional de esta permissão ser partilhada com todas as máquinas que reutilizem o endereço pós-NAT 24-05-2013 ISEL/DEETC/SRT 30 NAT vs FTP • FTP modo Activo só suportado com o uso de um módulo especializado (fixup) na NATBox para alterar o endereço e porto enviados no comando PORT, abrindo em simultâneo o canal/mapeamento para a ligação de dados iniciada pelo servidor • FTP modo Passivo mais fácil de suportar, não necessita de fixup na NATBox porque ambas as ligações (controlo e dados) são iniciadas pelo cliente – Se o fixup for dispensado, para funcionar tem de se aceitar ligações outbound de e para qualquer porto TCP acima de 1024 (inclusive) o que pode implicar abrir acesso a muitas outras aplicações indesejadas – Complica-se quando é o servidor que está atrás de NAT 24-05-2013 ISEL/DEETC/SRT 31 FTP modo Activo USER anonymous 331 Guest login ok, send your e-mail address as password. PASS NcFTP@ 230 Logged in anonymously. PORT 192,168,1,2,7,138 <= Ou o NAT sabe ajustar esta // mensagem e abrir o canal de volta ou não há ligação // O cliente pretende que o servidor se ligue ao seu porto // 1930 (7*256+138), e endereço 192.168.1.2 200 PORT command successful. LIST 150 Opening ASCII mode data connection for /bin/ls. // O servidor já fez a ligação 226 Listing completed. QUIT 221 Goodbye. 24-05-2013 ISEL/DEETC/SRT 32 FTP modo Passivo USER anonymous 331 Guest login ok, send your e-mail address as password. PASS NcFTP@ 230 Logged in anonymously. PASV // O cliente diz que quer usar modo passivo e pergunta // para onde deve ligar 227 Entering Passive Mode (192,0,1,4,204,173) // O servidor envia os dados. // Se o servidor está atrás de NAT também são válidos! LIST 150 Data connection accepted from 192.0.1.4:52397 // O cliente já se ligou ao endereço e porto (52397) // indicados pelo servidor 226 Listing completed. QUIT 221 Goodbye. 24-05-2013 ISEL/DEETC/SRT 33 NAT vs MSN Messenger • Para a vertente Chat não costumam existir problemas, o cliente inicia uma única ligação para um dos servidores centrais do sistema • Usa um protocolo semelhante a STUN (acessível em Tools->Options>Connection) para perceber que restrições tem cada utilizador (NAT e/ou firewalls) • O Chat utiliza sempre o servidor como relay • Para a transferência de ficheiros e sessões multimédia usa comunicações directas entre clientes, se não é possível usa o servidor como relay – Utilizadores na mesma rede atrás de NAT nem sempre transferem entre si os ficheiros usando o percurso mais eficiente! 24-05-2013 ISEL/DEETC/SRT 34 NAT vs VoIP/SIP (Session Initiation Protocol) • Por motivos de escalabilidade e qualidade do serviço o VoIP/SIP foi desenhado com uma estrutura peer-to-peer – A sinalização é agregada em softswitchs – Os fluxos multimédia podem ser agregados em relays/transcoders designados de mediaproxys ou serem directos entre clientes • O facto do protocolo correr na maioria dos casos sobre UDP facilita o atravessamento de NAT • Para coexistência pacifica os clientes usam STUN para detectar se têm e que forma têm de NAT entre eles e o servidor de referência 24-05-2013 ISEL/DEETC/SRT 35 NAT vs VoIP/SIP (Session Initiation Protocol) • Os clientes usam no corpo das mensagens de sinalização (SIP) os parâmetros pós-NAT para serem contactáveis do exterior • Após registo dos clientes (terminal VoIP), estes e o softswitch enviam periodicamente mensagens de keepalive para criar e manter os mapeamentos nas NATBox • Dado o número de factores envolvidos no processo, ocorrem frequentemente incompatibilidades que são na maioria dos casos solucionáveis com o ajuste de parâmetros • É possível a coexistência com todas as formas de NAT identificadas pelo STUN excepto Symmetric NAT devido à dispersão de endereços e portos realizada por esta técnica • Para que seja possível o fluxo directo do tráfego multimédia entre terminais atrás de uma NATBox comum é normalmente necessário o suporte de hairipin na NATBox 24-05-2013 ISEL/DEETC/SRT 36 NAT vs IPsec • Pouco compatíveis devido a dependências diversas – As NATBox não conseguem actualizar os checksums do UDP/TCP • Estão cifrados dentro do envelope ESP (modo transporte) – Não se conseguem multiplexar fluxos de dados IPsec, não existem cabeçalhos visíveis • SPI e o endereço destino não servem pois o contexto é simplex (são usados diferentes SPI em cada um dos sentidos). SPI não pode ser alterado em caso de colisão de valores pois está protegido pelo HMAC à cauda do pacote – O porto de IKE (500) usado por algumas implementações não pode ser alterado • Algumas implementações descartam estas mensagens se o porto origem não for o standard – Os mapeamentos de NAT do IKE/UDP expiram • As mensagens de IKE não são frequentes e após o mapeamento expirar deixa-se de se conseguir receber mensagens – As mensagens IKE contêm endereços internamente • Ao sofrer NAT o endereço do cabeçalho IP fica inconsistente com o do corpo da mensagem sendo rejeitada e abortada a negociação 24-05-2013 ISEL/DEETC/SRT 37 NAT vs IPsec • Recentemente definido um modo (NAT-T) – – – – – – Transporta o ESP sobre UDP Flexibiliza regras (ex. portos válidos) Cabeçalho IKE modificado para evitar incompatibilidade O protocolo inclui a detecção de NAT no percurso para coexistência Menos eficiente já que o overhead cresce substancialmente O modo tunnel foi adaptado para ser possível a multiplexagem de diversas ligações sobre NAT 24-05-2013 ISEL/DEETC/SRT 38 NAT vs eDonkey2000 • Liga-se a um servidor de rendez-vous por TCP ou UDP • Por questões de fairness, o sistema limita em muito as funcionalidades disponibilizadas a clientes aos quais não consegue ligar de volta (para o porto indicado pelo cliente) - (LowID!) – Tenta promover a simetria produtor/consumidor em cada utilizador para evitar o desequilíbrio que limita a escalabilidade do protocolo – Necessário fixup na NATBox (não há pressão dos grandes compradores de equipamentos para que seja suportado!) para abertura automática do porto para recepção das ligações dos outros clientes • Usar mapeamento estático de portos para encaminhar os pedidos para a máquina interna – Para suporte de múltiplos clientes internos há que usar um porto diferente de entrada para cada com os respectivos mapeamentos estáticos de NAT 24-05-2013 ISEL/DEETC/SRT 39 NAT vs BitTorrent • Idêntico ao anterior com a diferença de se complicar o mapeamento de portos pois utiliza uma gama deles (default 6881-6889) por aplicação/máquina. Ilustração das ligações TCP possíveis quando existe NAT (caixa azul) do lado dos clientes. As ligações a vermelho não conseguem estabelecer-se, as a verde conseguem Situações sem e com mapeamento estático de portos no sentido inbound 24-05-2013 ISEL/DEETC/SRT 40 Referências • Operating Principles and General Behavioral Requirements for Network Address Translators (BEH-GEN) • • Cisco - NAT Frequently Asked Questions, Document ID: 26704 NAT Classification Test Results • RFC2428 - FTP Extensions for IPv6 and NATs B. Ford - M.I.T., P. Srisuresh - Caymas Systems, S. Sivakumar - Cisco Systems - May 2005 C. Jennings - Cisco Systems - July 16, 2005 M. Allman - NASA Lewis/Sterling Software, S. Ostermann - Ohio University, C. Metz - The Inner Net, September 1998 http://www.faqs.org/rfcs/rfc1631.html http://www.faqs.org/rfcs/rfc2663.html http://www.ietf.org/rfc/rfc2993.txt http://www.networksorcery.com/enp/rfc/rfc3489.txt http://www.networksorcery.com/enp/protocol/stun.htm http://www.cisco.com/warp/public/556/5.html http://www.cisco.com/en/US/tech/tk648/tk361/tk438/tsd_technology_support_sub-protocol_home.html http://en.wikipedia.org/wiki/Network_address_translation http://en.wikipedia.org/wiki/STUN http://tools.ietf.org/html/rfc3489 http://slacksite.com/other/ftp.html http://www.ncftp.com/ncftpd/doc/misc/ftp_and_firewalls.html http://www.microsoft.com/technet/community/columns/cableguy/cg0802.mspx http://www.kazaa.com/us/help/glossary/p2p.htm http://userpages.umbc.edu/~hamilton/btclientconfig.html http://www.voip-info.org/wiki/view/NAT+and+VOIP http://www.voip-info.org/wiki-Asterisk+SIP+NAT+solutions http://www.snom.com/whitepapers/FAQ-03-10-20-cs.pdf 24-05-2013 ISEL/DEETC/SRT 41