Como usar o comando traceroute no Linux

Você pode usar o comando traceroute do Linux para identificar o trecho lento da jornada de um pacote de rede e solucionar problemas de conexões de rede lentas. Vamos mostrar como!

Como funciona o traceroute

Quando você aprecia como o traceroute funciona, torna a compreensão dos resultados muito mais fácil. Quanto mais complicada a rota a pacote de rede tem que levar para chegar ao seu destino, mais difícil é identificar onde pode estar ocorrendo qualquer desaceleração.

Uma pequena organização rede local (LAN) pode ser relativamente simples. Provavelmente terá pelo menos um servidor e um ou dois roteadores. A complexidade aumenta em um rede de área ampla (WAN) que se comunica entre diferentes locais ou via Internet. Seu pacote de rede então encontra (e é encaminhado e roteado por) uma grande quantidade de hardware, como roteadores e entradas.

Os cabeçalhos de metadados em pacotes de dados descrevem seu comprimento, de onde veio, para onde está indo, o protocolo que está usando e assim por diante. A especificação do protocolo define o cabeçalho. Se você puder identificar o protocolo, poderá determinar o início e o fim de cada campo no cabeçalho e ler os metadados.

traceroute usa o TCP / IP conjunto de protocolos e envia Protocolo de datagrama do usuário pacotes. O cabeçalho contém o Tempo de Viver (TTL) campo, que contém um valor inteiro de oito bits. Apesar do que o nome sugere, ele representa uma contagem, não uma duração.

Um pacote viaja de sua origem até seu destino por meio de um roteador. Cada vez que o pacote chega a um roteador, ele diminui o contador TTL. Se o valor TTL chegar a um, o roteador que recebe o pacote diminui o valor e percebe que agora é zero. O pacote é então descartado e não encaminhado para o próximo salto de sua jornada porque ele “atingiu o tempo limite”.

O roteador envia um Internet Message Control Protocol (ICMP) Tempo excedido mensagem de volta à origem do pacote para informá-lo que o pacote atingiu o tempo limite. A mensagem Time Exceeded contém o cabeçalho original e os primeiros 64 bits dos dados do pacote original. Isso é definido na página seis do Pedido de Comentários 792.

Portanto, se o traceroute enviar um pacote, mas definir o valor TTL como um, o pacote só chegará até o primeiro roteador antes de ser descartado. Ele receberá uma mensagem de tempo excedido ICMP do roteador e pode registrar o tempo que levou para a viagem de ida e volta.

  Como usar o comando xargs no Linux

Em seguida, ele repete o exercício com TTL definido como 2, que falhará após dois saltos. traceroute aumenta o TTL para três e tenta novamente. Este processo se repete até que o destino seja alcançado ou o número máximo de saltos (30, por padrão) seja testado.

Alguns roteadores não funcionam bem

Alguns roteadores têm bugs. Eles tentam encaminhar pacotes com TTL zero em vez de descartá-los e gerar uma mensagem de tempo excedido de ICMP.

De acordo com Cisco, alguns provedores de serviços de Internet (ISPs) limitam a taxa de envio de mensagens ICMP que seus roteadores transmitem.

Alguns dispositivos são configurados para nunca enviar pacotes ICMP. Isso geralmente é para garantir que o dispositivo não seja coagido involuntariamente a participar de um Negação de serviço distribuída, como um ataque smurf.

traceroute tem um tempo limite padrão para respostas de cinco segundos. Se não receber uma resposta dentro desses cinco segundos, a tentativa é abandonada. Isso significa que as respostas de roteadores muito lentos são ignoradas.

Instalando traceroute

traceroute já foi instalado no Fedora 31, mas deve ser instalado no Manjaro 18.1 e Ubuntu 18.04. Para instalar o traceroute no Manjaro, use o seguinte comando:

sudo pacman -Sy traceroute

Para instalar o traceroute no Ubuntu, use o seguinte comando:

sudo apt-get install traceroute

O

Usando traceroute

Como vimos acima, o objetivo do traceroute é obter uma resposta do roteador a cada salto do computador até o destino. Alguns podem ser calados e não dar nada, enquanto outros provavelmente derramarão o feijão sem escrúpulos.

Como exemplo, vamos executar um traceroute para o Castelo de Blarney site na Irlanda, lar do famoso Pedra de blarney. Diz a lenda que, se você beijar a Pedra de Blarney, será abençoado com o “dom da palavra”. Vamos torcer para que os roteadores que encontramos ao longo do caminho sejam adequadamente tagarelas.

Nós digitamos o seguinte comando:

traceroute www.blarneycastle.ie

O

A primeira linha nos dá as seguintes informações:

O destino e seu endereço IP.
O número de saltos que o traceroute tentará antes de desistir.
O tamanho dos pacotes UDP que estamos enviando.

Todas as outras linhas contêm informações sobre um dos saltos. Antes de nos aprofundarmos nos detalhes, porém, podemos ver que há 11 saltos entre nosso computador e o site do Castelo de Blarney. O salto 11 também nos diz que chegamos ao nosso destino.

  Como instalar o SABnzbd no Linux

O formato de cada linha de salto é o seguinte:

O nome do dispositivo ou, se o dispositivo não se identificar, o endereço IP.
O endereço IP.
O tempo gasto na viagem de ida e volta para cada um dos três testes. Se houver um asterisco aqui, significa que não houve uma resposta para esse teste. Se o dispositivo não responder, você verá três asteriscos e nenhum nome de dispositivo ou endereço IP.

Vamos revisar o que temos a seguir:

Hop 1: A primeira porta de chamada (sem trocadilhos) é o DrayTek Vigor Router na rede local. É assim que nossos pacotes UDP deixam a rede local e entram na Internet.
Hop 2: este dispositivo não respondeu. Talvez ele tenha sido configurado para nunca enviar pacotes ICMP. Ou talvez tenha respondido, mas foi muito lento, então traceroute expirou.
Hop 3: um dispositivo respondeu, mas não obtivemos seu nome, apenas o endereço IP. Observe que há um asterisco nesta linha, o que significa que não obtivemos uma resposta a todas as três solicitações. Isso pode indicar perda de pacote.
Saltos 4 e 5: Mais saltos anônimos.
Pulo 6: Há muito texto aqui porque um dispositivo remoto diferente manipulou cada uma de nossas três solicitações UDP. Os nomes (bastante longos) e endereços IP de cada dispositivo foram impressos. Isso pode acontecer quando você encontra uma rede “ricamente povoada” na qual há muito hardware para lidar com altos volumes de tráfego. Este salto está dentro de um dos maiores ISPs do Reino Unido. Portanto, seria um pequeno milagre se o mesmo hardware remoto administrasse nossas três solicitações de conexão.
Salto 7: este é o salto que nossos pacotes UDP fizeram quando saíram da rede dos ISPs.
Hop 8: Novamente, obtemos um endereço IP, mas não o nome do dispositivo. Todos os três testes retornaram com sucesso.
Saltos 9 e 10: mais dois saltos anônimos.
Pulo 11: Chegamos ao site do Castelo de Blarney. O castelo fica em Cork, na Irlanda, mas, de acordo com Geolocalização de endereço IP, o site está em Londres.

Então, foi um saco misturado. Alguns aparelhos jogaram bola, alguns responderam, mas não nos informaram seus nomes, e outros permaneceram completamente anônimos.

No entanto, chegamos ao destino, sabemos que está a 11 saltos de distância e o tempo de ida e volta da viagem foi de 13,773 e 14,715 milissegundos.

Escondendo nomes de dispositivos

Como vimos, às vezes, incluir nomes de dispositivos leva a uma exibição desordenada. Para facilitar a visualização dos dados, você pode usar a opção -n (sem mapeamento).

  Como emparelhar e usar dispositivos Bluetooth no Linux

Para fazer isso com nosso exemplo, digitamos o seguinte:

traceroute -n blarneycastle.ie

O

Isso torna mais fácil escolher grandes números para tempos de ida e volta que podem indicar um gargalo.

O Hop 3 está começando a parecer um pouco suspeito. Da última vez, ele respondeu apenas duas vezes e, desta vez, ele respondeu apenas uma vez. Nesse cenário, está fora de nosso controle, é claro.

No entanto, se você estivesse investigando sua rede corporativa, valeria a pena cavar um pouco mais fundo nesse nó.

Configurando o valor de tempo limite do traceroute

Talvez se estendermos o período de tempo limite padrão (cinco segundos), obteremos mais respostas. Para fazer isso, usaremos a opção -w (tempo de espera) para alterá-lo para sete segundos. (Observe que este é um número de ponto flutuante.)

Nós digitamos o seguinte comando:

traceroute -w 7.0 blarneycastle.ie

O

Isso não fez muita diferença, então as respostas provavelmente estão expirando. É provável que os saltos anônimos estejam sendo propositalmente secretos.

Definir o número de testes

Por padrão, o traceroute envia três pacotes UDP para cada salto. Podemos usar a opção -q (número de consultas) para ajustar isso para cima ou para baixo.

Para acelerar o teste de traceroute, digitamos o seguinte para reduzir o número de pacotes de sondagem UDP que enviamos para um:

traceroute -q 1 blarneycastle.ie

O

Isso envia uma única sonda para cada salto.

Definindo o valor TTL inicial

Podemos definir o valor inicial de TTL para algo diferente de um e pular alguns saltos. Normalmente, os valores TTL são definidos como um para o primeiro conjunto de testes, dois para o próximo conjunto de testes e assim por diante. Se definirmos para cinco, o primeiro teste tentará obter o salto cinco e pular os saltos de um a quatro.

Como sabemos que o site do Castelo de Blarney está a 11 saltos deste computador, digitamos o seguinte para ir direto para o Salto 11:

traceroute -f 11 blarneycastle.ie

O

Isso nos dá um bom relatório condensado sobre o estado da conexão com o destino.

Seja atencioso

traceroute é uma ótima ferramenta para investigar o roteamento da rede, verificar as velocidades de conexão ou identificar gargalos. O Windows também possui um comando tracert que funciona de forma semelhante.

No entanto, você não quer bombardear dispositivos desconhecidos com torrents de pacotes UDP e tenha cuidado ao incluir traceroute em scripts ou trabalhos autônomos.

O traceroute de carga pode ser colocado em uma rede e pode impactar negativamente seu desempenho. A menos que você esteja em uma situação do tipo consertar agora, você pode querer usá-lo fora do horário comercial normal.