赵建华,韩智慧,宋 严
(1.长春师范大学网络中心,吉林 长春 130032;2.长春科技学院智能制造学院,吉林 长春 130600)
BGP,即边界网关协议,是一种运行在自治系统(AS)之间的动态路由协议[1],具有强大的路径选择能力,这也使得BGP适用于大型的网络环境,如运营商网络、大型企业网等,然而对于运营商或大型企业级别的网络,路由的稳定性及可达性尤为重要。
在运行BGP协议的两台路由器之间,无论是否直接相连,只要它们具备IP连通性且可建立TCP连接,则都可以建立对等体关系。BGP的这个特点使得路由的传递更加灵活,然而,如果在配置BGP路由协议过程中,稍有不慎,就会产生路由黑洞[2]。
图1为运动BGP协议的网络拓扑图,R1、R2、R4、R5是BGP路由器,建立BGP对等体关系。
图1 运行BGP协议的网络拓扑图
在图1中,AS 30内已经部署了OSPF,使得AS内部的路由器能够获得到AS内各个网段的路由信息。R3、R6、R7属于内部路由器,不运行BGP协议,只运行OSPF协议,在整个AS 30内部,R4和R5实现了IP的连通性(R4和R5之间没有直连的物理链路),并且能够建立起IBGP对等体关系。
路由器R1将AS 10内的10.0.0.0/8路由发布到BGP,然后将这条路由通告给R4,而R4则将这条BGP路由通过IBGP连接直接通告给R5,R7再将路由信息通告给R2,最终R2能够通过BGP学习到10.0.0.0/8这条来自AS 10 的路由并将其加载到自己的路由表中。
路由器R2收到一个去往10.0.0.0/8的数据包,它查询路由表后确定到达目的地的下一跳为R5,于是将数据包转发给R5。R5收到这个数据包后进行路由表查询,到达目的地的下一跳为R4,然而R4并不是它的直连路由器,它认为到下一跳路由器处于一个远端网段,因此将继续在自己的路由表中查询到达R4的路由(既递归查询)。由于AS 30内已经运行了OSPF,R5发现可以通过OSPF路由到达R4,而且下一跳是R3。如此一来,R5意识到要将数据包送达10.0.0.0/8,需先将数据包转发给R3。
当路由器R3收到发往10.0.0.0/8的数据包时,它将在自己的路由表中查询达到该目的地网段的路由,由于该路由是在BGP中被通告的,而R3又没有运行BGP,R3将丢弃发往10.0.0.0/8这个网段的数据包。此种现象被称为路由黑洞,同样的黑洞问题也可能发生在路由器R7上[3]。
BGP同步规则是指当一台路由器接收到一条IBGP对等体发送来的路由后,必须检查自己的IGP路由表,只有在自己的IGP路由表中也存在关于这条路由的信息时,才会将该BGP路由发布给EBGP对等体,让没有运行BGP协议的路由器也能获得BGP路由,从而实现IBGP和IGP路由同步,避免路由黑洞的产生。
路由引入就是将BGP路由引入到OSPF中,让OSPF也能获得相关路由。例如,在图1拓扑结构中,R4将BGP路由引入到AS 30中的OSPF,使OSPF获知到达10.0.0.0/8的路由,从而路由黑洞的问题就迎刃而解了。
MPLS技术,即多协议标签交换技术,就是在一个报文的IP头部之前、数据帧头部之后插入一个标签头部,使IP头部隐藏在标签头部之后,在数据从源被转发到目的地的整个过程中,网络设备只需根据标签头部中的标签进行选路,这样设备的路由表中没有到达目的地的网段,也不会影响数据转发,从而避免了路由黑洞的产生。
IBGP全互连,即在AS内IBGP的对等体邻接关系的全互连,逻辑上形成Full Mesh,使网络中的路由设备获得全部网络的路由信息,进而解决路由黑洞问题。
除了以上几种方式之外,还有在AS内使用物理线路的全互连、在AS内部的边缘路由器之间建立Tunnel通道、配置路由反射器RR、联盟配置等解决路由黑洞问题的方法。
综合以上论述,解决路由黑洞有很多方案,本文以IBGP全互连方式进行路由黑洞产生过程及解决方案模拟仿真。
假设在一个大型公司的网络中,拓扑结构如图2所示,设备IP地址分配如表1所示,自治系统AS 20为运营商网络,自治系统AS 10和AS 30分别为企业的上海分公司和北京分公司,路由器R1的GE0/0/1和R5的GE0/0/0分别连接着上海分公司内部网络和北京分公司内部网络。路由器R1、R2、R4、R5运行BGP协议,自治系统AS 20内部使用OSPF协议作为IGP。整个网络需要实现上海分公司内部网络与北京分公司内部网络之间的正常通信。
图2 仿真网络拓扑图
表1 设备编址
3.2.1 基本配置
根据图2和表1进行基本配置,并测试直连网段连通性,如R1与R2之间的连通性测试结果如下文所示,其他设备测试方法相同。
PING 10.0.12.2: 56 data bytes, press CTRL_C to break
Reply from 10.0.12.2: bytes=56 Sequence=1 ttl=255 time=30 ms
3.2.2 配置OSPF和BGP路由协议
在AS 20中配置OSPF协议作为IGP协议。如路由器R2的OSPF协议配置如下:
[R2]ospf router-id 10.0.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 10.0.2.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]network 10.0.23.0 0.0.0.255
路由器R3、R4的配置与R2类似,配置完后,在R3上使用display ospf peer查看OSPF邻居信息,可以看到R3与R2、R3与R4的邻居状态均为Full,这表示OSPF邻接关系已经成功建立[4]。
在路由器R1、R2、R4、R5上配置BGP协议,如R1配置如下:
[R1]bgp 10
[R1-bgp]router-id 10.0.1.1
[R1-bgp]peer 10.0.12.2 as-number 20
[R1-bgp]network 10.0.10.0 24
其他三个路由器配置类似,配置完成后,在R2上查看BGP邻居信息如下:
Total number of peers:2 Peers in established state:2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
10.0.4.4 4 20 93 95 0 01∶30∶06 Established 1
10.0.12.1 4 10 95 95 0 01∶32∶06 Established 1
从上面结果看出,R2与R1、R2与R4的BGP邻居关系已经建立,同样的查看方式能够看到R4与R5的BGP邻居关系也已经建立。
在R1上查看BGP路由表,可以看到R1的BGP路由表中拥有关于10.0.10.0/24和10.0.50.0/24的路由信息如下:
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.0.10.0/24 0.0.0.0 0 0 i
*> 10.0.50.0/24 10.0.12.2 0 20 30i
同理,在R5的BGP路由表中含有10.0.10.0/24和10.0.50.0/24的路由信息如下:
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.0.10.0/24 10.0.45.4 0 20 10i
*> 10.0.50.0/24 0.0.0.0 0 0 i
3.2.3 BGP路由黑洞产生的原因
通过以上分析,R1和R5的BGP路由表中均存在去往对方的内部网络的路由,则上海分公司内部网络和北京分公司内部网络应该可以正常通信[5],在PC1上测试与PC2的连通性如下所示:
Ping 10.0.50.2∶32 data bytes, Press Ctrl_C to break
Request timeout!
Request timeout!
结果发现,PC1无法与PC2进行通信。
在PC1上使用tracert命令验证去往PC2的报文经过的路径,结果如下:
Traceroute to 10.0.50.2,8 hops max
(ICMP), press Ctrl+C to stop
通过跟踪发现,报文只能到达R2,不能到达R3。
在路由器R3上查看IP路由表,结果如下:
Destination/Mask Proto Pre Cost Flags NextHop Interface
10.0.2.2/32 OSPF 10 1 D 10.0.23.2 G0/0/1
10.0.3.3/32 Direct 0 0 D 127.0.0.1 LoopBack0
10.0.4.4/32 OSPF 10 1 D 10.0.34.4 G0/0/0
10.0.23.0/24 Direct 0 0 D 10.0.23.3 G0/0/1
10.0.23.3/32 Direct 0 0 D 127.0.0.1 G0/0/1
10.0.23.255/32 Direct 0 0 D 127.0.0.1 G0/0/1
10.0.34.0/24 Direct 0 0 D 10.0.34.3 G0/0/0
10.0.34.3/32 Direct 0 0 D 127.0.0.1 G0/0/0
10.0.34.255/32 Direct 0 0 D 127.0.0.1 G0/0/0
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
经观察发现,路由器R3的IP路由表中没有上海分公司和北京分公司内部网段的10.0.10.0和10.0.50.0的路由信息。这使得R3接收到从R2转发过来的源地址网段为10.0.10.0、目的地址网段为10.0.50.0的报文时,R3由于在自己的路由表中无法查到目的地址网段10.0.50.0的路由信息,R3会直接将报文丢弃,然后向源地址段10.0.10.0发送ICMP Destionation Unreachable消息。但是此时R3的IP路由表中也没有10.0.10.0网段的路由信息,导致ICMP Destionation Unreachable消息也无法被发送。这样一来,从10.0.10.0去往10.0.50.0的报文就在R3上无声无息地消失了,这就是所谓的BGP路由黑洞[6]。
3.2.4 采用IBGP全互连方式解决BGP路由黑洞问题
产生路由黑洞的原因主要是R3的IP路由表中没有去往10.0.10.0/24和10.0.50.0/24的路由信息,为了解决此问题,可以让R3也运行BGP协议,并让R2、R3、R4建立全互连的IBGP邻居关系,配置如下:
[R3]bgp 20
[R3-bgp]router-id 10.0.3.3
[R3-bgp]peer 10.0.2.2 as-number 20
[R3-bgp]peer 10.0.2.2 connect-interface LoopBack 0
[R3-bgp]peer 10.0.4.4 as-number 20
[R3-bgp]peer 10.0.4.4 connect-interface LoopBack 0
[R2]bgp 20
[R2-bgp]peer 10.0.3.3 as-number 20
[R2-bgp]peer 10.0.3.3 connect-interface LoopBack 0
[R2-bgp]peer 10.0.3.3 next-hop-local
[R4]bgp 20
[R4-bgp]peer 10.0.3.3 as-number 20
[R4-bgp]peer 10.0.3.3 connect-interface LoopBack 0
[R4-bgp]peer 10.0.3.3 next-hop-local
配置完成后,在R3上查看BGP邻居信息,结果如下:
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
10.0.2.2 4 20 8 8 0 00∶05∶33 Established 1
10.0.4.4 4 20 8 8 0 00∶05∶43 Established 1
可以看到,路由器R3与R2、R4都已经建立IBGP邻居关系[7]。
在路由器R3上查看BGP路由表,结果如下:
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.10.0/24 10.0.2.2 0 100 0 10i
*>i 10.0.50.0/24 10.0.4.4 0 100 0 30i
可以看到,路由器R3现在已经学习到了上海分公司和北京分公司的内部网段10.0.10.0/24和10.0.50.0/24的路由信息。
使用上海分公司内部计算机PC1测试与北京分公司内部计算机PC2的连通性,结果如下:
From 10.0.50.2: bytes=32 seq=4 ttl=123 time=31 ms
From 10.0.50.2: bytes=32 seq=5 ttl=123 time=63 ms
通过测试结果可知,PC1和PC2能够正常通信,BGP路由黑洞问题得到了解决。
在网络互联中路由器是必不可少的网络设备,路由协议设置正确与否直接影响整个网络的可达性、稳定性以及收敛速度。在设置路由协议过程中,不仅要考虑路由黑洞问题,同时还要考虑路由环路、路由更新、路由过滤和路由策略等问题,才能使条目众多的网络很好地连接起来[8]。