Інструменти для налагодження таблиць маршрутизації на машині Linux?


18

Чи є інструмент, який налагоджує таблиці маршрутизації на машині Linux?

Я маю на увазі одну, яку я можу використовувати, ввівши в неї ip-адресу, вона врахує існуючу таблицю маршрутизації та виведе відповідність із таблиці, тож я можу отримати уявлення, куди будуть йти пакети?


1
З маршрутів та інтерфейсів, визначених для хоста, ви просто хочете знати, який маршрут буде прийнятий до даного IP? Звучить як крута утиліта. Якщо такої не існує, вона може бути написана будь-якою кількістю мов, навіть bash.
Андрій

Скільки маршрутизаторів підключено до вашої машини Linux? Ви мали на увазі tracerouteзамість цього?
ott--

Відповіді:


37

Використовуйте 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
roaima

Гм, так на OpenWRT мені просто потрібно встановити iproute2, а потім, можливо, я можу це зробити? ifconfig - це все, що постачається з ним за замовчуванням, я впевнений, що я можу додати його до опгг ... але якби це не варіант, відповідь roaima була б кращою, якщо iproute2 доступний, тоді це буде чудово, дякую ви обоє.
leeand00

1
У мене немає OpenWRT, але з огляду на їх документацію, схоже, зараз вони називають це ip пакетом.
Марк Плотнік

І ось набір інструментів є частиною: en.wikipedia.org/wiki/Iproute2
leeand00

Гм ... це працює з маршрутизацією на основі політики? Скажіть, як я можу простежити за маршрутом маршрутизацію за допомогою iptables, правил FWMARK?
mlt

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.