Este documento acompanha as etapas necessárias para reduzir os problemas que podem ocorrer com a fragmentação de um pacote. Um exemplo de problemas de fragmentação é a capacidade para fazer ping de um recurso em rede, mas a incapacidade de se conectar à mesma característica com um aplicativo específico, como e-mails ou bancos de dados.
Certifique-se de atender a estes requisitos antes de tentar esta configuração:
Conectividade entre pares VPN
Este documento não se restringe a versões de software e hardware específicas.
Este documento utiliza a seguinte configuração de rede:
Esta configuração também pode ser utilizada com estas versões de hardware e software:
Roteadores IOS
Dispositivos de segurança PIX/ASA
Consulte as Convenções de Dicas Técnicas da Cisco para obter mais informações sobre convenções de documentos.
O IP suporta um comprimento máximo de 65.536 bytes para um pacote IP, mas a maioria dos protocolos de camada de enlace de dados suporta um comprimento muito menor, chamado de unidade de transmissão máxima (MTU). Com base no MTU suportado, pode ser necessário quebrar (fragmentar) um pacote IP para transmiti-lo através de um tipo de mídia de camada de enlace de dados específico. O destino, então, tem que remontar os fragmentos de volta no pacote IP original e completo.
Quando você usa uma VPN para proteger dados entre dois pares de VPN, sobrecarga adicional é adicionada aos dados originais, o que pode exigir que a fragmentação ocorra. Esta tabela lista os campos que possivelmente precisam ser adicionados aos dados protegidos para suportar uma conexão VPN. Observe que vários protocolos podem ser necessários, o que aumenta o tamanho do pacote original. Por exemplo, se você usa uma conexão IPSEC L2L DMVPN entre dois roteadores Cisco em que um túnel GRE foi implementado, as seguintes informações adicionais são necessárias: ESP, GRE e o cabeçalho IP externo. Se você tiver uma conexão de cliente de software IPSec para um gateway VPN quando o tráfego passar por um dispositivo de endereço, você precisará dessa sobrecarga adicional para Network Address Translation- Traversal (NAT-T), bem como o cabeçalho IP externo para a conexão do modo de túnel.
Quando a origem envia um pacote a um destino, ela coloca um valor no campo de flags de controle dos cabeçalhos IP que afeta a fragmentação do pacote por dispositivos intermediários. O flag de controle tem três bits de comprimento, mas somente os dois primeiros são usados na fragmentação. Se o segundo bit for definido como 0, o pacote poderá ser fragmentado. Se ele for definido como 1, o pacote não poderá ser fragmentado. O segundo bit é normalmente chamado de bit Don't Fragment (DF). O terceiro bit especifica quando ocorre a fragmentação, se esse pacote fragmentado é ou não o último fragmento (definido como 0) ou se há mais fragmentos (definido como 1) que compõem o pacote.
Há quatro áreas que podem criar problemas quando a fragmentação é necessária:
Uma sobrecarga adicional nos ciclos de CPU e memória é exigida pelos dois dispositivos que executam a fragmentação e a remontagem.
Se um fragmento for descartado no caminho até o destino, o pacote não poderá ser remontado e o pacote inteiro deverá ser fragmentado e enviado novamente. Isso cria problemas adicionais de throughput, especialmente em situações onde o tráfego em questão é limitado por taxa e a origem envia tráfego acima do limite permitido.
A filtragem de pacotes e os firewalls stateful podem ter dificuldade para processar os fragmentos. Quando ocorre a fragmentação, o primeiro fragmento contém um cabeçalho IP externo, o cabeçalho interno, como TCP, UDP, ESP e outros, e parte do payload. Fragmentos subsequentes do pacote original contratam um cabeçalho IP externo e a continuação do payload. O problema com este processo é que alguns firewalls precisam ver as informações do cabeçalho interno em cada um dos pacotes para tomar decisões inteligentes de filtragem. Se essas informações não estiverem presentes, eles poderão inadvertidamente descartar todos os pacotes, com exceção do primeiro.
A origem no cabeçalho IP do pacote pode definir o terceiro bit de controle como não fragmentar, o que significa que, se um dispositivo intermediário receber o pacote e precisar fragmentá-lo, o dispositivo intermediário não poderá fragmentá-lo. Em vez disso, o dispositivo intermediário descarta o pacote.
A maioria das redes usa Ethernet, com um valor de MTU padrão de 1.500 bytes, que é normalmente usado para pacotes IP. Para descobrir se a fragmentação ocorre ou é necessária, mas não pode ser feita (o bit DF está definido), ative primeiro sua sessão VPN. Em seguida, você pode usar qualquer um desses quatro procedimentos para descobrir a fragmentação.
Faça ping em um dispositivo localizado na outra extremidade. Isso ocorre sob a suposição de que o ping é permitido através do túnel. Se houver êxito, tente acessar um aplicativo por meio do mesmo dispositivo. Por exemplo, se um servidor de Microsoft E-mail ou de Área de Trabalho Remota estiver do outro lado do túnel, abra o Outlook e tente baixar seus e-mails ou conectar remotamente ao servidor. Se isso não funcionar e você tiver a resolução de nome correta, há uma boa chance de que a fragmentação seja o problema.
Em um dispositivo Windows, execute C:\>ping -f -l packet_size_in_bytes destination_IP_address.
A opção -f é usada para especificar que o pacote não pode ser fragmentado. A opção -l é usada para especificar o comprimento do pacote. Primeiro tente isso com um tamanho de pacote de 1.500. Por exemplo, ping -f -l 1500 192.168.100. Se a fragmentação for necessária mas não puder ser executada, você receberá uma mensagem semelhante a: Packets need to be fragmented but DF set.
Nos roteadores Cisco, execute o comando debug ip icmp e use o comando extended ping. Se a mensagem ICMP:dst (x.x.x.x) fragmentation needed and DF set, unreachable sent to y.y.y.y, onde x.x.x.x é um dispositivo de destino e y.y.y.y é o seu roteador, for exibida, um dispositivo intermediário está informando que a fragmentação é necessária, mas como você ativou o bit DF na solicitação de echo, ele não pode executar a fragmentação para encaminhar o pacote para o próximo salto. Nesse caso, diminua gradualmente o tamanho de MTU dos pings até encontrar um que funcione.
Em Cisco Security Appliances, use um filtro de captura.
ciscoasa(config)#access-list outside_test permit tcp any host 172.22.1.1 eq 80
Nota:Quando a origem é definida como any, o administrador pode monitorar qualquer Network Address Translation (NAT).
ciscoasa(config)#access-list outside_test permit tcp host 172.22.1.1 eq 80 any
Nota:Quando as informações de origem e destino são invertidas, o tráfego de retorno pode ser capturado.
ciscoasa(config)# capture outside_interface access-list outside_test interface outside
O usuário precisa iniciar uma nova sessão com o aplicativo X. Depois que o usuário tiver iniciado uma nova sessão X do aplicativo, o administrador do ASA precisará executar o comando show capture outside_interface.
Há diferentes maneiras de resolver problemas com a fragmentação. Eles são discutidos nesta seção.
A configuração de MTU estática pode resolver problemas de fragmentação.
Alteração de MTU no roteador:
Observe que, se você definir manualmente o MTU no dispositivo, ele instrui o dispositivo, que atua como um gateway VPN, a fragmentar os pacotes recebidos antes de protegê-los e enviá-los pelo túnel. É preferível que o roteador proteja o tráfego e depois o fragmente, mas o dispositivo o fragmenta.
Aviso: se você alterar o tamanho da MTU em qualquer interface de dispositivo, todos os túneis terminados nessa interface serão desativados e reconstruídos.
Nos roteadores Cisco, use o comando ip mtupara ajustar o tamanho de MTU na interface onde a VPN é terminada:
router (config)# interface type [slot_#/] port_# router (config-if)# ip mtu MTU_size_in_bytes
Alteração de MTU no ASA/PIX:
Em dispositivos ASA/PIX, use o comando mtupara ajustar o tamanho da MTU no modo de configuração global. Por padrão, a MTU é definida como 1500. Por exemplo, se você tiver uma interface no Security Appliance com o nome Outside (onde a VPN é terminada) e tiver determinado (através das medidas listadas na seção Discover Fragmentation) que deseja usar 1380 como o tamanho do fragmento, use este comando:
security appliance (config)# mtu Outside 1380
O tamanho máximo do segmento TCP pode resolver problemas com fragmentação.
Nota:Este recurso funciona somente com o TCP. Os demais protocolos IP devem usar outra solução para os problemas de fragmentação. Mesmo que você defina o ip mtu no roteador , isso não afeta o que os dois hosts finais negociam dentro do handshake triplo do TCP com o TCP MSS.
Alteração de MSS no roteador:
A fragmentação ocorre com o tráfego TCP porque o tráfego TCP é normalmente usado para transportar grandes quantidades de dados. O TCP suporta um recurso chamado tamanho máximo de segmento (MSS - Maximum Segment Size) TCP que permite que os dois dispositivos negociem um tamanho adequado para o tráfego TCP. O valor de MSS é configurado estaticamente em cada dispositivo e representa o tamanho do buffer a ser usado para um pacote esperado. Quando dois dispositivos estabelecem conexões TCP, eles comparam o valor do MSS local ao valor da MTU no handshake tridirecional: o valor menor é enviado para o peer remoto. Em seguida, os dois peers usam o menor dos dois valores trocados. Para configurar esse recurso, faça o seguinte:
Nos roteadores Cisco, use o comando tcp adjust-mss na interface em que a VPN é terminada.
router (config)# interface type [slot_#/] port_# router (config-if)# ip tcp adjust-mss MSS_Size_in_bytes
Alteração de MSS no ASA/PIX:
Para garantir que o tamanho máximo do segmento TCP não exceda o valor definido e que o máximo não seja menor que um tamanho especificado, use o comando sysopt connection no modo de configuração global. Para restaurar a configuração padrão, use a forma no deste comando. O valor máximo padrão é 1380 bytes. O recurso mínimo é desativado por padrão (definido como 0).
Para alterar o limite máximo de MSS padrão, faça o seguinte:
security appliance (config)# sysopt connection tcp-mss MSS_size_in_bytes
Nota:Se você definir um tamanho máximo superior a 1380, os pacotes poderão ser fragmentados em função do tamanho da MTU (1500 por padrão). Um grande número de fragmentos pode afetar o desempenho do Security Appliance quando ele usa o recurso Frag Guard. Se você definir o tamanho mínimo, ele impedirá que o servidor TCP envie muitos pacotes de dados TCP pequenos ao cliente e impacte o desempenho do servidor e da rede.
Para alterar o limite mínimo de MSS, faça o seguinte:
security appliance (config)# sysopt connection tcp-mss minimum MSS_size_in_bytes
security appliance (config)# sysopt connection tcp-mss minimum MSS_size_in_bytes
Nota:Consulte a seção Configuração do MPF para Permitir Pacotes que Excedem o MSS do documento Problema do PIX/ASA 7.X: MSS Excedido - Os Clientes HTTP Não Conseguem Navegar para Alguns Sites para obter mais informações sobre como permitir pacotes que excederam o MSS.
O PMTUD pode resolver problemas com fragmentação.
O principal problema com o TCP MSS é que o administrador precisa saber qual valor configurar em seu roteador para evitar a ocorrência de fragmentação. Isso pode ser um problema se houver mais de um caminho entre você e o local da VPN remota ou, ao fazer a consulta inicial, você descobrir que o segundo ou terceiro MTU menor, em vez do menor, é baseado na decisão de roteamento usada dentro da consulta inicial. Com o PMTUD, você pode determinar um valor de MTU para pacotes IP que evite a fragmentação. Se as mensagens ICMP forem bloqueadas por um roteador, o MTU do caminho será interrompido e os pacotes com o bit DF definido serão descartados. Use o comando set ip df para limpar o bit DF e permitir que o pacote seja fragmentado e enviado. A fragmentação pode reduzir a velocidade de encaminhamento de pacotes na rede, mas as listas de acesso podem ser usadas para limitar o número de pacotes nos quais o bit DF é limpo.
Três problemas podem fazer com que o PMTUD não funcione:
Um roteador intermediário pode descartar o pacote e não responder com uma mensagem ICMP. Isso não é muito comum na Internet, mas pode ser comum dentro de uma rede onde os roteadores são configurados para não responder com mensagens ICMP inalcançáveis.
Um roteador intermediário pode responder com uma mensagem ICMP inalcançável, mas, no fluxo de retorno, um firewall bloqueia essa mensagem. Essa é uma ocorrência mais comum.
A mensagem ICMP inalcançável volta para a origem, mas a origem ignora a mensagem de fragmentação. Esta é a mais incomum das três questões.
Se você tiver o primeiro problema, poderá limpar o bit DF no cabeçalho IP que a origem colocou ali ou ajustar manualmente o tamanho do TCP MSS. Para limpar o bit DF, um roteador intermediário precisa alterar o valor de 1 para 0. Normalmente, isso é feito por um roteador em sua rede antes que o pacote saia da rede. Esta é uma configuração de código simples que faz isso em um roteador baseado em IOS:
Router (config) # access-list ACL_# permit tcp any any Router (config) # route-map route_map_name permit seq# Router (config-route-map) # match ip address ACL_# Router (config-route-map) # set ip df 0 Router (config-route-map) # exit Router (config) # interface type [slot#/]port # Router (config-if) # ip policy router-map route_map_name
Túneis PMTUD e GRE
Por padrão, um roteador não executa PMTUD em pacotes de túnel GRE gerados por ele mesmo. Para habilitar o PMTUD nas interfaces de túnel GRE e fazer com que o roteador participe do processo de ajuste de MTU para dispositivos de origem/destino para o tráfego que atravessa o túnel, use esta configuração:
Router (config) # interface tunnel tunnel_#
Router (config-if) # tunnel path-mtu-discovery
O comando tunnel path-mtu-discovery ativa o PMTUD para a interface de túnel GRE de um roteador. O parâmetro opcional de temporizador de idade especifica o número de minutos após os quais a interface de túnel redefine o tamanho máximo de MTU descoberto, menos 24 bytes para o cabeçalho GRE. Se você especificar infinito para o temporizador, o temporizador não será usado. O parâmetro min-mtu especifica o número mínimo de bytes que compõe o valor de MTU.
PIX/ASA 7.x - Limpeza do Bit Don't Fragment (DF) ou manuseio de arquivos grandes ou pacotes.
Você ainda não é capaz de acessar adequadamente a Internet, arquivos grandes ou aplicativos por meio do túnel devido à seguinte mensagem de erro de tamanho de MTU:
PMTU-D packet 1440 bytes greater than effective mtu 1434, dest_addr=10.70.25.1, src_addr=10.10.97.55, prot=TCP
Para resolver esse problema, certifique-se de limpar o bit DF da interface externa do dispositivo. Configure a política de bit DF para pacotes IPSec com o comando crypto ipsec df-bit no modo de configuração global.
pix(config)# crypto ipsec df-bit clear-df outside
O bit DF com recurso de túneis de IPSec permite especificar se o security appliance pode limpar, definir ou copiar o bit Don't Fragment (DF) do cabeçalho encapsulado. O bit DF no cabeçalho IP determina se um dispositivo tem permissão para fragmentar um pacote.
Use o comando crypto ipsec df-bit no modo de configuração global para configurar o security appliance para especificar o bit DF em um cabeçalho encapsulado.
Ao encapsular o tráfego IPSec no modo de túnel, use a configuração clear-df para o bit DF. Esta configuração permite que o dispositivo envie pacotes maiores que o tamanho da MTU disponível. Esta configuração também é apropriada se você não conhece o tamanho da MTU disponível.
Nota:Se problemas de fragmentação e perda de pacotes ainda forem observados, uma outra opção é ajustar manualmente o tamanho da MTU com o comando ip mtu tunnel interface. Nesse caso, o roteador fragmenta o pacote antes de protegê-lo. Esse comando pode ser usado em conjunto com PMTUD e/ou TCP MSS.
No momento, não há procedimento de verificação disponível para esta configuração.
A Output Interpreter Tool ( somente clientes registrados) (OIT) oferece suporte a determinados comandos show. Use a OIT para exibir uma análise da saída do comando show.
Suponha que o túnel IPSec tenha sido estabelecido entre o roteador e o PIX. Se houver mensagens de erro de criptografia informando que pacotes foram perdidos, siga estes passos para resolver o problema:
Execute um rastreamento de varredura do cliente para o servidor para descobrir qual é a melhor MTU a ser usada.
Você também pode usar o teste de ping:
ping -l 1400 192.168.1.1 -f
192.168.1.1 é um endereço IP do computador remoto.
Continue a reduzir o valor de 1400 de 20 em 20 até receber uma resposta.
Nota:O valor mágico que funciona na maioria dos casos é 1300.
Após o tamanho máximo apropriado do segmento ser atingido, ajuste-o adequadamente para os dispositivos em uso:
On the PIX Firewall:
sysopt connection tcpmss 1300
No roteador:
ip tcp adjust-mss 1300
Problema:
É possível enviar pings entre as redes VPN, mas o Remote Desktop Protocol (RDP) e as conexões Citrix não podem ser estabelecidas pelo túnel.
Solução:
O problema pode ser o tamanho da MTU no PC por trás do PIX/ASA. Defina o tamanho da MTU como 1300 para o computador cliente e tente estabelecer a conexão Citrix pelo túnel VPN.
Revisão | Data de publicação | Comentários |
---|---|---|
1.0 |
19-Feb-2009 |
Versão inicial |