Como solucionar problemas de desempenho de rede entre instâncias Linux ou Windows do EC2 em uma VPC e um host on-premises pelo gateway da Internet?

12 minuto de leitura
0

Quero solucionar problemas de perda de pacotes ou latência entre minhas instâncias do Amazon Elastic Compute Cloud (Amazon EC2) em uma Amazon Virtual Private Cloud (Amazon VPC) e um host local pelo gateway da Internet.

Breve descrição

Para diagnosticar problemas de rede, como perda de pacotes ou latência, primeiro teste a rede para isolar a origem do problema. Antes de solucionar o problema, é uma prática recomendada comparar os resultados de desempenho.

Pré-requisitos:

Solução

Instale as seguintes ferramentas para ajudar a solucionar problemas e testar sua rede:

  • AWSSupport-SetupIPMonitoringFromVPC para coletar métricas de rede, como perda de pacotes, latência, MTR, tcptraceroute e tracepath.
  • MTR para verificar se há perda de pacotes ICMP ou TCP e problemas de latência.
  • Traceroute para determinar problemas de latência ou roteamento.
  • Hping3 para determinar problemas de latência e perda de pacotes TCP de ponta a ponta.
  • Tcpdump para analisar amostras de captura de pacotes.

Revise relatórios de traceroute ou MTR

Analise os saltos nos relatórios traceroute ou MTR usando uma abordagem de baixo para cima. Em uma abordagem de baixo para cima, primeiro verifique se há perda no último salto ou destino e, em seguida, revise os saltos anteriores.

  • Se os problemas de perda de pacotes ou latência continuarem até o último salto, pode haver um problema de rede ou roteamento.
  • Se houver um limite de taxa do ambiente de gerenciamento nesse nó, poderá ocorrer perda ou latência de pacotes em um salto no caminho.
  • Verifique se o último salto relatado é o destino indicado no comando. Se o último salto não for observado, pode haver um problema causado por um grupo de segurança restritivo.

Teste o desempenho usando AWSSupport-SetupIPMonitoringFromVPC

Essa ferramenta integrada coleta muitas das métricas de que você precisa para solucionar problemas de sua rede. Para obter mais informações, consulte Ferramenta de depuração para conectividade de rede na Amazon VPC.

Solução de problemas de desempenho para instâncias Linux

Verifique as estatísticas de desempenho do Linux

Se você tiver acesso à instância de origem ou à instância de destino, verifique se há problemas com a CPU, a utilização da memória e a média de carga.

Teste o desempenho usando MTR

O comando MTR do Linux fornece uma saída contínua e atualizada. Essa ferramenta de diagnóstico combina a funcionalidade dos utilitários traceroute e ping. A saída dessa ferramenta permite analisar o desempenho da rede. A maioria das distribuições Linux vem com traceroute e MTR pré-instalados. Você também pode baixá-lo no gerenciador de pacotes de software da sua distribuição.

Para instalar o MTR, execute os seguintes comandos:

Amazon Linux:

sudo yum install mtr

Ubuntu:

sudo apt-get install mtr-tiny

Para testar o desempenho da sua rede usando o MTR, execute esse teste bidirecionalmente entre o endereço IP público de suas instâncias do EC2 e seu host on-premises. O caminho entre os nós em uma rede TCP/IP pode mudar quando a direção é invertida. É uma prática recomendada obter resultados de MTR para ambas as direções. Você pode usar um rastreamento baseado em TCP em vez de ICMP, porque a maioria dos dispositivos da Internet desprioriza as solicitações de rastreamento baseadas em ICMP.

Revise sua perda de pacotes. A perda de pacotes em um único salto geralmente não indica um problema. A perda pode ser o resultado de uma política do ambiente de gerenciamento que faz com que as mensagens de “tempo de ICMP excedido” sejam descartadas. Se você notar uma perda contínua de pacotes até o salto de destino, ou perda de pacotes em vários saltos, essa perda pode indicar um problema.

**Observação:**É comum ver algumas solicitações se esgotarem.

Substitua PUBLIC\ _IP pelo host on-premises da instância IP pública EC2.

MTR baseado em ICMP:

mtr -n -c 200 PUBLIC_IP --report

MTR baseado em TCP:

mtr -n -T -c 200 PUBLIC_IP --report

O argumento -T executa um MTR baseado em TCP e a opção --report coloca o MTR no modo de relatório. O MTR é executado pelo número de ciclos especificado pela opção -c. Imprima as estatísticas e saia.

**Observação:**O MTR baseado em TCP testa a porta TCP 80 de destino para MTR, uma porta TCP de destino específica, anexada com -P, seguida pelo número da porta. Veja a seguir um exemplo da porta TCP 443 de destino do MTR:

mtr -n -T -c 200 PUBLIC_IP -P 443 --report

Teste o desempenho usando o traceroute

O utilitário traceroute do Linux identifica o caminho percorrido de um nó cliente até o nó de destino. O utilitário registra o tempo em milissegundos para cada roteador responder à solicitação. O utilitário também calcula a quantidade de tempo que cada salto leva antes de chegar ao destino.

Para instalar o tracerout, execute os seguintes comandos:

Amazon Linux:

sudo yum install traceroute

Ubuntu:

sudo apt-get update
 `sudo apt-get install traceroute`

**Observação:**O traceroute não é necessário se você executar um relatório MTR. O MTR fornece estatísticas de latência e perda de pacotes para um destino.

Certifique-se de que a porta 22 ou a porta que você está testando esteja aberta nas duas direções. Para solucionar problemas de conectividade de rede usando traceroute, execute o comando do cliente para o servidor. Em seguida, execute o comando do servidor de volta para o cliente. O caminho entre os nós em uma rede TCP/IP pode mudar se a direção for invertida. Use um rastreamento baseado em TCP em vez de ICMP (sua porta de aplicativo), porque a maioria dos dispositivos da Internet desprioriza as solicitações de rastreamento baseadas em ICMP.

Traceroute baseado em ICMP:

sudo traceroute -I PUBLIC_IP

Traceroute baseado em TCP:

sudo traceroute -n -T -p 22 PUBLIC_IP

O argumento -T -p 22 -n executa um rastreamento baseado em TCP na porta 22.

Observação: você pode usar a porta específica da sua aplicação para testes. Use a porta específica para entender se há algum dispositivo intermediário no caminho que esteja eliminando o tráfego da aplicação.

Teste o desempenho usando hping3

O hping3 é um montador e analisador de pacotes TCP/IP orientado por linha de comando que mede a perda e a latência de pacotes de ponta a ponta em uma conexão TCP. Faça o download do hping3 no site Die.net.

Além das solicitações de eco ICMP, o hping3 oferece suporte aos protocolos TCP, UDP e RAW-IP. O hping3 também inclui um modo traceroute que pode enviar arquivos entre um canal coberto. O hping3 foi projetado para escanear hosts, auxiliar em testes de penetração, testar sistemas de detecção de intrusão e enviar arquivos entre hosts.

Os MTRs e o traceroute captam a latência por salto. No entanto, além da perda de pacotes, os resultados do hping3 mostram latência min/avg/max de ponta a ponta em TCP.

Para instalar o hping3, execute os seguintes comandos:

Amazon Linux 2:

Instale o pacote de versão EPEL para o RHEL 7 e, em seguida, ative o repositório EPEL.

sudo amazon-linux-extras install epel -y

Amazon Linux 2:

sudo yum --enablerepo=epel install hping3

Ubuntu:

sudo apt-get install hping3

O comando a seguir envia 50 pacotes SYN TCP pela porta 0. Por padrão, o hping3 envia cabeçalhos TCP para a porta 0 do host de destino, com um tamanho de janela de 64 e sem um sinalizador TCP:

sudo hping3 -S -c 50 -V PUBLIC_IP

O comando a seguir envia 50 pacotes SYN TCP pela porta 22:

sudo hping3 -S -c 50 -V PUBLIC_IP -p 22

Observação: certifique-se de que a porta 22 ou a porta que você está testando esteja aberta.

Teste amostras de captura de pacotes usando tcpdump

É uma prática recomendada realizar capturas simultâneas de pacotes na instância do EC2 e no host on-premises ao diagnosticar problemas de perda/latência de pacotes. Isso pode ajudar a identificar os pacotes de solicitação e resposta para que possamos isolar o problema nas camadas de rede e da aplicação. Também é uma prática recomendada iniciar primeiro a captura de pacotes, e depois iniciar o tráfego. Essa ordem de ação ajuda a capturar todos os pacotes para o fluxo.

Para instalar o tcpdump, execute os seguintes comandos:

Amazon Linux:

sudo yum install tcpdump

Ubuntu:

sudo apt-get install tcpdump

Depois de instalar o tcpdump, execute o comando a seguir para capturar o tráfego da porta tcp 22 e, em seguida, salve a saída em um arquivo pcap.

sudo tcpdump -i eth0 port 22 -s0 -w samplecapture.pcap

**Observação:**O sinalizador -i do tcpdump especifica a interface na instância em que o tcpdump captura o tráfego. Talvez seja necessário alterar a interface em eth0 para a interface configurada em seu ambiente.

Solução de problemas de desempenho para Windows

Verifique o recurso ECN

  1. Execute o comando a seguir para determinar se o recurso Notificação Explícita de Congestionamento (ECN) está ativado:

    netsh interface tcp show global
  2. Se o recurso ECN estiver ativado, execute o seguinte comando para desativá-lo:

    - netsh interface tcp set global ecncapability=disabled
  3. Se você não observar uma melhoria no desempenho, execute o seguinte comando para reativar o recurso ECN:

    netsh interface tcp set global ecncapability=enabled

Analise os saltos e solucione problemas de conectividade da porta TCP
Primeiro, use MTR ou tracert para revisar os saltos.

Método MTR:

  1. Baixe e instale o WinMTR no site SourceForge.net.
  2. Insira o IP de destino na seção Host e escolha Iniciar.
  3. Deixe o teste ser executado por um minuto e escolha Interromper.
  4. Escolha Copiar texto para a área de transferência e cole a saída em um arquivo de texto.
  5. Procure por perdas na coluna % que sejam propagadas até o destino.
    Observação: ignore qualquer salto com a mensagem Sem resposta do host. Essa mensagem indica que esses saltos específicos não estão respondendo às varreduras ICMP.
  6. Analise os saltos nos relatórios MTR usando uma abordagem de baixo para cima. Por exemplo, verifique se há perda no último salto ou destino e, em seguida, analise os saltos anteriores.

Método tracert:
se você não quiser instalar o MTR, você pode usar a ferramenta de utilitário de comando tracert.

  1. Execute um tracert no URL ou endereço IP de destino.

  2. Procure por saltos que mostrem um aumento abrupto no tempo de ida e volta (RTT). Um pico abrupto no RTT pode indicar que há um nó sob alta carga. Essa carga pode induzir latência ou quedas de pacotes em seu tráfego.
    Observação: a opção -d não resolve endereços IP em nomes de host. Remova -d se a resolução de IP para nome de host for necessária.

    tracert -d PUBLIC_IP

  3. Em seguida, verifique a conectividade da porta TCP.

**Observação:**Como o WinMTR e o tracert são baseados em ICMP, você pode usar o tracetcp para solucionar problemas de conectividade da porta TCP.

  1. Baixe o arquivo ZIP tracetcp do site NetworkHunt.com.
  2. Extraia o arquivo ZIP tracetcp.
  3. Copie o arquivo tracetcp.exe na sua unidade C.
  4. Baixe e instale o WinPcap no site WinPcap.org.
  5. Abra o prompt de comando e faça root do WinPcap na unidade C: usando C:\Users\username>cd command.
  6. Para executar o tracetcp, use os seguintes comandos:
    tracetcp.exe hostname:porta
    -ou-
    **tracetcp.exe ip: porta **

Verifique o Gerenciador de Tarefas do Windows

Se você tiver acesso à instância de origem ou à instância de destino, verifique o Gerenciador de Tarefas do Windows. Procure problemas com a utilização da CPU e da memória ou com a média de carga.

Faça uma captura de pacotes

**Observação:**É uma prática recomendada realizar capturas de pacotes simultâneas em sua instância do EC2 e em seu host on-premises ao diagnosticar problemas de perda de pacotes ou latência. Isso ajuda a identificar os pacotes de solicitação e resposta para isolar o problema nas camadas de rede e da aplicação. Também é uma prática recomendada iniciar primeiro a captura de pacotes e depois iniciar o tráfego. Essas ações ajudam a capturar todos os pacotes para o fluxo.

  1. Baixe e instale o Wireshark no site Wireshark.org. Em seguida, faça uma captura de pacotes.
  2. Use o filtro a seguir para isolar o tráfego entre fontes específicas na captura de pacotes: (ip.addr eq source_IP) &&(tcp.flags.syn == 1).
    A saída mostra todos os fluxos tcp iniciados por esse IP de origem.
  3. Selecione a linha com o IP de origem e o IP de destino relevantes.
  4. Escolha o menu de contexto (clique com o botão direito do mouse) e escolha Seguir, Fluxo TCP. Isso resulta em um fluxo TCP entre o IP de origem e o IP de destino que você quer investigar.
  5. Procure retransmissões, pacotes duplicados ou notificações de tamanho de janela TCP, como janela TCP cheia ou Janela tamanho zero. Essas notificações podem indicar que os buffers TCP estão ficando sem espaço.

Se você encontrar perda de pacotes ou se o número de saltos mudar significativamente em relação às suas comparações, consulte a documentação do fornecedor do equipamento de rede. Se estiver trabalhando em um ambiente de rede com várias hospedagens, realize esses testes usando um ISP diferente.

AWS OFICIAL
AWS OFICIALAtualizada há 8 meses