Linux Makinesinde Yönlendirme Tablolarında Hata Ayıklama Araçları?


19

Bir Linux makinesinde yönlendirme tablolarında hata ayıklayan bir araç var mı?

Bir ip adresi girerek kullanabileceğim bir şey, mevcut yönlendirme tablosunu dikkate alacak ve eşleşmeleri tablodan çıkaracak, böylece paketlerin nereye gideceği hakkında bir fikir edinebilir miyim?


1
Ana bilgisayar için tanımlanan yollar ve arabirimlerden, belirli bir IP'ye hangi yolun götürüleceğini bilmek ister misiniz? Harika bir yardımcı program gibi geliyor. Hiçbiri yoksa bash dahil olmak üzere herhangi bir sayıda dilde yazılabilir.
Andrew

Linux makinenize kaç yönlendirici bağlı? Bunu mu demek istediniz traceroute?
ott--

Yanıtlar:


39

Kullanın ip route get. Gönderen Yapılandırma Ağ Yönlendirme :

ip route getKomut sistem, örneğin belirli bir IP adresi ulaşması paketleri gönderecek hangi rotayı sorgulamak için kullanılan yararlı bir özelliktir:

# 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

Bu örnekte 23.6.118.140'a kadar olan paketler 10.0.2.2 ağ geçidi üzerinden eth0 arayüzünden gönderilir.


Oh, bunu sevdim. +1
roaima

Hmm OpenWRT üzerinde sadece iproute2 yüklemek zorunda ve sonra belki bunu yapabilirim? ifconfig varsayılan olarak onunla birlikte gelirse, eminim opkg ile ekleyebilirim ... ama bu bir seçenek olmasaydı roaima'nın cevabı daha iyi olurdu, iproute2 mevcutsa bu harika çalışır, teşekkürler ikiniz de.
leeand00

1
OpenWRT'm yok, ancak belgelerine baktığımızda şimdi ippaket diyorlar gibi görünüyor .
Mark Plotnick

Ve işte bunun bir parçası olan araç seti: en.wikipedia.org/wiki/Iproute2
leeand00

Uhm ... politika tabanlı yönlendirme ile çalışıyor mu? Iptables, FWMARK kuralları ile bağlantı noktasına özgü yönlendirmeyi nasıl izleyebilirim?
mlt

2

Aşağıdaki komut dosyasını yararlı bir yere kaydedin. Test etmek istediğiniz IP Adresi ile çağırın ve size ilgili rotayı söyleyecektir.

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

Örnek kullanım

./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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.