Các công cụ để gỡ lỗi các bảng định tuyến trên máy Linux?


17

Có công cụ nào gỡ lỗi các bảng định tuyến trên máy Linux không?

Ý tôi là một cái mà tôi có thể sử dụng bằng cách nhập địa chỉ IP vào nó, nó sẽ đưa bảng định tuyến hiện có vào tài khoản và xuất các kết quả khớp từ bảng, vì vậy tôi có thể biết được các gói sẽ đi đâu không?


1
Trong số các tuyến đường và giao diện được xác định cho máy chủ lưu trữ, bạn chỉ muốn biết tuyến đường nào sẽ được đưa đến một IP nhất định? Âm thanh như một tiện ích tuyệt vời. Nếu không tồn tại, nó có thể được viết bằng bất kỳ số ngôn ngữ nào, thậm chí là bash.
Andrew

Có bao nhiêu bộ định tuyến được kết nối với máy linux của bạn? Ý bạn là traceroutethay thế?
ott--

Câu trả lời:


35

Sử dụng ip route get. Từ cấu hình định tuyến mạng :

Các ip route getlệnh là một tính năng hữu ích cho phép bạn truy vấn con đường mà trên đó hệ thống sẽ gửi các gói tin để đạt được một địa chỉ IP được chỉ định, ví dụ:

# 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

Trong ví dụ này, các gói đến 23.6.118.140 được gửi ra khỏi giao diện eth0 thông qua cổng 10.0.2.2.


Ồ, tôi làm như thế. +1
roaima

Hmm vì vậy trên OpenWRT tôi chỉ cần cài đặt iproute2 và sau đó có lẽ tôi có thể làm điều này? ifconfig là tất cả những gì đi kèm với nó theo mặc định, tôi chắc chắn rằng tôi có thể thêm nó vào với opkg ... nhưng nếu đó không phải là một lựa chọn thì câu trả lời của roaima sẽ tốt hơn, nếu iproute2 có sẵn thì điều này sẽ rất tốt, cảm ơn cả hai bạn.
leeand00

1
Tôi không có OpenWRT, nhưng nhìn vào tài liệu của họ, có vẻ như bây giờ họ gọi nó là ipgói.
Đánh dấu Plotnick

Và đây là công cụ thiết lập nó là một phần của: en.wikipedia.org/wiki/Iproute2
leeand00

Uhm ... nó có hoạt động với định tuyến dựa trên chính sách không? Nói làm thế nào để tôi theo dõi định tuyến cụ thể của cổng với iptables, quy tắc FWophone?
mlt

2

Lưu tập lệnh sau đây ở đâu đó hữu ích. Gọi nó với Địa chỉ IP mà bạn muốn kiểm tra và nó sẽ cho bạn biết tuyến đường tương ứng.

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

Ví dụ sử dụng

./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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.