这是在 unix 环境中。我在主机中有多条路由(使用“ip route show”命令可见)。如果我正在 ping 一个地址,如何找出哪个网关用于路由流量?
我尝试使用 traceroute 命令,但它没有显示直接网关。
从下面的输出来看,10.58.227.1 是我的默认网关。
# ip r l
10.58.227.0/24 dev front_eth1 proto kernel scope link src 10.58.227.231
169.254.0.0/17 dev bond0 proto kernel scope link src 169.254.0.4
default via 10.58.227.1 dev front_eth1 proto gated
当我对外部地址进行跟踪路由时,使用的网关(默认网关 10.58.227.1)未显示在输出中。
# traceroute -n -I 10.63.21.118
traceroute to 10.63.21.118 (10.63.21.118), 30 hops max, 40 byte packets
1 10.58.112.1 0.507 ms 1.008 ms 1.017 ms
2 10.63.21.118 0.228 ms 0.233 ms 0.234 ms
是否有任何选项可以查看与 traceroute 命令给出的相同信息,包括用于路由的网关?
答案1
您可以使用该ip route get <address>
命令要求内核报告将数据包发送到指定地址所使用的路由:
$ ip route get 4.2.2.1
4.2.2.1 via 192.168.0.1 dev eth0 src 192.168.0.121
cache
$
192.168.0.1
是我的默认路由。如果我请求一个不经过默认路由的地址:
$ ip route get 192.168.0.116
192.168.0.116 dev eth0 src 192.168.0.121
cache
$