本文档帮助排除由指向错误接口的有效缓存思科快速转发邻接关系导致的思科快速转发(CEF)路由环路和次优路由故障。由于以下原因,创建了与不正确接口的邻接关系:
静态路由直接指向多路访问接口。
通过代理地址解析协议(ARP)应答,可以建立有效的思科快速转发邻接。
使用这些资源以更好地了解本文档使用的一些概念:
本文档不限于特定的软件和硬件版本。
有关文件规则的更多信息请参见“ Cisco技术提示规则”。
路由器R1通过Serial 8/0连接到R3,路由器R2通过Serial 8/0连接到R4。R1和R2通过Ethernet 0/0连接,如图所示。
R2从R4接收10.10.34.0/24的外部边界网关协议(eBGP)前缀更新。R2通过内部BGP(iBGP)将此前缀传播到R1。
R2具有指向R4的Serial 8/0 IP地址10.10.24.4的静态默认路由(0.0.0.0/0)。
R2还有一个备用浮动默认路由(IP route 0.0.0.0 0.0.0.0 Ethernet0/0 10),该路由指向接口Ethernet 0/0,以便在R2和R4之间的串行连接失败时路由数据包。
R1的默认路由指向R3的Serial 8/0,IP地址为10.10.13.3。
发往10.10.34.0/24的IP流量在R1和R2之间环路。观察R1上的traceroute 命令输出。
R1#traceroute 10.10.34.4 Type escape sequence to abort. Tracing the route to 10.10.34.4 1 192.168.12.2 20 msec 20 msec 20 msec 2 192.168.12.1 8 msec 12 msec 8 msec 3 192.168.12.2 8 msec 8 msec 12 msec 4 192.168.12.1 12 msec ...
请注意,R1的Ethernet 0/0(IP地址192.168.12.1)和R2的Ethernet 0/0(IP地址192.168.12.2)之间发往10.10.34.4跳的流量。 理想情况下,由于iBGP获知的前缀10.10.34.0/24,从R1发往10.10.34.0/24的流量需要到达R2。然后,从R2,流量应路由到R4。但是,traceroute命令输出确认了R1和R2之间的路由环路。
R1 |
---|
hostname R1 ! ip subnet-zero ! ip cef ! interface Ethernet0/0 ip address 192.168.12.1 255.255.255.0 ! interface Serial8/0 ip address 10.10.13.1 255.255.255.0 ! router bgp 11 no synchronization bgp log-neighbor-changes neighbor 10.10.13.3 remote-as 12 neighbor 192.168.12.2 remote-as 11 no auto-summary ! ip route 0.0.0.0 0.0.0.0 10.10.13.3 |
R2 |
---|
hostname R2 ! ip cef ! interface Ethernet0/0 ip address 192.168.12.2 255.255.255.0 ! interface Serial8/0 ip address 10.10.24.2 255.255.255.0 ! router bgp 11 no synchronization bgp log-neighbor-changes network 192.168.12.0 neighbor 10.10.24.4 remote-as 10 neighbor 192.168.12.1 remote-as 11 neighbor 192.168.12.1 next-hop-self no auto-summary ! ip route 0.0.0.0 0.0.0.0 10.10.24.4 ip route 0.0.0.0 0.0.0.0 Ethernet0/0 10 ! |
由于发往10.10.34.4的数据包在R1和R2之间环路,因此请开始排除故障。首先检查R1上的IP路由。show ip route 10.10.34.0 命令输出确认了发往10.10.34.0/24的数据包的下一跳为192.168.12.2。这与traceroute 命令的第一跳匹配,其中数据包发送到下一跳192.2168.12.2,确认数据包在R1上正确交换。
R1#show ip route 10.10.34.0 Routing entry for 10.10.34.0/24 Known via "bgp 11", distance 200, metric 0 Tag 10, type internal Last update from 192.168.12.2 00:22:59 ago Routing Descriptor Blocks: * 192.168.12.2, from 192.168.12.2, 00:22:59 ago Route metric is 0, traffic share count is 1 AS Hops 1
下一步是检查R2的IP路由表。如此show ip route 10.10.34.0命令输出所示,发往10.10.34.0的数据包应路由到Serial 8/0上的下一跳10.10.24.4。但是,traceroute命令显示交换回R1的数据包到IP地址192.168.12.1。需要进一步调查为什么发往10.10.34.0的数据包在R2上切换到下一跳192.168.12.1(如traceroute命令的输出所示)到10.10.24.4。
R2#show ip route 10.10.34.0 Routing entry for 10.10.34.0/24 Known via "bgp 11", distance 20, metric 0 Tag 10, type external Last update from 10.10.24.4 00:42:32 ago Routing Descriptor Blocks: * 10.10.24.4, from 10.10.24.4, 00:42:32 ago Route metric is 0, traffic share count is 1 AS Hops 1
此时,必须了解在思科快速转发交换网络中,数据包转发决策包括:
查找最长前缀匹配的路由表。
转发信息库(FIB)查找。
由于路由表已经过验证,请查看Cisco快速转发FIB。在show ip cef 10.10.34.4 detail命令的结果中,请注意Cisco快速转发交换机10.10.34.4输出Ethernet 0/0,而不是下一跳10.10.24.4输出Serial 8/0(如show ip route 10.10所示)。34.0命令输出)。 这种差异在网络中造成环路。
R2#show ip cef 10.10.34.4 detail 10.10.34.4/32, version 19, cached adjacency 10.10.34.4 0 packets, 0 bytes via 10.10.34.4, Ethernet0/0, 0 dependencies next hop 10.10.34.4, Ethernet0/0 valid cached adjacency
下一步是查看Cisco快速转发邻接表,了解Cisco快速转发如何学习将数据包从Ethernet 0/0交换出去。请注意,邻接是因为ARP而建立的。
R2#show adjacency ethernet 0/0 detail | begin 10.10.34.4 IP Ethernet0/0 10.10.34.4(5) 50 packets, 2100 bytes AABBCC006500AABBCC0066000800 ARP 03:02:00
此show ip arp命令输出是确认输出。
R2#show ip arp 10.10.34.4 Protocol Address Age (min) Hardware Addr Type Interface Internet 10.10.34.4 60 aabb.cc00.6500 ARPA Ethernet0/0
接下来,了解当路由表中有IP路由时为什么创建此ARP条目。再次查看路由表。
R2#show run | include ip route 0.0.0.0 ip route 0.0.0.0 0.0.0.0 10.10.24.4 ip route 0.0.0.0 0.0.0.0 Ethernet0/0 10
如果R2和R4之间的串行连接失败,则所有流量都通过使用浮动静态路由从Ethernet 0/0路由出去,因为R2具有指向R1的多路访问接口Ethernet 0/0的浮动静态路由,而不是指向R1的以太网IP地址192.168.12.1。因此,对于所有未知目标,路由器R2通过Ethernet0/0接口发出ARP请求。在这种情况下,R2丢失了通往10.10.34.0网络的更具体的路由。因此,当数据包到达此网络中的主机时,它会通过以太网接口生成ARP请求。由于代理ARP在R1的以太网接口上默认启用,并且它有指向R3的默认路由,因此它使用自己的MAC地址以代理ARP应答作为回复。因此,R2将所有流量发送到R1,R1使用其默认路由(0.0.0.0/0)将所有流量转发到AS 12,然后通过Internet转发到10.10.34.4。
当R2收到来自R1的代理ARP应答时,它会创建/32有效的Cisco快速转发邻接关系,该邻接关系指向接口Ethernet 0/0。此Cisco快速转发条目不会过期,直到代理ARP路由器R1出现在以太网网段上。因此,即使R2和R4之间的串行连接恢复,且路由表默认路由指向AS 10的Serial 8/0,/32 Cisco Express Forwarding条目仍然用于Cisco Express Forwarding交换数据包。结果是路由环路。
最后,查看日志并查看串行链路(s8/0)是否已断开。这会导致浮动静态路由安装在路由表中,然后会导致代理ARP,并导致在思科快速转发FIB中安装10.10.34.4/32的思科快速转发条目。
R2#show log | beg Ethernet0/0 [..] %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial8/0, changed state to down %BGP-5-ADJCHANGE: neighbor 10.10.24.4 Down Interface flap %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial8/0, changed state to up %BGP-5-ADJCHANGE: neighbor 10.10.24.4 Up
日志确认了原因。总之,以下步骤显示事件的顺序:
R2上的Serial 8/0关闭。
R2有发往10.10.34.4的数据包。
R2沿备用默认路由直接指向Ethernet 0/0。
R2发送ARP请求,请求10.10.34.4。
R1(代理)使用自己的MAC地址回复ARP请求到R2。
R2现在有一个ARP条目,用于10.10.34.4,MAC地址为R1。
R2为10.10.34.4创建思科快速转发邻接关系,并且通过Ethernet 0/0在思科快速转发表(FIB)中为此目标安装了10.10.34.4/32条目。只要ARP条目有效或R1在以太网网段上存在,此思科快速转发条目就会保持。
R2上的Serial 8/0已启动。
R2从R4获取下一跳为10.10.24.4的eBGP路由10.10.34.0/24,并将该路由安装到IP路由表中。
R1通过iBGP从R2获取前缀10.10.34.0/24,并将其安装到IP路由表中。
R1有发往10.10.34.4的数据包。
R1查看其路由表,匹配到R2的iBGP前缀路由和到R2的路由。
R2收到发往10.10.34.4的数据包。由于它已经有一个指向10.10.34.4/32的思科快速转发条目,该条目指向其FIB表中的Ethernet 0/0且MAC地址为R1,因此它不查看路由表就将数据包发回R1。这会产生一个环路。
将直接指向Ethernet 0/0的浮动静态路由替换为指向下一跳地址的浮动静态路由。
R2(config)#no ip route 0.0.0.0 0.0.0.0 ethernet 0/0 10 R2(config)# ip route 0.0.0.0 0.0.0.0 192.168.12.1 10
如果静态路由指向下一跳IP地址,而不是多路访问接口Ethernet 0/0,它将阻止R2向所有目标发送ARP请求。数据包根据下一跳192.168.12.1路由和交换。因此,避免了任何ARP思科快速转发条目和环路。
观察R2上指向正确接口Serial 8/0的Cisco快速转发条目。
R2#show ip cef 10.10.34.4 10.10.34.0/24, version 32, cached adjacency to Serial8/0 0 packets, 0 bytes via 10.10.24.4, 0 dependencies, recursive next hop 10.10.24.4, Serial8/0 via 10.10.24.0/24 valid cached adjacency