Outils de débogage des tables de routage sur une machine Linux?

18

Existe-t-il un outil qui débogue les tables de routage sur une machine Linux?

Je veux dire une que je peux utiliser en y entrant une adresse IP, elle prendra en compte la table de routage existante et affichera les correspondances à partir de la table, donc je peux avoir une idée où iront les paquets?

leeand00
la source
1
Parmi les routes et interfaces définies pour l'hôte, vous voulez simplement savoir quelle route sera prise vers une IP donnée? Cela ressemble à un utilitaire cool. S'il n'en existe pas, il pourrait être écrit dans n'importe quel nombre de langues, même bash.
Andrew
Combien de routeurs sont connectés à votre machine Linux? Voulez-vous dire à la tracerouteplace?
ott--

Réponses:

36

Utilisez ip route get. Depuis Configuration du routage réseau :

La ip route getcommande est une fonctionnalité utile qui vous permet d'interroger la route sur laquelle le système enverra des paquets pour atteindre une adresse IP spécifiée, par exemple:

# 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

Dans cet exemple, les paquets vers 23.6.118.140 sont envoyés hors de l'interface eth0 via la passerelle 10.0.2.2.

Mark Plotnick
la source
Oh, j'aime ça. +1
roaima
Hmm ainsi de suite OpenWRT Je dois juste installer iproute2 et peut-être puis-je le faire? ifconfig est tout ce qui vient avec par défaut, je suis sûr que je peux l'ajouter avec opkg ... mais si ce n'était pas une option, la réponse de roaima serait la meilleure, si iproute2 est disponible, cela fonctionnera très bien, merci Vous deux.
leeand00
1
Je n'ai pas OpenWRT, mais en regardant leur documentation, il semble qu'ils l'appellent maintenant le ippackage.
Mark Plotnick
Et voici l'ensemble d'outils dont il fait partie: en.wikipedia.org/wiki/Iproute2
leeand00
Uhm ... ça marche avec le routage basé sur les politiques? Dites comment puis-je suivre le routage spécifique au port avec iptables, les règles FWMARK?
mlt
2

Enregistrez le script suivant dans un endroit utile. Appelez-le avec l'adresse IP que vous souhaitez tester et il vous indiquera l'itinéraire correspondant.

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

Exemple d'utilisation

./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
la source