Narzędzia do debugowania tabel routingu na komputerze z systemem Linux?

18

Czy istnieje narzędzie debugujące tabele routingu na komputerze z systemem Linux?

Mam na myśli jeden, którego mogę użyć, wprowadzając do niego adres IP, weźmie pod uwagę istniejącą tabelę routingu i wypisze dopasowania z tabeli, więc mogę się dowiedzieć, dokąd pójdą pakiety?

leeand00
źródło
1
Spośród tras i interfejsów zdefiniowanych dla hosta, po prostu chcesz wiedzieć, która trasa zostanie poprowadzona do danego adresu IP? Brzmi jak fajne narzędzie. Jeśli nie istnieje, można go napisać w dowolnej liczbie języków, nawet bash.
Andrew
Ile routerów jest podłączonych do twojego komputera z systemem Linux? Miałeś na myśli traceroutezamiast tego?
ott--

Odpowiedzi:

37

Zastosowanie ip route get. Od konfiguracji routingu sieciowego :

ip route getKomenda jest użyteczna funkcja, która pozwala na zapytanie trasę, na której system będzie wysyłać pakiety do osiągnięcia określonego adresu IP, na przykład:

# 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

W tym przykładzie pakiety do 23.6.118.140 są wysyłane z interfejsu eth0 przez bramę 10.0.2.2.

Mark Plotnick
źródło
Och, lubię to. +1
roaima
Hmm, więc na OpenWRT muszę tylko zainstalować iproute2, a może to zrobię? ifconfig jest domyślnie w zestawie, jestem pewien, że mogę dodać to z opkg ... ale gdyby nie było takiej opcji, odpowiedź roaima byłaby lepsza, jeśli iproute2 jest dostępny, to zadziała świetnie, dziękuję wy oboje.
leeand00
1
Nie mam OpenWRT, ale patrząc na ich dokumentację wygląda na to, że teraz nazywają to ippakietem.
Mark Plotnick
A oto zestaw narzędzi, który jest częścią: en.wikipedia.org/wiki/Iproute2
leeand00
Uhm ... czy to działa z routingiem opartym na zasadach? Powiedz, jak mogę śledzić routing specyficzny dla portu za pomocą iptables, reguł FWMARK?
mlt
2

Zapisz poniższy skrypt w przydatnym miejscu. Zadzwoń do niego z adresem IP, który chcesz przetestować, a podpowie ci odpowiednią trasę.

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

Przykładowe użycie

./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
źródło