Tools zum Debuggen von Routing-Tabellen auf einem Linux-Computer?


17

Gibt es ein Tool zum Debuggen von Routingtabellen auf einem Linux-Computer?

Ich meine eine, die ich verwenden kann, indem ich eine IP-Adresse eingebe. Sie berücksichtigt die vorhandene Routing-Tabelle und gibt die Übereinstimmungen aus der Tabelle aus, damit ich eine Vorstellung davon bekomme, wohin die Pakete gehen werden.


1
Von den für den Host definierten Routen und Schnittstellen möchten Sie nur wissen, welche Route zu einer bestimmten IP-Adresse geführt wird. Klingt nach einem coolen Dienstprogramm. Wenn es keine gibt, kann es in einer beliebigen Anzahl von Sprachen geschrieben werden, sogar in Bash.
Andrew

Wie viele Router sind an Ihren Linux-Rechner angeschlossen? Meinten Sie traceroutestattdessen?
ott--

Antworten:


35

Verwenden Sie ip route get. So konfigurieren Sie das Netzwerkrouting :

Der ip route getBefehl ist eine nützliche Funktion, mit der Sie die Route abfragen können, auf der das System Pakete sendet, um eine bestimmte IP-Adresse zu erreichen. Beispiel:

# 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 diesem Beispiel werden Pakete an 23.6.118.140 von der eth0-Schnittstelle über das Gateway 10.0.2.2 gesendet.


Oh, das gefällt mir. +1
Roaima

Hmm so auf OpenWRT muss ich nur iproute2 installieren und dann kann ich das vielleicht machen? Ich bin mir sicher, dass ich es mit opkg hinzufügen kann, wenn config alles ist, was standardmäßig mitgeliefert wird. Aber wenn dies keine Option wäre, wäre Roaimas Antwort die bessere. Wenn iproute2 verfügbar ist, wird dies großartig funktionieren, danke Sie beide.
leeand00

1
Ich habe kein OpenWRT, aber wenn man sich die Dokumentation ansieht, sieht es so aus, als würde man es jetzt das ipPaket nennen.
Mark Plotnick

Und hier ist das Tool-Set, aus dem es stammt: en.wikipedia.org/wiki/Iproute2
leeand00

Ähm ... funktioniert es mit richtlinienbasiertem Routing? Wie kann ich portspezifisches Routing mit iptables und FWMARK-Regeln verfolgen?
mlt

2

Speichern Sie das folgende Skript an einem nützlichen Ort. Rufen Sie es mit der IP-Adresse auf, die Sie testen möchten, und es zeigt Ihnen die entsprechende Route an.

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

Anwendungsbeispiel

./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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.