出现的问题:
一)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路由黑洞的问题,特此注明!