เครื่องมือสำหรับการดีบักตารางเส้นทางในเครื่อง Linux?


18

มีเครื่องมือที่ debugs ตารางเส้นทางบนเครื่อง Linux หรือไม่?

ฉันหมายถึงที่ฉันสามารถใช้โดยการป้อนที่อยู่ ip ลงไปมันจะนำตารางเส้นทางที่มีอยู่มาพิจารณาและเอาท์พุทการแข่งขันจากตารางดังนั้นฉันจะได้รับความคิดว่าแพ็กเก็ตจะไปไหน


1
จากเส้นทางและอินเทอร์เฟซที่กำหนดไว้สำหรับโฮสต์คุณเพียงแค่ต้องการทราบเส้นทางที่จะถูกนำไปที่ IP ที่กำหนด? เสียงเหมือนยูทิลิตี้ที่ยอดเยี่ยม หากไม่มีอยู่ก็สามารถเขียนได้หลายภาษาแม้แต่ทุบตี
Andrew

เราเตอร์เชื่อมต่อกับเครื่อง 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 คือทั้งหมดที่มาพร้อมกับมันโดยค่าเริ่มต้นฉันแน่ใจว่าฉันสามารถเพิ่มในด้วย opkg ... แต่ถ้านั่นไม่ใช่ตัวเลือกคำตอบ roaima จะดีกว่าถ้า iproute2 ใช้ได้แล้วมันจะทำงานได้ดีขอบคุณ คุณทั้งคู่.
leeand00

1
ฉันไม่มี OpenWRT แต่จากการดูเอกสารของพวกเขาดูเหมือนว่าพวกเขาเรียกมันว่าipแพ็คเกจ
Mark Plotnick

และนี่คือชุดเครื่องมือที่เป็นส่วนหนึ่งของ: 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.