Manuales para la línea de comandos

Man » Manual de traceroute en línea - documentación detallada en línea para la página de manual de traceroute

🌍
traceroute - imprime la ruta que siguen los paquetes hasta un host de red

SINOPSIS

traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...]
[-i device] [-m max_ttl] [-p port] [-s src_addr]
[-q nqueries] [-N squeries] [-t tos]
[-l flow_label] [-w waittimes] [-z sendwait] [-UL] [-D]
[-P proto] [--sport=port] [-M method] [-O mod_options]
[--mtu] [--back]
host [packet_len]
traceroute6  [options]
tcptraceroute  [options]
lft  [options]

DESCRIPCIÓN

traceroute rastrea la ruta que siguen los paquetes desde una red IP en su camino a un host determinado.
Utiliza el campo de tiempo de vida (TTL) del protocolo IP e intenta obtener una respuesta ICMP TIME_EXCEEDED
de cada puerta de enlace a lo largo de la ruta hacia el host.

traceroute6 es equivalente a traceroute -6

tcptraceroute es equivalente a traceroute -T

lft, el Layer Four Traceroute, realiza un traceroute TCP, como traceroute -T, pero intenta
proporcionar compatibilidad con la implementación original, también llamada "lft".

El único parámetro requerido es el nombre o la dirección IP del host de destino. El parámetro opcional packet_length es el tamaño total del paquete de sondeo (60 bytes por defecto para IPv4 y 80 para IPv6). El tamaño especificado puede ignorarse en algunas situaciones o aumentarse hasta un valor mínimo.

Este programa intenta rastrear la ruta que un paquete IP seguiría hasta un host de Internet lanzando paquetes de prueba con un TTL (tiempo de vida) pequeño y luego escuchando una respuesta ICMP "tiempo excedido" de una puerta de enlace. Comenzamos nuestras pruebas con un TTL de uno y aumentamos en uno hasta que lleguemos a un ICMP "puerto inalcanzable" (o restablecimiento TCP), lo que significa que llegamos al "host" o alcanzamos un máximo (que por defecto es de 30 saltos). Se envían tres sondeos (por defecto) en cada configuración de TTL y se imprime una línea que muestra el TTL, la dirección de la puerta de enlace y el tiempo de respuesta de cada sondeo. La dirección puede ir seguida de información adicional si se solicita. Si las respuestas del sondeo provienen de diferentes puertas de enlace, se imprimirá la dirección de cada sistema que responda. Si no hay respuesta dentro de un cierto tiempo de espera, se imprime un "*" (asterisco) para ese sondeo.

Después del tiempo de viaje, se pueden imprimir algunas anotaciones adicionales: !H, !N o !P (host, red u inalcanzable de protocolo), !S (ruta de origen fallida), !F (se necesita fragmentación), !X (comunicación prohibida administrativamente), !V (violación de la prioridad del host), !C (recorte de prioridad en efecto) o ! (código ICMP inalcanzable ). Si casi todos los sondeos dan como resultado algún tipo de inalcanzable, traceroute se dará por vencido y saldrá.


No queremos que el host de destino procese los paquetes UDP de prueba, por lo que el puerto de destino se establece en un valor poco probable (puedes cambiarlo con la opción -p). No existe este problema para ICMP o el rastreo de ruta TCP (para TCP, utilizamos la técnica de "semi-apertura", que evita que las aplicaciones del host de destino vean nuestras sondas).

En el entorno de red moderno, los métodos tradicionales de rastreo de ruta no siempre son aplicables, debido al uso generalizado de firewalls. Estos firewalls filtran los puertos UDP "poco probables", o incluso los ecos ICMP. Para solucionar esto, se implementan algunos métodos adicionales de rastreo de ruta (incluido TCP), consulta la LISTA DE MÉTODOS DISPONIBLES a continuación. Estos métodos intentan utilizar un protocolo y puerto de origen/destino específicos para eludir los firewalls (para que los firewalls los vean simplemente como el inicio de un tipo de sesión de red permitido).

OPCIONES

--help Imprime la información de ayuda y sale.

-4, -6 Fuerza explícitamente el rastreo de ruta IPv4 o IPv6. De forma predeterminada, el programa intentará resolver el nombre proporcionado y elegirá el protocolo apropiado automáticamente. Si resolver un nombre de host devuelve tanto direcciones IPv4 como IPv6, el rastreo de ruta utilizará IPv4.

-I, --icmp

Utiliza ICMP ECHO para las sondas.

-T, --tcp

Utiliza TCP SYN para las sondas.

-d, --debug

Habilita la depuración a nivel de socket (cuando el kernel de Linux lo admite).

-F, --dont-fragment

No fragmenta los paquetes de prueba. (Para IPv4, también establece la bit DF, que indica a los enrutadores intermedios que no fragmenten de forma remota).

Variando el tamaño del paquete de prueba mediante el parámetro de línea de comandos packet_len, puedes obtener manualmente información sobre la MTU de cada salto de la red. La opción --mtu (consulta a continuación) intenta hacerlo automáticamente.

Ten en cuenta que las funciones que evitan la fragmentación (como -F o --mtu) funcionan correctamente a partir de la versión 6.22 del kernel de Linux. Antes de esa versión, IPv6 siempre se fragmentaba y IPv4 solo podía utilizar la MTU final descubierta (de la caché de rutas), que puede ser inferior a la MTU real de un dispositivo.

-f first_ttl, --first=first_ttl

Especifica con qué TTL comenzar. El valor predeterminado es 1.

-g gateway, --gateway=gateway

Indica a traceroute que agregue una opción de enrutamiento de origen al paquete saliente que le indique a la red que enrute el paquete a través de la puerta de enlace especificada (la mayoría de los enrutadores tienen el enrutamiento de origen desactivado por motivos de seguridad). En general, se permite más de una puerta de enlace (separada por comas). Para IPv6, se permite el formato num,dir,dir..., donde num es un tipo de encabezado de ruta (el valor predeterminado es el tipo 2). Ten en cuenta que el tipo de encabezado de ruta 0 está ahora en desuso (rfc5095).

-i interface, --interface=interface

Especifica la interfaz a través de la cual traceroute debe enviar paquetes. De forma predeterminada, la interfaz se selecciona según la tabla de enrutamiento.

-m max_ttl, --max-hops=max_ttl

Especifica el número máximo de saltos (valor máximo de tiempo de vida) que traceroute sondeará. El valor predeterminado es 30.


-N squeries, --sim-queries=squeries
Especifica el número de paquetes de sondeo enviados simultáneamente. Enviar varios sondeos
concurrentemente puede acelerar considerablemente traceroute. El valor predeterminado es 16.
Tenga en cuenta que algunos enrutadores y hosts pueden utilizar la limitación de velocidad de ICMP.
En tal situación, especificar un número demasiado grande puede provocar la pérdida de algunas respuestas.

-n     No intente asignar direcciones IP a nombres de host al mostrarlas.

-p port, --port=port
Para el rastreo UDP, especifica el puerto de destino base que utilizará traceroute (el número de
puerto de destino se incrementará con cada sondeo).
Para el rastreo ICMP, especifica el valor de secuencia ICMP inicial (también se incrementa con cada sondeo).
Para TCP y otros, especifica simplemente el puerto de destino (constante) al que conectarse.
Cuando se utiliza el wrapper tcptraceroute, -p especifica el puerto fuente.

-t tos, --tos=tos
Para IPv4, establece el valor de Tipo de Servicio (TOS) y Precedencia. Los valores útiles son 16
(baja latencia) y 8 (alto rendimiento). Tenga en cuenta que, para utilizar algunos valores de precedencia
TOS, debe ser superusuario.
Para IPv6, establece el valor de Control de Tráfico.

-l flow_label, --flowlabel=flow_label
Utilice la etiqueta de flujo especificada para los paquetes IPv6.

-w max[,here,near], --wait=max[,here,near]
Determina cuánto tiempo esperar una respuesta a un sondeo.

Hay tres valores de punto flotante (en general) separados por una coma (o una barra). Max especifica
el tiempo máximo (en segundos, el valor predeterminado es 5.0) para esperar, en cualquier caso.

La implementación tradicional de traceroute siempre esperó el tiempo máximo completo para cualquier sondeo.
Pero si ya tenemos algunas respuestas del mismo salto, o incluso de algún salto siguiente, podemos utilizar
el tiempo de ida y vuelta de dicha respuesta como una pista para determinar la cantidad real de tiempo
que se debe esperar.

El opcional here (el valor predeterminado es 3.0) especifica un factor para multiplicar el tiempo
de ida y vuelta de una respuesta ya recibida del mismo salto. El valor resultante se utiliza como tiempo
de espera para el sondeo, en lugar de (pero no más de) max. El opcional near (el valor predeterminado es 10.0)
especifica un factor similar para una respuesta de algún salto siguiente. (Se utiliza el tiempo del primer
resultado encontrado en ambos casos).

Primero, buscamos el mismo salto (el sondeo que se imprimirá primero a partir de ahora). Si no se
encuentra nada, entonces buscamos algún salto siguiente. Si no se encuentra nada, se utiliza max.
Si here y/o near tienen valores cero, el cálculo correspondiente se omite.
Here y near siempre se establecen en cero si solo se especifica max (para compatibilidad con las versiones
anteriores).

-q nqueries, --queries=nqueries
Establece el número de paquetes de sondeo por salto. El valor predeterminado es 3.

-r     Omita las tablas de enrutamiento normales y envíe directamente a un host en una red adjunta.
Si el host no está en una red directamente adjunta, se devuelve un error. Esta opción se puede utilizar
para hacer ping a un host local a través de una interfaz que no tiene ninguna ruta.

-s source_addr, --source=source_addr
Elige una dirección de origen alternativa. Tenga en cuenta que debe seleccionar la dirección de una de
las interfaces. De forma predeterminada, se utiliza la dirección de la interfaz saliente.

-z sendwait, --sendwait=sendwait

Intervalo de tiempo mínimo entre sondeos (valor predeterminado 0). Si el valor es mayor que 10, especifica un número en milisegundos; de lo contrario, es un número de segundos (también se permiten valores de punto flotante). Útil cuando algunos enrutadores utilizan el límite de velocidad para los mensajes ICMP.

-e, --extensions

Mostrar las extensiones ICMP (rfc4884). El formato general es CLASE/TIPO: seguido de un volcado hexadecimal. MPLS (rfc4950) se muestra analizado, en el formato: MPLS:L=etiqueta,E=uso_exp,S=fondo_pila,T=TTL (más objetos separados por /). La información de la interfaz (rfc5837) también se muestra analizada, en el formato siguiente: {INC|SUB|OUT|NXT}:índice,IP_addr,"nombre",mtu=MTU (se puede omitir cualquiera de los cuatro campos).

-A, --as-path-lookups

Realizar búsquedas de rutas AS en los registros de enrutamiento e imprimir los resultados inmediatamente después de las direcciones correspondientes.

-V, --version

Imprimir la versión y salir.

Existen opciones adicionales destinadas a un uso avanzado (como métodos de rastreo alternativos, etc.):

--sport=puerto

Elige el puerto de origen que se utilizará. Implica -N 1 -w 5. Normalmente, el sistema elige los puertos de origen (si corresponde).

--fwmark=marca

Establecer la marca de firewall para los paquetes salientes (desde el kernel de Linux 2.6.25).

-M método, --module=nombre

Utilizar el método especificado para las operaciones de traceroute. El método UDP tradicional tiene como nombre predeterminado, ICMP (-I) y TCP (-T) tienen los nombres icmp y tcp, respectivamente. Se pueden pasar opciones específicas del método mediante -O. La mayoría de los métodos tienen sus propios atajos simples (-I significa -M icmp, etc.).

-O opción, --options=opciones

Especifica algunas opciones específicas del método. Varias opciones se separan por comas (o se utilizan varias opciones -O en la línea de comandos). Cada método puede tener sus propias opciones específicas, o es posible que no las tenga. Para imprimir información sobre las opciones disponibles, utilice -O help.

-U, --udp

Utilizar UDP para el puerto de destino específico para el traceroute (en lugar de aumentar el puerto para cada sonda). El puerto predeterminado es 53 (DNS).

-UL    Utilizar UDPLITE para el traceroute (el puerto predeterminado es 53).

-D, --dccp

Utilizar solicitudes DCCP para las sondas.

-P protocolo, --protocol=protocolo

Utilizar un paquete sin procesar del protocolo especificado para el traceroute. El protocolo predeterminado es 253 (rfc3692).

--mtu Descubrir la MTU a lo largo de la ruta que se está rastreando. Implica -F -N 1. La nueva MTU se imprime una vez en el formato F=NUM en la primera sonda del salto que requiere que se alcance dicha MTU. (En realidad, el mensaje ICMP correspondiente "se necesita fragmentación" normalmente lo envía el salto anterior).

Tenga en cuenta que algunos enrutadores pueden almacenar en caché la información que han visto sobre la fragmentación. Por lo tanto, puede recibir la MTU final de un salto más cercano. Intente especificar un valor TOS inusual con -t; esto puede ayudar en un intento (luego también puede almacenarse en caché allí). Consulte la opción -F para obtener más información.

--back Imprimir el número de saltos inversos cuando parece ser diferente de la dirección directa. Este número se estima asumiendo que los saltos remotos envían paquetes de respuesta con un TTL inicial establecido en 64, 128 o 255 (lo que parece ser una práctica común). Se imprime como un valor negativo en el formato '-NUM'.

LISTA DE MÉTODOS DISPONIBLES

En general, un método de traceroute en particular puede tener que ser elegido mediante -M nombre, pero la mayoría de los métodos tienen sus simples interruptores de línea de comandos (puede verlos después del nombre del método, si están presentes).

default

El método tradicional y antiguo de traceroute. Se utiliza por defecto.

Los paquetes de prueba son datagramas UDP con puertos de destino llamados "improbables". El "puerto improbable" del primer paquete de prueba es 33434, y luego para cada paquete de prueba siguiente se incrementa en uno. Dado que se espera que estos puertos no estén en uso, el host de destino normalmente devuelve "icmp unreachable port" como respuesta final. (Nadie sabe qué sucede cuando alguna aplicación escucha en estos puertos, sin embargo).

Este método está permitido para usuarios no privilegiados.

icmp       -I

El método más común actualmente, que utiliza paquetes ICMP echo para las pruebas. Si puede ping(8) el host de destino, el traceroute ICMP también es aplicable.

Este método puede estar permitido para usuarios no privilegiados desde el kernel 3.0 (IPv4, para IPv6 desde el 11, que admite nuevos sockets ICMP dgram o "ping"). Para permitir estos sockets, el administrador del sistema debe proporcionar el rango de sysctl net/ipv4/ping_group_range para que coincida con cualquier grupo del usuario. Opciones:

raw    Utilice solo sockets raw (la forma tradicional).

Esta forma se intenta primero por defecto (por razones de compatibilidad), luego los nuevos sockets ICMP dgram como alternativa.

dgram  Utilice solo sockets ICMP dgram.

tcp        -T

Un método moderno y conocido, diseñado para evitar firewalls. Utiliza un puerto de destino constante (el valor predeterminado es 80, http).

Si hay algunos filtros presentes en la ruta de la red, entonces lo más probable es que cualquier puerto UDP "improbable" (como para el método predeterminado) o incluso los ecos ICMP (como para ICMP) estén filtrados, y todo el traceroute simplemente se detendrá en ese firewall. Para evitar un filtro de red, debemos usar solo combinaciones de protocolo/puerto permitidas. Si rastreamos, por ejemplo, un servidor de correo, entonces es más probable que -T -p 25 pueda alcanzarlo, incluso cuando -I no puede.

Este método utiliza la conocida "técnica de semi-apertura", que evita que las aplicaciones en el host de destino vean nuestras pruebas en absoluto. Normalmente, se envía un SYN TCP. Para los puertos que no se están escuchando, recibimos un RESET TCP, y todo está hecho. Para los puertos que están escuchando activamente, recibimos un SYN+ACK TCP, pero respondemos con un RESET TCP (en lugar del ACK TCP esperado), de esta manera, la sesión TCP remota se elimina incluso sin que la aplicación se dé cuenta.

Hay un par de opciones para el método TCP:

syn,ack,fin,rst,psh,urg,ece,cwr

Establece las banderas TCP especificadas para el paquete de prueba, en cualquier combinación.

flags=num

Establece el campo de banderas en el encabezado TCP exactamente en num.

ecn    Enviar un paquete SYN con las banderas TCP ECE y CWR (para la notificación explícita de congestión, rfc3168).

sack,timestamps,window_scaling

Utilice la opción correspondiente del encabezado TCP en el paquete de prueba saliente.


sysctl Utilice la configuración actual de sysctl (/proc/sys/net/*) para las opciones del encabezado TCP anteriores y ecn.

Se establece siempre por defecto, si no se especifica nada más.

fastopen

Utilice la opción TCP de fastopen (cuando se envía el SYN), solo para la negociación inicial de la cookie.

mss=[num]

Utilice el valor de num (o sin cambios) para la opción de encabezado TCP maxseg (cuando se envía el SYN) y descubra su limitación a lo largo de la ruta que se está rastreando. El nuevo valor de mss cambiado se imprime una vez en forma de M=NUM en el primer sondeo en el que se detectó. Tenga en cuenta que algunos enrutadores pueden devolver un fragmento original demasiado corto en el mensaje de tiempo excedido, lo que hace que la comprobación sea imposible. Además, las respuestas pueden llegar en un orden diferente. Todo esto puede dar lugar a que el informe se muestre más tarde (el uso de -N 1 puede ayudar con el orden).

info Imprima los indicadores TCP y las opciones admitidas de las respuestas TCP finales cuando se alcanza el host de destino. Permite determinar si una aplicación está escuchando el puerto y otras cosas útiles. Las opciones TCP admitidas son todas aquellas que se pueden establecer mediante -T -O, es decir, mss, sack, timestamps, window_scaling y fastopen, con el formato de salida similar (un valor para mss y solo la presencia para otros).

La opción predeterminada es syn, sysctl.

tcpconn

Una implementación inicial del método TCP, que simplemente utiliza la llamada connect(2), que realiza una apertura completa de la sesión TCP. No se recomienda para el uso normal, ya que siempre se ve afectada la aplicación de destino (y puede confundirse).

udp -U

Utilice un datagrama UDP con un puerto de destino constante (predeterminado 53, DNS). Tiene como objetivo evitar el firewall.

Tenga en cuenta que, a diferencia del método TCP, la aplicación correspondiente del host de destino siempre recibe nuestros sondeos (con datos aleatorios), y la mayoría puede confundirse fácilmente con ellos. En la mayoría de los casos, no responderá a nuestros paquetes, por lo que nunca veremos el último salto en el rastreo. (Afortunadamente, parece que al menos los servidores DNS responden con algo enojado).

Este método está permitido para usuarios no privilegiados.

udplite -UL

Utilice un datagrama Udplite para los sondeos (con un puerto de destino constante, predeterminado 53).

Este método está permitido para usuarios no privilegiados. Opciones:

coverage=num

Establezca la cobertura de envío de Udplite en num.

dccp -D

Utilice paquetes de solicitud DCCP para los sondeos (rfc4340).

Este método utiliza la misma "técnica de semi-apertura" que se utiliza para TCP. El puerto de destino predeterminado es 3343.

Opciones:

service=num

Establezca el código de servicio DCCP en num (el valor predeterminado es 1885957735).

raw -P proto

Envíe un paquete sin formato del protocolo proto. No se utilizan encabezados específicos del protocolo, solo el encabezado IP. Implica -N 1 -w 5. Opciones:

protocol=proto

Utilice el protocolo IP proto (el valor predeterminado es 253).

NOTAS

Para acelerar el trabajo, normalmente se envían varios sondeos simultáneamente. Por otro lado, esto crea una "tormenta de paquetes", especialmente en la dirección de la respuesta. Los enrutadores pueden limitar la velocidad de las respuestas ICMP, y algunas respuestas pueden perderse. Para evitar esto, disminuya el número de sondeos simultáneos o incluso establézcalo en 1 (como en la implementación inicial de traceroute), es decir, -N 1.

El host final (de destino) puede descartar algunas de las pruebas simultáneas, e incluso podría responder solo a las últimas. Esto puede generar mensajes adicionales de "parece que ha expirado" cerca del último salto. Utilizamos un algoritmo inteligente para detectar automáticamente esta situación, pero si no puede ayudar en su caso, simplemente use -N 1.

Para una mayor estabilidad, puede ralentizar el funcionamiento del programa con la opción -z, por ejemplo, use -z 5 para una pausa de medio segundo entre las pruebas.

Para evitar una espera adicional, utilizamos un algoritmo adaptativo para los tiempos de espera (consulte la opción -w para obtener más información). Esto puede provocar una expiración prematura (especialmente cuando los tiempos de respuesta varían) e imprimir un "*" en lugar del tiempo. En este caso, desactive este algoritmo especificando -w con el tiempo de espera deseado (por ejemplo, -w 5).

Si algunos saltos no informan nada para ningún método, la última opción para obtener algo es usar el comando ping -R (IPv4, y solo para los 8 saltos más cercanos).

VÉASE TAMBIÉN

ping(8), ping6(8), tcpdump(8), netstat(8)