Strumenti per il debug delle tabelle di routing su una macchina Linux?


18

Esiste uno strumento che esegue il debug delle tabelle di routing su una macchina Linux?

Voglio dire uno che posso usare inserendo un indirizzo IP in esso, prenderà in considerazione la tabella di routing esistente e produrrà le corrispondenze dalla tabella, così posso avere un'idea di dove andranno i pacchetti?


1
Delle route e delle interfacce definite per l'host, vuoi solo sapere quale route verrà presa per un determinato IP? Sembra una bella utility. Se non esiste nessuno, potrebbe essere scritto in qualsiasi numero di lingue, anche bash.
Andrew,

Quanti router sono collegati alla tua macchina linux? Intendi tracerouteinvece?
ott--

Risposte:


36

Usa ip route get. Dalla configurazione del routing di rete :

Il ip route getcomando è una funzione utile che consente di eseguire una query sul percorso su cui il sistema invierà i pacchetti per raggiungere un indirizzo IP specificato, ad esempio:

# 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

In questo esempio, i pacchetti al 23.6.118.140 vengono inviati dall'interfaccia eth0 tramite il gateway 10.0.2.2.


Oh, mi piace. +1
roaima,

Hmm quindi su OpenWRT devo solo installare iproute2 e quindi forse posso farlo? ifconfig è tutto ciò che viene fornito di default, sono sicuro di poterlo aggiungere con opkg ... ma se non fosse un'opzione la risposta di roaima sarebbe la migliore, se iproute2 è disponibile, allora funzionerà benissimo, grazie entrambi.
leeand00,

1
Non ho OpenWRT, ma guardando la loro documentazione sembra che ora lo chiamino il ippacchetto.
Mark Plotnick,

Ed ecco il set di strumenti di cui fa parte: en.wikipedia.org/wiki/Iproute2
leeand00

Uhm ... funziona con il routing basato su policy? Dì come posso tracciare il routing specifico della porta con iptables, regole FWMARK?
mlt

2

Salva il seguente script in qualche posto utile. Chiamalo con l'indirizzo IP che vuoi testare e ti dirà il percorso corrispondente.

#!/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

Esempio di utilizzo

./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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.