浅谈BGP路由黑洞与解决策略
2020-09-29刘炎火
刘炎火
摘要:在网络配置中,路由黑洞是比较常见的故障,特别是在边界配置BGP路由时,经常出现路由黑洞,为了更好解决由于BGP配置而产生的路由黑洞,在本文中列举了多种解决策略。
關键词:路由黑洞;BGP;EBGP;IBGP;邻居关系
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2020)17-0056-03
Abstract: In the network configuration, routing black hole is a common failure. A routing black hole often appears especially in BGP routing. In order to better solve the routing black hole caused by BGP configuration, this paper lists a variety of solutions.
Key words: routing black hole;BGP;ebgp; iBGP;neighbor relationship
在配置BGP的时候,最容易遇到的问题就是路由黑洞,那么什么是路由黑洞?简单地说,它会默默地将数据包丢弃,使数据包有去无回。我们知道传统的IP路由,它是通过逐跳查找路由信息,根据路由信息转发数据包,通俗地说就是当数据包到达路由设备的时候,路由设备首先查找路由表,然后根据路由信息转发数据包,当然,路由设备转发数据包的前提是存在下一跳路由。对BGP来说,由于存在IBGP水平分割规则,这是一种防止环路机制,所以在BGP的设计上有些设备就不会运行BGP。BGP是一种TCP的连接或者说是一种host-to-host的连接,可以跨越设备进行连接,所以路由传递是没有问题的,但是数据包的路由却是有问题的。通常我们会出现是IBGP邻居关系可以正常建立,也就是说控制平面看起来是正常的,但是数据平面确不可达,从而形成路由黑洞。接下来,我将解决BGP路由黑洞的几种常见方法进行逐一介绍。
1 采用邻居全互联(Full-mesh)方式解决由IBGP水平分割导致的BGP路由黑洞问题
图1所示,为了实现1.1.1.1<->5.5.5.5可以互相访问,计划在R1、R2、R4、R5跑BGP协议,R2、R3、R4跑OSPF协议。并且在R1<->R2、R4<->R5之间创建默认路由保证BGP邻居关系的建立。配置完成之后,发现无法实现1.1.1.1<->5.5.5.5互相访问,通过对设备路由信息的查询,发现R3没有1.1.1.1和5.5.5.5的路由条目。经过仔细分析配置策略,发现由于R3没有启用BGP配置,因此R2和R4均不会将路由条目传给R3,导致R3没有1.1.1.1和5.5.5.5的路由信息,最终出现路由黑洞。
经过对配置信息的分析和查阅相关资料,决定利用Full-mesh方式解决路由黑洞问题。解决方法就是在R3上配置BGP,与R2和R4建立完全BGP邻居关系,通过IBGP学习到1.1.1.1和5.5.5.5的路由条目。配置完成之后,经测试完全实现1.1.1.1<->5.5.5.5互相访问。利用Full-mesh方式解决路由黑洞配置拓扑图如图1所示。
具体实现过程:使用Peer Group简化配置,节约内存,配置R2、R3、R4之间的IBGP,通过邻居全互联解决路由黑洞。R2、R3和R4相互建立邻居关系,具体配置如下:
//R2与R3、R4建立邻居关系
router bgp 200
neighbor slyar peer-group
neighbor slyar remote-as 200
neighbor slyar update-source Loopback0
neighbor slyar next-hop-self
neighbor 3.3.3.3 peer-group slyar
neighbor 4.4.4.4 peer-group slyar
//R3与R2、R4建立邻居关系
router bgp 200
neighbor slyar peer-group
neighbor slyar remote-as 200
neighbor slyar update-source Loopback0
neighbor slyar next-hop-self
neighbor 2.2.2.2 peer-group slyar
neighbor 4.4.4.4 peer-group slyar
//R4与R2、R3建立邻居关系
router bgp 200
neighbor slyar peer-group
neighbor slyar remote-as 200
neighbor slyar update-source Loopback0
neighbor slyar next-hop-self
neighbor 2.2.2.2 peer-group slyar
neighbor 3.3.3.3 peer-group slyar
利用Full-mesh方式解决路由黑洞,对于结构简单的网络没有问题,但是要是网络拓扑复杂,则存在全互联要求建立n*(n-1)/2个邻居关系,这显然是很麻烦,也不现实。因此,只能说是解决BGP路由黑洞的方法之一。
2 采用路由反射器(Router Reflector)解决由IBGP水平分割导致的BGP路由黑洞问题
导致路由黑洞的原因与“一”一样,解决路由黑洞方法则采用Router Reflector方式进行解决。Router Reflector基本原理是利用路由反射器,将R3作为反射器(RR),其余IBGP路由器作为客户端?,路由反射器和客户端共同组成路由反射簇,客户端只需要与路由反射器建立邻居即可,不需要与每台IBGP路由器建立邻居。
配置路由反射器配置,需要保证三个原则,一是RR从EBGP收到的路由,能够反射给客户端和非客户端;二是从客户端收到的路由,能够反射给客户端、非客户端及EBGP邻居;三是从非客户端收到的路由,只能反射给客户端和EBGP邻居,不能反射给其他非客户端。满足了这三个原则,就可以有效解决BGP的路由黑洞问题。网络拓扑图参照“图1”,其中R3为反射器,R2和R4为客户端,R2、R3和R4的配置如下:
2.1 使用回环接口配置R2、R3、R4之间的IBGP关系
//R3配置
router bgp 200
no synchronization
bgp router-id 3.3.3.3
neighbor 2.2.2.2 remote-as 200
neighbor 2.2.2.2 update-source Loopback0
neighbor 4.4.4.4 remote-as 200
neighbor 4.4.4.4 update-source Loopback0
no auto-summary
//R2配置
router bgp 200
neighbor 3.3.3.3 remote-as 200
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self
//R4配置
router bgp 3
neighbor 3.3.3.3 remote-as 200
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self
2.2 在R3上开启路由反射器,指定客户端
router bgp 3
neighbor 2.2.2.2 route-reflector-client
neighbor 4.4.4.4 route-reflector-client
利用Router Reflector解决BGP的路由黑洞问题,与Full-mesh比较,优势是显而易见的,其建立邻居关系只需要(n-1)条。因此,是解决BGP路由黑洞比较好的方法。
3 采用联邦(BGP Confederation)解决由IBGP水平分割导致的BGP路由黑洞问题
导致路由黑洞的原因也和“一”一样,解决路由黑洞方法则采用Confederation方式进行解决。Confederation基本原理是将AS 200内部划分为2个子AS,使用私有BGP AS 65001和65002,同时,R3与R4之间的关系改为EBGP,从而打破IBGP的水平分割法则,进而解决路由黑洞问题。这些私有AS就叫作联邦(Confederation),私有AS对于AS 100和AS 300来说,即联邦是透明的,在他们看来,AS 200依旧是AS 200。实现BGP Confederation配置拓扑结构如图2所示。
配置Confederation需要按照三个步骤完成,第一步将路由器进行分组,划分为不同的小AS;第二步在大AS的边界路由器上,声明所处的大AS号;第三步在小AS边界路由器之间建立联邦EBGP关系,并互指Peer。参照图2,配置内容如下:
3.1 在R2和R3上创建联邦AS 65011,建立IBGP关系
//R2上创建AS 65001
router bgp 65001
no synchronization
bgp router-id 2.2.2.2
neighbor 3.3.3.3 remote-as 65001
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self
no auto-summary
//R3上创建AS 65011
router bgp 65001
no synchronization
bgp router-id 3.3.3.3
neighbor 2.2.2.2 remote-as 65001
neighbor 2.2.2.2 update-source Loopback0
no auto-summary
3.2 在R4上創建联邦AS 65002
//R4上创建AS 65002
router bgp 65002
no synchronization
bgp router-id 4.4.4.4
no auto-summary
3.3在R2、R3、R4上声明自己的大AS,然后与R1和R5创建EBGP关系
//R2上配置联邦声明
router bgp 65001
bgp confederation identifier 200
neighbor 10.0.12.1 remote-as 100
//R4上配置联邦声明
router bgp 65002
bgp confederation identifier 200
neighbor 10.0.45.2 remote-as 300
//R3上配置联邦声明
router bgp 65001
bgp confederation identifier 200
3.4 在R3和R4的联邦AS之间通过环回口创建EBGP关系,并互指联邦Peer
//R3上配置EBGP邻居并指定联邦Peer
router bgp 65001
bgp confederation peers 65002
neighbor 4.4.4.4 remote-as 65002
//由于使用回环接口建立联邦EBGP关系,因此需要将默认TTL值改大(在此TTL默认值为1)
neighbor 4.4.4.4 ebgp-multihop 2
neighbor 4.4.4.4 update-source Loopback0
//R4上配置EBGP鄰居并指定联邦Peer
router bgp 65002
bgp confederation peers 65001
neighbor 3.3.3.3 remote-as 65001
neighbor 3.3.3.3 ebgp-multihop 2
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self
所谓联邦AS是由一组子自治系统组成,它们共享一个联邦AS号,该联邦AS号被联邦之外的对等体视为整个联邦的名字(AS号),外部的对等体是无法看见联邦的内部结构的。因此采用联邦AS解决IBGP邻居关系,从而解决其路由黑洞问题是比较可取的方法。
4 采用多协议标签交换 (MPLS)解决BGP路由黑洞问题
导致路由黑洞的原因与“一”一样,R2与R4建立IBGP,可以互相学习各自的BGP 路由,因是BGP邻居的建立是通过TCP建立的,BGP邻居互传路由是通告封装到TCP,再封装到IP里面的。配置完成时候,还是无法实现1.1.1.1<->5.5.5.5互相访问。解决办法除了前面三种以外,也可以使用MPLS来解决BGP路由黑洞问题。MPLS 是一种使用标签来制定数据转发决策的数据包转发技术。案例网络拓扑结构参照“图1”,具体配置内容如下所示。
//R2上配置MPLS
route recursive-lookup tunnel
mpls lsr-id 2.2.2.2
mpls
mpls ldp
int s1/1
mpls
mpls ldp
//R2上配置MPLS
route recursive-lookup tunnel
mpls lsr-id 3.3.3.3
mpls
mpls ldp
int s1/1
mpls
mpls ldp
int s1/2
mpls
mpls ldp
//R2上配置MPLS
route recursive-lookup tunnel
mpls lsr-id 4.4.4.4
mpls
mpls ldp
int s1/2
mpls
mpls ldp
使用MPLS解决BGP路由黑洞容易实现,配置也比较简单,但是其中为什么能在没有路由的情况下(R3,R4)能通,很多人并不是特别清楚。在MPLS网络中,MPLS会给IGP路由分配label,cef会采用MPLS分配好的label,并且给下一跳是IGP内的相应BGP路由分配对应IGP的label,数据在转发的时候是按照cef表进行的,这样那些没有在MPLS中分配标签的BGP路由也可以按照标签进行转发,最终解决路由黑洞问题。
由于BGP规定无论路由器是否启动BGP都要无条件地转发BGP消息和更新包,违背了"非IGP路由器阻断IGP域"的原则,因而辗转造成了BGP路由器"居然ping不通路由表中的条目"的现象,也就是所谓的路由黑洞。在边界路由器产生的路由黑洞,一般不宜采用重分布实现同步策略。上述四种策略是实际应用中常用策略。
参考文献:
[1] Amir Ranjbar[美].CCNP TSHOOT学习指南[M].北京:人民邮电出版社,2013.
[2] 周亚军.思科CCIE路由交换v5实验指南[M].北京:电子工业出版社,2016.
[3] 张国清.路由技术:IPv6版[M].北京:电子工业出版社,2014.
[4] 梁广民,王隆杰.思科网络实验室CCNA实验指南[M].北京:电子工业出版社,2012.
【通联编辑:唐一东】