¿Herramientas para depurar tablas de enrutamiento en una máquina Linux?

18

¿Existe una herramienta que depure las tablas de enrutamiento en una máquina Linux?

Me refiero a uno que puedo usar ingresando una dirección IP, tomará en cuenta la tabla de enrutamiento existente y generará las coincidencias de la tabla, para que pueda tener una idea de dónde irán los paquetes.

leeand00
fuente
1
De las rutas e interfaces definidas para el host, ¿solo desea saber qué ruta se tomará para una IP determinada? Suena como una buena utilidad. Si no existe ninguno, podría escribirse en cualquier número de idiomas, incluso bash.
Andrew
¿Cuántos enrutadores están conectados a su máquina Linux? ¿Quiso decir en su traceroutelugar?
ott--

Respuestas:

36

Uso ip route get. Desde Configuración de enrutamiento de red :

El ip route getcomando es una característica útil que le permite consultar la ruta en la que el sistema enviará paquetes para llegar a una dirección IP específica, por ejemplo:

# ip route get 23.6.118.140
23.6.118.140 via 10.0.2.2 dev eth0 src 10.0.2.15
cache mtu 1500 advmss 1460 hoplimit 64

En este ejemplo, los paquetes a 23.6.118.140 se envían desde la interfaz eth0 a través de la puerta de enlace 10.0.2.2.

Mark Plotnick
fuente
Oh, me gusta eso +1
roaima 23/03/2015
Hmm, entonces en OpenWRT solo tengo que instalar iproute2 y luego ¿tal vez puedo hacer esto? ifconfig es todo lo que viene por defecto, estoy seguro de que puedo agregarlo con opkg ... pero si esa no fuera una opción, la respuesta de roaima sería la mejor, si iproute2 está disponible, esto funcionará muy bien, gracias ambos.
leeand00
1
No tengo OpenWRT, pero al mirar su documentación parece que ahora lo llaman el ippaquete.
Mark Plotnick
Y aquí está el conjunto de herramientas del que forma parte: en.wikipedia.org/wiki/Iproute2
leeand00 el
Uhm ... ¿funciona con enrutamiento basado en políticas? ¿Cómo puedo rastrear el enrutamiento específico del puerto con iptables, reglas FWMARK?
mlt
2

Guarde el siguiente script en algún lugar útil. Llámelo con la dirección IP que desea probar y le indicará la ruta correspondiente.

#!/bin/bash
#
# Find the appropriate routing entry for a given IP address
########################################################################

########################################################################
# Calculate the base network address for a given addres and netmask
#
baseNet() {
    local ADDRESS="$1" NETMASK="$2"
    ipcalc -nb "$ADDRESS" "$NETMASK" | awk '$1=="Network:"{print $2}'
}

########################################################################
# Go
#
for IPADDRESS in "$@"
do
    netstat -rn |
        tac |
        while read DESTINATION GATEWAY GENMASK FLAGS MSS WINDOW IRTT IFACE
        do
            NSBASENET=$(baseNet "$DESTINATION" "$GENMASK")
            IPBASENET=$(baseNet "$IPADDRESS" "$GENMASK")
            if test "X$NSBASENET" = "X$IPBASENET"
            then
                if test '0.0.0.0' = "$GATEWAY"
                then
                    echo "Matches $DESTINATION with netmask $GENMASK directly on $IFACE"
                else
                    echo "Matches $DESTINATION with netmask $GENMASK via $GATEWAY on $IFACE"
                fi
                break
            fi
        done
done

# All done
#
exit 0

Ejemplo de uso

./what-route.sh 10.0.5.6
Matches 0.0.0.0 with netmask 0.0.0.0 via 10.0.2.2 on eth0
./what-route.sh 10.0.2.6
Matches 10.0.2.0 with netmask 255.255.255.0 directly on eth0
roaima
fuente