如何跟踪传出接口?

网络工程 跟踪路由
2021-07-21 19:00:01

Unix 命令traceroute跟踪从源节点到目标节点的节点的 IP 地址。中间的每个节点都有一个传入和传出接口。

跟踪路由

执行traceroute -n dstonsrc将显示 src、dst 的 IP 地址以及其间跃点的所有传入接口。

但是如何跟踪传出 IP 地址呢?

更新

我尝试了该ping -R建议,但似乎不起作用。这是到公共 Web 服务器的跟踪路由:

$ ping -n -c 1 -R 212.227.222.9
PING 212.227.222.9 (212.227.222.9) 56(124) 字节数据。
来自 212.227.222.9 的 64 个字节:icmp_req=1 ttl=57 time=47.4 ms
回复:192.168.2.111
        169.254.1.1
        87.186.224.94
        62.154.76.34
        62.154.12.175
        212.227.117.13
        212.227.117.8
        10.71.3.253
        212.227.222.9


--- 212.227.222.9 ping 统计 ---
发送 1 个数据包,接收 1 个数据包,0% 数据包丢失,时间 0ms
rtt min/avg/max/mdev = 47.441/47.441/47.441/0.000 毫秒

这是我拨号连接的 IP 地址。

$ curl -s https://toolbox.googleapps.com/apps/browserinfo/info/ | jq -r .remoteAddr
93.192.75.247

但是一直没有被ping命令记录下来。原因是什么?

2个回答

我不是你问题的确切答案,而是一种简单(但有限)的方式来做(在某些情况下)你想要的。我正在处理 ping 手册页的选项 -R:

-R 记录路线。在 ECHO_REQUEST 数据包中包含 RECORD_ROUTE 选项并在返回的数据包上显示路由缓冲区请注意,IP 标头仅足以容纳九个这样的路由。许多主机忽略或放弃此选项。

因此,您还可以看到ECHO_REQUEST返回路径,除非传出路径与返回路径相同,否则这不是退出接口(您正在询问)。只有在这种情况下,返回路径才是您请求的出接口的 IP 地址。

这是我的互联网提供商网上的一个真实例子,可能不太清楚,但我现在还没有一些路由器可以相互链接:) 目的地 10.2.105.178

traceroute 10.2.105.178
traceroute to 10.2.105.178 (10.2.105.178), 30 hops max, 60 byte packets
 1  192.168.1.254 (192.168.1.254)  3.418 ms  3.575 ms  4.021 ms
 2  10.189.48.1 (10.189.48.1)  11.237 ms * *
 3  10.2.105.178 (10.2.105.178)  15.235 ms * *

ping -R 10.2.105.178 PING 10.2.105.178 (10.2.105.178) 56(124) 字节数据。

来自 10.2.105.178 的 64 个字节:icmp_req=5 ttl=253 time=74.1 ms NOP RR:

192.168.1.133

10.189.51.61

10.2.105.177

10.2.105.178

10.2.105.178

10.189.48.1

192.168.1.254

192.168.1.133

————略——

来自 10.2.105.178 的 64 个字节:icmp_req=6 ttl=253 time=13.0 ms NOP RR:

192.168.1.133

10.189.51.61

10.2.105.177

10.2.105.178

10.2.105.218 ##每次都变,不知道为什么##

10.189.48.1

192.168.1.254

192.168.1.133

根据RFC1812,路由器生成的 ICMP 消息的源地址应该是数据包通常返回到发送方的出口接口的地址。

实际上,您很可能会遇到非标准行为,即路由器将使用入口接口的源作为 ICMP 回复的源。这通常会使跟踪路由更容易阅读。

作为 YLearn 问题的后续行动,我将发布网络图和一些输出。 示例拓扑以说明 traceroute 的工作原理

假设我们正在使从 R5 的环回 5.5.5.5 到 R1 的环回 1.1.1.1 的跟踪路由变酸。如您所见,正向路径是通过 R4-R2,而反向路径是 R3-R4。

R4#sh ip route 1.1.1.1
Routing entry for 1.1.1.1/32
Known via "bgp 4", distance 20, metric 0
Tag 2, type external
Last update from 10.1.24.2 00:02:42 ago
Routing Descriptor Blocks:
* 10.1.24.2, from 10.1.24.2, 00:02:42 ago
  Route metric is 0, traffic share count is 1
  AS Hops 2

R1#sh ip route 5.5.5.5
Routing entry for 5.5.5.5/32
Known via "bgp 1", distance 20, metric 0
Tag 3, type external
Last update from 10.1.13.3 00:14:18 ago
Routing Descriptor Blocks:
* 10.1.13.3, from 10.1.13.3, 00:14:18 ago
  Route metric is 0, traffic share count is 1
  AS Hops 2
  Route tag 3
  MPLS label: none

R5 的 traceroute 输出如下所示:

R5#traceroute
Protocol [ip]:
Target IP address: 1.1.1.1
Source address: 5.5.5.5
Numeric display [n]:
Timeout in seconds [3]:
Probe count [3]:
Minimum Time to Live [1]:
Maximum Time to Live [30]:
Port Number [33434]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Type escape sequence to abort.
Tracing the route to 1.1.1.1
VRF info: (vrf in name/id, vrf out name/id)
1 10.1.45.4 208 msec 140 msec 100 msec
2 10.1.24.2 96 msec 44 msec 104 msec
3 10.1.12.1 224 msec 220 msec 112 msec

因此,当 R1 生成的实际 ICMP 流量通过 R3 返回 R5 时,ICMP Unreachable 消息的 IP 标头将具有入口接口 10.1.12.1 的来源。

根据我的经验,Cisco 和 Juniper 路由器的行为方式,我不确定其他供应商。