信息技术的飞速发展、网络技术也在不断的更新迭代,但是有这么一种技术它无法替代,它负责在网络中获取信息、穿梭找路,它就是路由协议。在网络建设和运维过程中,不管是简单还是复杂的网络组网架构,或多或少你总能遇到一些路由雷区,也就是因为这些雷区让你从中得到经验积累,同时也能够让你时刻保持着一颗敬畏之心。网络作为连接业务底层基础设施的一部分,它承载着企业的关键业务和数据流量,一旦发生问题不仅企业利益受到损失,用户体验也会受到损坏。本篇小文来自于一名从事网络工作十多年的老兵,总结在网络路由协议下不常见但很致命的路由环路的案例,以及分享网络路由协议配置过程中的避雷小建议。
案例一:静态路由配置缺少指定下一跳出接口导致环路
拓扑环境:
案例说明:
广域网路由器CR1配置静态路由192.168.0.0/16下一跳指向机构交换机;
广域网路由器CR1将静态路由重分布至OSPF,五类LSA类型为Type 1;
核心交换机学习到广域网路由器CR1发来的OSPF路由,核心交换机去往192.168.0.0/16下一跳为CR1;
由于项目需要,新增加一台广域网路由器CR2计划替换CR1路由器,CR2路由器除了上联核心交换机配置与CR1不一致,其他配置均和CR1一致,包括下联机构交换机的静态路由配置;
新增加的广域网CR2路由器与核心交换机进行并网,建立OSPF邻居关系;
路由环路出现:当CR2与核心交换机并网后,PC访问机构的一半业务出现中断,在核心交换机查看机构路由192.168.0.0/16,发现去往192.168.0.0/16路由出现等价负载两个下一跳,分别是CR1和CR2路由器;在CR2上查看机构路由192.168.0.0/16下一跳为核心交换机;此时机构路由192.168.0.0/16在核心换机和广域网路由器CR2之间环路;
问题原因:在此案例场景下,广域网路由器CR2配置下联机构静态路由,虽然CR2上的下联机构接口处于DOWN状态,但是静态路由配置的下一跳地址可达,也就是CR2上有1.1.1.0/30路由,CR2就会进行路由迭代查询,导致CR2设备配置的静态路由被激活进入路由表,从而核心交换机也能从CR2学习到下联机构路由,路由在核心交换机与CR2之间形成环路;
解决办法:在广域网路由器CR2上配置的静态路由增加指定出接口,在这种情况下只有CR2出接口状态为UP时,静态路由才会被激活进入路由表中。
案例二:OSPF配置下缺少静默接口导致环路
拓扑环境
案例说明:
总部核心交换机配置静态路由192.168.0.0/16下一跳指向接入网络;
总部核心交换机将静态路由192.168.0.0/16重分布至OSPF,五类LSA类型为Type 2;
总部下联路由器CR1和CR2接收到OSPF路由后,将192.168.0.0/16路由重分布至BGP邻居,发送给分部上联路由器;
分部上联路由器BR2收到总部下联路由器发来的BGP路由后,转发给IBGP邻居BR1;
分部上联路由器BR2同时将BGP路由192.168.0.0/16重分布至OSPF中,五类LSA类型为Type 1;
分部核心交换机接收到分部上联路由器发过来的OSPF路由,并在OSPF内部进行传递,五类LSA为Type 1;
CR1硬件板卡故障:总部下联路由器CR1业务板卡故障,在更换故障板卡过程中,CR1上OSPF配置中针对CR1与BR1互联接口passive-interface命令消失,总部下联路由器CR1与分部上联路由器BR1建立了OSPF邻居关系(在CR1与BR1设备上OSPF配置中存在network互联网段,并且BR1设备OSPF配置下没有passive-interface命令)
此时分部上联路由器BR1收到的192.168.0.0/16类型为Type 1的路由,BR1进行OSPF内部传递给总行下联路由器CR1;
总部下联路由器CR1同时收到总部核心交换机发过来的类型为Type 2的五类LSA以及分部上联路由器BR1发过来的类型为Type 1的五类LSA路由,由于OSPF选路原则中, Type 1优于Type 2,因此总部下联路由器CR1路由表中192.168.0.0/16的路由下一跳指向分部上联路由器BR1;由于总部和分部路由器EBGP路由协议的管理距离配置为20,因此分部上联路由器BR1收到的192.168.0.0/16的路由下一跳为总部下联路由器CR1;
路由环路出现:总部下联路由器CR1与分部上联路由器BR1建立OSPF邻居后,CR1收到BR1发送192.168.0.0/16的OSPF路由,CR1又将OSPF路由重分布至BR1,BR1上针对192.168.0.0/16的BGP路由下一跳为CR1,至此192.168.0.0/16路由在CR1和BR1之间不断重复直至TTL耗尽报文被丢弃。
解决办法:在总部下联路由器CR1和分部上联路由器BR1设备上OSPF的配置中分别配置passive-interface命令,环路问题解决。
案例三:双向双点重分布路由优先级配置问题导致环路
拓扑环境
案例说明:
分部核心交换机配置静态路由192.168.0.0/16下一跳指向接入网络;
分部核心交换机将静态路由192.168.0.0/16重分布至OSPF,五类LSA类型为Type 1;
分部上联路由器接收到OSPF路由后,将192.168.0.0/16路由重分布至EBGP邻居,发送给总部下联路由器;
总部下联路由器CR1/CR2/CR3收到对应互联Juniper设备 BR1/BR2/BR3发过来的EBGP路由,管理距离为20;
此时分部上联路由器BR3出现设备硬件故障,使用华为路由器设备完成配置翻译后进行故障设备替换,在操作不上,先连接分部网络,与分部核心建立OSPF邻居关系,与分部上联Juniper路由器BR1和BR2建立IBGP邻居关系;
当新上华为路由器BR3与Juniper路由器建立IBGP邻居后,总部下联路由器接收不到分部发过来的192.168.0.0/16路由,总部与分部业务出现中断;
新上的华为路由器BR3通过分部核心交换机学习到了192.168.0.0/16的OSPF路由,并将OSPF路由重分布到BGP中(EBGP和IBGP);
路由环路出现:此时分部上联路由器BR1和BR2通过IBGP学习到新上的华为路由器BR3发过来的192.168.0.0/16路由,由于分部上联Juniper路由器IBGP路由协议管理距离设置为20,优于OSPF外部路由150,所以分部上联Juniper路由器原本通过与分部核心OSPF学习到的192.168.0.0/16路由从路由表中变成了IBGP路由,即分部上联Juniper BR1和BR2路由器针对192.168.0.0/16的OSPF消失,无法通过OSPF重分发到BGP中,又因为在Juniper路由器中EBGP和IBGP之间默认不相互传路由,导致分部192.168.0.0/16路由不能通过EBGP上送到总部,即总部收到分部的路由,总分部之间业务受损,192.168.0.0/16路由在分部上联路由器之间出现环路。
解决办法:在分部上联Juniper路由器BR1和BR2上调整IBGP路由优先级为170优于OSPF外部路由150,环路问题解决。
路由协议设计实践:
静态路由:
- 静态路由配置建议指定下一跳出接口,规避路由迭代查询;
- 所有静态路由建议配置路由描述信息,以便可读性;
- 根据实际网络环境配置静态浮动路由管理距,如果环境中存在静态优先,动态次优建议浮动路由管理距离配置大于路由协议管理距离;
路由宣告:
- 所有动态路由协议进程建议手动配置Router-id,Router-id默认选择设备管理地址;
- 路由器宣告互联地址网段时建议按本设备接口地址掩码宣告,不建议多个接口使用同一条命令进行宣告;
- 针对业务路由网段需要在所有网关设备上进行路由宣告;
- 针对广域网专线互联接口需要宣告时,建议只在一侧设备进行互联地址宣告,对端设备不建议宣告;
- 除BGP外,建议所有动态路由进程下配置静默接口,默认禁止所有三层接口与其它设备建立路由邻居关系;需要与其它设备建立路由邻居关系时,在对应设备配置下关闭对应的静默接口命令;
路由汇总和路由策略:
- 所有路由协议建议禁止自动汇总路由,根据实际网络需要进行业务路由汇总;
- 配置路由策略调用的匹配列表中建议不包含Deny条目;
- 当路由策略需要排除某些流量时,建议配置两个匹配列表,一个匹配需要策略路由的流量,另一个匹配需要排除的流量;在Route-Plicy中配置一个Deny策略,匹配需要排除流量对应的匹配列表,再配置一个Permit策略,匹配需要策略路由的流量对应的匹配列表;
路由重分布:
- 静态路由重分布至动态路由时,建议根据业务属性不同增加不同的TAG,便于在动态路由中进行路由策略匹配,针对主备链路静态重分布至OSPF时建议使用五类LSA类型为Type 2;针对负载链路静态重分布进OSPF时建议使用五类LSA类型为Type 1;
- 路由重分布到OSPF中时,针对思科设备经常会犯错的就是缺少Subnets关键字,如果发现有一些路由丢失情况,建议检查配置是否重分布子网路由;
- OSPF和BGP动态路由协议间双向双点重分布时,必须双向配置防环机制,建议使用标记TAG和Community方式进行路由防环;
- 针对各厂商默认管理距离不一致情况,如果网络环境中存在多厂商设备三层路由组网情况,建议将手动调整为一致的路由优先级,避免在组网过程中或故障场景下发生次优路径或路由环路问题。
附:主流厂商默认路由优先级: