出现的问题: 一)R1上面有7.7.7.0/24的路由,但是ping 7.7.7.7不可达。(R7同样) 现在查看R1的路由表 r7#sh ip route B 1.1.1.0 [20/0] via 5.5.5.5, 00:02:54 //为节约篇幅未完整显示 可见R7学到了R1的路由,从表面上看这个实验很完美,达了目的, 然而这时问题出现了,作个测试,在R7上PING R1 r7#ping 1.1.1.1 Type escape sequence to abort. Sending 5, 0-byte ICMP Echos to 7.7.7.7, timeout: ..... 这究竟是怎么回事呢?原来,我们在R5上关闭了同步,这时它会将一条并没有优化的路由传送给R7,当R7要发向R1发包时,它看到R5是它的下一跳,于是将包发给R5,然后R5又查看它的路由表,发现到R1的下一跳是R2,并继续查找,发现在通过R3可以达到R2,于是它将数据送给R3,这时问题出现了,因为R3没有运行BGP,它不知道R1怎么走,于是它将数据包丢弃,从而造成路由黑洞。由此可见,BGP与IGP同步的重要性,什么是同步?在上一篇我已经提到了,不再多阐述。(同理R1无法访问R7,但有R7的路由条目)
解决方案 一)FULL MESH 建立R2,R3,R5的全互联的BGP关系。全互联要求建立n*(n-1)/2个邻居关系,当路由器很多的时候,这个显然是不合适的。 虽然理论如此,但是在路由器很少的时候,还是很有效果的,使用的技术也没有多少。
为物理上的“串形链路”建立逻辑上的“全互联”Full Mesh 配置如下: R2: neighbor 3.3.3.3 remote 200 neighbor 3.3.3.3 update-source loopback 0 neighbor 3.3.3.3 next-hop-self neighbor 5.5.5.5 remote 200 neighbor 5.5.5.5 update-souce loopback 0 neighbor 5.5.5.5 next-hop-self
R3: neighbor 2.2.2.2 remote-as 200 neihgbor 2.2.2.2 update-source loopback 0 neighbor 5.5.5.5 remote-as 200 neighbor 5.5.5.5 updata-source loopback 0
R5: neighbor 2.2.2.2 remote-as 200 neighbor 2.2.2.2 update-source loopback 0 neighbor 3.3.3.3 remote-as 200 neighbor 3.3.3.3 update-source loopback 0
二)ROUTE_REFLECTOR 路由反射器 正常情况下,从IGP学习到的路由不会传送给其他IGP邻居。讲R3做成路由反射器后,可以将从R1学习到的路由反射给R5,这样就很好的控制了BGP的水平分割。
做法:清除R2与R5的邻居关系,只在R2与R3、R3与R5之间建立IBGP关系 然后在R3的路由配置模式下: neighbor 2.2.2.2 route-reflector-client neighbor 5.5.5.5 route-reflector-client //将R2和R5作为RR的客户 此时R5上能收到关于R1的路由,它也会传给R7
三)Confederation 联邦AS 联邦AS是指讲原本的大AS号划分成更小的区域。例如,我们可以在AS200中间划分AS400 (R2和R3)和 AS500(R5),这样子,R3和R5的关系有原有的IBGP关系变化为联邦BGP 关系,R3有关于R1的路由就可以传送给R5了。
做法: 1)取消原有的R2 R3 R5上的router bgp 配置 2) R2: router bgp 400 //指定的联邦AS号 bgp router-id 2.2.2.2 bgp confederation indentifier200 //对外宣称AS号200 network 192.168.12.0 network192.168.23.0 neighbor1.1.1.1 remote-as 100 neighbor1.1.1.1 ebgp-multihop 255 neighbor1.1.1.1 update-source Loopback0 neighbor3.3.3.3 remote-as 400 neighbor3.3.3.3 update-source Loopback0 neighbor3.3.3.3 next-hop-self noauto-summary
R3: routerbgp 400 bgp router-id 3.3.3.3 bgpconfederation identifier 200 //对R5稳定自己的AS号为200,它不会对R2宣称,因为它们属于同一个联邦AS neighbor2.2.2.2 remote-as 400 neighbor2.2.2.2 update-source Loopback0 neighbor5.5.5.5 remote-as 500 neighbor5.5.5.5 ebgp-multihop 255 neighbor5.5.5.5 update-source Loopback0 noauto-summary
R5: router bgp 500 no synchronization bgp log-neighbor-changes bgp confederation identifier200//对R3和R7宣称自己的AS号为200 neighbor 3.3.3.3 remote-as 400 neighbor 3.3.3.3 ebgp-multihop 255 neighbor 7.7.7.7 remote-as 300 neighbor 7.7.7.7 ebgp-multihop 255 neighbor 7.7.7.7 update-source Loopback0 no auto-summary
R3上:bgp confederation peer 65003 // // 不对65003宣称自己的AS为200 R5上:bgp confederation peer 65012 // 不对65012宣称自己的AS为200 避免联邦之间AS号使用AS200
四)在黑洞域使用MPLS 在R2,R3,R5上配置MPLS,采用标签转发
ip cef
R2
interface serial 0/0
mpls ip
R3
ip cef
interface serial 0/1
mpls ip
interface serial 0/0
mpls ip
R5
ip cef
interface serial 0/1
mpls ip
interface seiral 0/0
mpls ip
此时R3虽然没有出现1.1.1.0/24 的路由,但是R7是可以ping通的!因为采用的标签转发机制,默认使用接口的地址......
此种方法的配置虽然简单,但是MPLS的理论却是非常复杂的,笔者会在下一次的笔记中详细介绍。
特此注明:笔者在撰写文章的时候,大量的采用的各位前辈的总结性知识!如果有雷同的地方,希望大家见谅!之所以会有前辈的总结性文章在里面,也是希望能够更好的解释BGP路由黑洞的问题,特此注明!
|