Quem trabalha com redes eventualemente já deve ter se deparado com um utilitário chamado traceroute. Trata-se de um utilitário presente em diversos sistemas operacionais, e que já vêm embutido na maior parte das versões do Windows e distros Linux/BSD.
Estou aqui para defender que este pequeno utilitário tem que estar na lista de utilitários de diagnóstico, se você quer ser um profissional de Redes/Infra que se preze. Já resolvi diversos problemas com o traceroute no dia-a-dia, então gostaria de compartilhar com vocês o pouco que sei sobre esta ferramenta.
Antes de chegar à melhor parte, precisamos entender que o traceroute se baseia em mensagens ICMP do tipo TTL Timeout. Como o ICMP é parte da pilha TCP/IP, praticamente todas as máquinas na rede estão aptas a tratar este tipo de mensagem.
O TTL é um mecanismo que protege a rede contra loops de roteamento, e tem um funcionamento bem simples: a cada roteador que o pacote atravessa, ou seja, a cada “hop”, o valor do TTL é subtraído. Caso o valor chegue em “0”, o pacote automaticamente é descartado. Isto permite que erros de rota não criem pacotes “zumbis” que ficariam eternamente sendo roteados sem nunca chegar ao destino e consumindo preciosos recursos da rede.
Já o TTL Timeout é uma mensagem que é disparada pelo roteador toda vez que ele verifica um pacote com TTL=0 e o descarta. Naturalmente o pacote é enviado de volta ao remetente original do pacote, isto permite ao remetente ser avisado que o pacote foi descartado, e uma boa parte dos roteadores envia estas mensagens.
Vamos ao traceroute: o traceroute funciona basicamente enviando pacotes a um destino em conjuntos de 3, com uma pitadinha de tempero: ele manipula o valor do TTL de forma tal que o pacote será descartado pelos roteadores no caminho do seu destino, ou seja, ele envia pacotes inicialmente com TTL=1, depois com TTL=2, depois com TTL=4 e por aí vai.
Vamos entender o processo: o primeiro roteador que receber este pacote, com TTL=1, irá subtrair o TTL e verificará que o TTL será igual a 0. Como já vimos, isto vai causar o descarte/drop do pacote e o roteador irá enviar uma mensagem ICMP TTL Timeout de volta para o remetente. Aí começa a mágica. No pacote, o roteador estampa o seu IP, permitindo ao remetente saber de qual roteador na internet/lan veio a mensagem. A saída do traceroute imprime na tela os tempos de resposta para cada um dos pacotes recebidos do roteador. Normalmente a saída é algo assim:
C:Usersusername>tracert google.com
Rastreando a rota para google.com [64.233.163.104]
com no máximo 30 saltos:
1 1 ms <1 ms <1 ms 192.168.1.1
O processo se repete, desta vez com o TTL=2, em seguida com TTL=3, até que o pacote chegue ao roteador da rede de destino ou estoure o limite (que por padrão, no windows 7, são 30 hops, mas pode ser alterado).
Em alguns casos, não se recebe retorno de algum roteador. Isto pode ser causado por um filtro/firewall/acl/configuração no próprio roteador ou na rede em que ele se encontra. Observe a saída abaixo, onde o 2o. roteador no caminho não enviou nenhuma mensagem ICMP Timeout:
C:Usersusername>tracert google.com Rastreando a rota para google.com [64.233.163.104] com no máximo 30 saltos: 1 1 ms <1 ms <1 ms 192.168.1.1 2 * * * Esgotado o tempo limite do pedido. 3 77 ms 12 ms 70 ms 161.servidor.supercabo.com.br [189.124.128.161]Moral da história: o traceroute te permite mapear os roteadores no caminho de um determinado destino. Nos exemplos mostrados acima, disparei um traceroute com destino google.com. Como no meu ambiente de rede de onde escrevo este post há um roteador, ele aparece logo no primeiro “hop” da listagem. O 3o roteador no caminho está já na rede da Cabo Telecom em Natal. Não omiti a resolução DNS na saída porque esta informação já é pública.
Outro poderoso aspecto que a saída do traceroute esconde é que é possível verificar até roteadores dentro de redes locais (inclusive com IPs privados, a exemplo das faixas 10.0.0.0/8, 182.16.0.0/16 e 192.168.0.0/24), que a princípio não estão disponíveis para serem alcançados diretamente via IPs públicos.
Espero ter mostrado um pouco do poder do traceroute e incentivo os profissionais de redes a usá-lo para auxiliar no diagnóstico de problemas de conectividade.