Alat untuk Tabel Perutean Debugging pada Mesin Linux?

18

Apakah ada alat yang debug tabel routing pada mesin Linux?

Maksud saya yang bisa saya gunakan dengan memasukkan alamat ip ke dalamnya, itu akan mengambil tabel routing yang ada ke akun dan output pertandingan dari tabel, jadi saya bisa mendapatkan ide di mana paket akan pergi?

Leandand00
sumber
1
Dari rute dan antarmuka yang ditentukan untuk host, Anda hanya ingin tahu rute mana yang akan dibawa ke IP yang diberikan? Kedengarannya seperti utilitas keren. Jika tidak ada, itu bisa ditulis dalam sejumlah bahasa, bahkan bash.
Andrew
Berapa banyak router yang terhubung ke mesin linux Anda? Apakah maksud Anda traceroutesebagai gantinya?
ott--

Jawaban:

36

Gunakan ip route get. Dari Mengkonfigurasi Routing Jaringan :

The ip route getperintah adalah fitur yang berguna yang memungkinkan Anda untuk query rute di mana sistem akan mengirimkan paket untuk mencapai alamat IP tertentu, misalnya:

# 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

Dalam contoh ini, paket ke 23.6.118.140 dikirim keluar dari antarmuka eth0 melalui gateway 10.0.2.2.

Tandai Plotnick
sumber
Oh, aku suka itu. +1
roaima
Hmm jadi pada OpenWRT saya hanya perlu menginstal iproute2 dan kemudian mungkin saya bisa melakukan ini? ifconfig adalah semua yang datang dengan itu secara default, saya yakin saya dapat menambahkannya dengan opkg ... tetapi jika itu bukan pilihan jawaban roaima akan menjadi yang lebih baik, jika iproute2 tersedia maka ini akan bekerja dengan baik, terima kasih kalian berdua.
leeand00
1
Saya tidak memiliki OpenWRT, tetapi dari melihat dokumentasi mereka sepertinya mereka sekarang menyebutnya ippaket.
Mark Plotnick
Dan inilah alat yang mengaturnya adalah bagian dari: en.wikipedia.org/wiki/Iproute2
leeand00
Uhm ... apakah itu berfungsi dengan routing berbasis kebijakan? Katakanlah bagaimana cara melacak perutean port khusus dengan iptables, aturan FWMARK?
mlt
2

Simpan skrip berikut di tempat yang berguna. Sebut dengan Alamat IP yang ingin Anda uji dan itu akan memberi tahu Anda rute yang sesuai.

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

Contoh penggunaan

./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
sumber