Traceroute

Cómo funciona traceroute

¿Cómo funciona traceroute?. Mucha gente cree erróneamente que traceroute es algo muy parecido al ping y que funcionan de forma análoga, pero la verdad es que tienen muy poco que ver aunque en muchos casos puedan ser utilizados en entornos similares.

El objetivo de este post es explicar traceroute porque es una herramienta de troubleshooting, fantástica. Por cierto, troubleshooting en español significa solución de problemas

Ping

Ping es el más conocido por todos y utiliza el protocolo ICMP. En ping se utilizan mensajes echo request y echo reply entre origen y destino.

Ping es sencillo y nos sirve para comprobar la conectividad entre dos puntos siempre y cuando haya conectividad directa entre ellos.

Traceroute

Traceroute es una herramienta mucho más elaborada que ping y nos ofrece muchísima más información.

Utilizar traceroute nos ofrece la siguiente información:

  • La ruta seguida por un paquete.
  • Los nombres de los elementos intermedios en la ruta del paquete.
  • La latencia entre nuestro origen y cada uno de los puntos intermedios.

Para que traceroute funcione correctamente es necesario antes de nada conocer el campo de la cabecera IP llamado TTL.

Cabecera IP

¿Qué es el TTL?

El TTL no es más que un contador de saltos, en el caso de un traceroute por defecto el campo TTL tiene un valor de 30, esto significa que cada vez que sale a otro nodo se decrementará en 1, así hasta que llegue a 1, si es que llega, y se descarte el paquete.

Si os fijáis cuando ejecutáis un traceroute os dice que 30 es el número máximo de saltos, pues ese número de saltos no es más que el valor del TTL definido.

edu@andromeda:~$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets

El datagrama IP se irá enviando entre routers decrementándose cada vez en 1 el TTL hasta que llegue a uno con un valor de TTL de 1. En el caso de un router recibir un datagrama con un valor de TTL de 1 va a remitir al original un mensaje especial denominado «mensajes ICMP TTL excedidos».

Como ese mensaje de TTL excedido lo enviará el router que reciba el datagrama con TTL de 1 al origen, en el momento de llegar al origen este ya sabe cual es la dirección del remitente.

Es un mecanismo muy sencillo pero muy inteligente.

Pues este es el sistema que utiiliza traceroute para descubrir los nodos intermedios, los «mensajes ICMP TTL excedidos».

Ahora la pregunta es cómo consigue Traceroute conocer las IPs de los nodos intermedios, porque al principio hemos comentado que uno de los objetivos de traceroute es mostrar los nodos intermedios que componen una ruta a un destino.

¿Cómo funciona Traceroute?

En el momento en el que lanzamos un traceroute contra un destino enviaremos datagramas UDP, porque traceroute funciona con UDP, con el siguiente contenido:

  • Ip de origen
  • Ip de destino
  • Puerto UDP (entre 33434 y 33534)

Lo primero será enviar ese detagrama a mi destino pero con un TTL de 1, entonces cuando llegue a mi router este responderá con un «mensajes ICMP TTL excedidos» y es así como el origen sabrá la IP del primer salto, e iremos subiendo el TTL enviando otro y otro datagrama.

De esta manera mandaremos datagramas con TTL de 1, de 2, de 3 …. y así hasta que lleguemos al destino.

¿Cómo sabemos que hemos llegado al destino? Pues simplemente porque el destino tendrá que responder a un puerto UDP aleatóreo entre el 33434 y el 33534 y como lo más probable es que el destino no responda a esos puertos responderá con un «menaje de puerto ICMP de destino inalcanzable»

Esto si abris un wireshark o un tcpdump mientras hacéis el traceroute podréis verlo sin problemas.

sudo tcpdump -Knnvvi any '(udp and dst port 53) or (udp and dst portrange 33434-33534) or icmp[icmptype] == 11'

Foto de cabecera de Brett Sayles en Pexels