Инструменты для отладки таблиц маршрутизации на компьютере с Linux?

18

Существует ли инструмент для отладки таблиц маршрутизации на компьютере с Linux?

Я имею в виду тот, который я могу использовать, введя в него IP-адрес, он примет во внимание существующую таблицу маршрутизации и выведет совпадения из таблицы, чтобы я мог понять, куда будут отправляться пакеты?

leeand00
источник
1
Из маршрутов и интерфейсов, определенных для хоста, вы просто хотите узнать, какой маршрут будет выбран для данного IP? Похоже, крутая утилита. Если ничего не существует, он может быть написан на любом количестве языков, даже на bash.
Андрей
Сколько маршрутизаторов подключено к вашей машине Linux? Вы имели в виду tracerouteвместо этого?
ot--

Ответы:

36

Использование ip route get. Из настройки сетевой маршрутизации :

Команда ip route getявляется полезной функцией, которая позволяет запрашивать маршрут, по которому система будет отправлять пакеты для достижения указанного IP-адреса, например:

# 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

В этом примере пакеты к 23.6.118.140 отправляются из интерфейса eth0 через шлюз 10.0.2.2.

Марк Плотник
источник
О, мне так нравится. +1
роайма
Хм, так что на OpenWRT мне просто нужно установить iproute2 и тогда, может быть, я смогу это сделать? ifconfig - это все, что поставляется с ним по умолчанию, я уверен, что могу добавить его с помощью opkg ... но если бы это не было вариантом, ответ roaima был бы лучше, если iproute2 доступен, то это будет работать отлично, спасибо вы оба.
leeand00
1
У меня нет OpenWRT, но, глядя на их документацию, похоже, они теперь называют это ipпакетом.
Марк Плотник
И вот набор инструментов, частью которого он является: en.wikipedia.org/wiki/Iproute2
leeand00
Хм ... это работает с политикой маршрутизации? Скажите, как я могу отследить маршрутизацию для конкретного порта с помощью правил iptables, FWMARK?
MMT
2

Сохраните следующий скрипт где-нибудь полезным. Назовите его с IP-адресом, который вы хотите проверить, и он сообщит вам соответствующий маршрут.

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

Пример использования

./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
источник