在Linux机器上调试路由表的工具?


18

是否有工具可以在Linux机器上调试路由表?

我的意思是可以输入一个IP地址来使用它,它将考虑现有的路由表并从该表中输出匹配项,因此我可以了解数据包的去向?


1
在为主机定义的路由和接口中,您只想知道哪个路由将被用于给定的IP?听起来很酷。如果不存在,则可以用多种语言(甚至bash)编写。
安德鲁(Andrew)

您的linux机器上连接了多少个路由器?您是说意思traceroute吗?
ott

Answers:


36

使用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

在此示例中,通过网关10.0.2.2从eth0接口发送到23.6.118.140的数据包。


哦,我喜欢那样。+1
roaima 2015年

嗯,所以在OpenWRT上,我只需要安装iproute2,然后也许我可以这样做?ifconfig是默认情况下附带的所有内容,我敢肯定我可以将其与opkg一起添加...但是如果不是这样,roaima的答案会更好,如果iproute2可用,那么它将很好用,谢谢你们两个。
leeand00

1
我没有OpenWRT,但是从查看他们的文档开始,他们现在好像将其称为ip软件包。
马克·普洛特尼克

这是该工具集的一部分:en.wikipedia.org/wiki/Iproute2
leeand00 2015年

嗯...它适用于基于策略的路由吗?说如何使用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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.