28 de abril de 2018

Descubrimiento de rutas o traceroute

El descubrimiento de rutas (que en la jerga se llama "traceo") se puede realizar utilizando un programa incluido en la mayoría de los sistemas operativos y que recibe diferentes denominaciones según cada caso, la más habitual: traceroute.

Operación
El programa permite descubrir y revisar cada uno de los saltos que atraviesa la ruta que toman los paquetes desde el punto en el que se ejecuta el programa y hacia un destino específico.

El programa envía 3 paquetes UDP al destino, utilizando los puertos 33434 (el primer paquete), 33435 (el segundo paquete) y 33436 (el tercer paquete).
Traceroute utiliza paquetes UDP. Sin embargo, algunos sistemas operativos permiten utilizar diferentes paquetes (TCP o UDP).
Microsoft Windows en su aplicación Tracert no utiliza paquetes UDP sino ICMP echo request.

El proceso se inicia enviando primero una secuencia de paquetes UDP con TTL = 1 y a partir de allí se va incrementando el valor del campo TTL de uno en uno hasta llegar al destino o al límite de saltos definido (por defecto 30).

En todos los casos utiliza igual que ping respuestas de ICMP, en este caso utiliza mensajes time exceeded. Opera colocando el valor del campo TTL de los paquetes que envía, inicialmente, en 1. De esta manera la interfaz del primer salto asume que el TTL ha expirado (al valor de TTL que recibe resto uno: 1 – 1 = 0) y envía un mensaje ICMP al origen indicando que ha excedido el TTL del paquete. En esa notificación al origen el dispositivo que genera el mensaje ICMP se identifica a sí mismo por la dirección IP del puerto que descartó el paquete.  De esta manera el sistema en el que se ejecuta el programa obtiene la dirección IP del primer salto o gateway de la red.
A continuación se genera un segundo paquete UDP con TTL igual a 2; de esta forma el nuevo paquete pasa el gateway, es enrutado y finalmente al llegar al próximo gateway o puerto que debe atravesar será descartado y se generará una nueva notificación de TTL excedido. De esta manera se obtiene ahora la dirección IP del segundo salto en la ruta hacia el destino. El proceso continúa de esta manera incrementando el valor del campo TTL de uno en uno hasta llegar al puerto destino o alcanzar el límite de saltos definido (30 por defecto).


De esta forma el sistema donde se ejecuta la aplicación puede identificar la dirección IP (IPv4 o IPv6) de cada dispositivo o salto que está en la ruta del paquete hacia el destino.

El valor máximo por defecto del campo TTL es 30, por lo que inicialmente al ejecutar el programa se rastrean los primeros 30 saltos. Si es preciso este valor puede ser ajustado.
Entre la información que proporciona el resultado de la ejecución de traceroute se encuentra:
  • El listado ordenado de direcciones IP de cada salto que recorre el paquete en su ruta hacia el destino.
  • La demora en milisegundos que ha registrado cada uno de los 3 paquetes que se han enviado en cada porción del trayecto.
  • La identidad de cada salto.



Traceroute nos permite entonces, conocer detalladamente la ruta que recorre nuestro tráfico hasta el dispositivo de destino y también (en el caso de mensajes de destino inalcanzable), determinar en qué punto del trayecto se está interrumpiendo una ruta para, a partir de este dato y con la ayuda de un diagrama de la red poder localizar dónde se encuentra posiblemente un problema.

Traceroute en diferentes sistemas operativos
Cada sistema operativo tiene su propia versión de este programa, con algunas características que le son propias.

En sistemas Microsoft:
El programa que opera recibe el nombre de "tracert"
C:\>tracert www.google.com

En sistemas Linux:
user@localhost:/# traceroute www.google.com

En sistemas Apple:
Utilizando la interfaz gráfica seleccionar: Aplicaciones > Utilidades > Utilidad de Red
Seleccionar la pestaña "Traceroute" y escribir el dominio o IP.

En sistemas Cisco IOS:
Router#traceroute [protocolo] [destino]

Las respuestas posibles cuando se ejecuta el comando desde la línea de comando de un router Cisco IOS son:
!H El router no ha enviado el comando.
P El protocolo es inalcanzable.
N La red es inalcanzable.
* Time out

Router#traceroute [destino] source [interfaz]
Permite especificar la interfaz a través de la cual se desea enviar los paquetes UDP. Si no se utiliza esta opción el dispositivo define la interfaz de salida (es decir la IP de origen) en función de lo indicado en la tabla de enrutamiento.

Además hay en Internet servicios que reciben la denominación genérica de "looking glass" que permiten ejecutar este programa desde puntos específicos de Internet.
Algunos de esos servicios son:

Las abreviaturas y siglas utilizadas en este post puede encontrarlas desarrolladas en
que está disponible en la Librería en Línea de EduBooks.


2 comentarios:

  1. Oscar, agregaría que para que el salto sea visible en el traceroute, dicho salto debe tener la ruta reversa al origen.

    Entiendo que en algunos casos, el traceroute parece "morir" en determinado salto, lo que no significa que ese salto no tenga la ruta reversa y el que ip host traceado sea inalcanzable. Por ejemplo en varias oportunidades he hecho un tracert a un website al cual me puedo conectar al port 80 y en consecuencia dicho website es visible desde cualquier browser, sin embargo la realizar el traceroute solo tengo visibilidad hasta un cierto nodo, y luego el traceroute muestra los 3 probes con "* * *"
    Te consulto si esto último puede ser causado por mecanismos de seguridad en algunos operadores que deciden ocultar el direccionamiento IP de sus nodos en una Red MPLS.
    Si mal no recuerdo ésto último, en dispositivos Cisco, se puede realizar con un comando "no mpls ip propagate-ttl", pero en ese caso creo que no mostraba el salto y no figuraba como "* * *".

    ResponderEliminar
    Respuestas
    1. Juan José.
      El "no mpls ip propagate-ttl" afecta la "traducción" del ttl de capa 3 a la etiqueta MPLS con el solo propósito de "esconder" los saltos internos de la red del SP a los usuarios finales conectados. No genera los asteriscos que refieres porque simplemente el ttl no llega a cero.
      Los asteriscos lo que significan es que el programa deja de esperar (timeout) la respuesta del salto intermedio. Y esto puede deberse a que el nodo no tiene ruta para regresar al origen o más probablemente porque hay un filtro a las respuestas ICMP.

      Eliminar

Gracias por tu comentario.
En este blog los comentarios están moderados, por lo que su publicación está pendiente hasta la revisión del mismo.