这个实验如上所示:所有的IP地址已经标明,然后所有的设备均运行BGP,且AS2中的3台路由器运行的IGP协议是OSPF,R4-R5之间存在两条链路。现在要求:R1-R5之间它们的环回可以互相访问。
实验拓扑如下
路由:
1、AS2中运行OSPF:
关于OSPF怎么宣告的配置这里不再演示,需要注意的是与BGP相连的接口不宣告在OSPF区域内。
2、BGP建邻:
它们之间的邻居关系如下,IBGP水平分割规定:从一个IBGP邻居学到的路由,不能给另一个IBGP邻居。
目前解决这个问题,这里使用比较差的方案就是:在R2和R4之间建立一个BGP邻居关系。
如果在配置时:出现类似下面的报错情况,第一反应应该是AS号配置的问题。
(Peer in wrong AS) 2 bytes 0002
(1)R1、R2之间建立直连的BGP邻居:
R1(config)#router bgp 1
R1(config-router)#bgp router-id 1.1.1.1
R1(config-router)#neighbor 12.1.1.2 remote-as 2
R2(config)#router bgp 2
R2(config-router)#bgp router-id 2.2.2.2
R2(config-router)#neighbor 12.1.1.1 remote-as 1
(2)IBGP邻居关系建立:
由于环回可以起到链路备份的作用,保证邻居关系的不断开。因此IBGP中的邻居最好使用环回来建邻。
R2(config-router)#neighbor 3.3.3.3 remote-as 2
R2(config-router)#neighbor 3.3.3.3 update-source loopback 0
R2(config-router)#neighbor 4.4.4.4 remote-as 2
R2(config-router)#neighbor 4.4.4.4 update-source loopback 0
R3(config)#router bgp 2
R3(config-router)#bgp router-id 3.3.3.3
R3(config-router)#neighbor 2.2.2.2 remote-as 2
R3(config-router)#neighbor 2.2.2.2 update-source loopback 0
R3(config-router)#neighbor 4.4.4.4 remote-as 2
R3(config-router)#neighbor 4.4.4.4 update-source loopback 0
R4(config)#router bgp 2
R4(config-router)#bgp router-id 4.4.4.4
R4(config-router)#neighbor 3.3.3.3 remote-as 2
R4(config-router)#neighbor 3.3.3.3 update-source loopback 0
R4(config-router)#neighbor 2.2.2.2 remote-as 2
R4(config-router)#neighbor 2.2.2.2 update-source loopback 0
(3)R4、R5两条链路之间建立BGP邻居关系
为了使R4-R5之间的两条链路全部用上,因此R4需要写到R5环回的静态路由。
R4(config)#ip route 5.5.5.0 255.255.255.0 45.1.1.2
R4(config)#ip route 5.5.5.0 255.255.255.0 54.1.1.2
R5(config)#ip route 4.4.4.0 255.255.255.0 45.1.1.1
R5(config)#ip route 4.4.4.0 255.255.255.0 54.1.1.1
建邻:
R4(config)#router bgp 2
R4(config-router)#neighbor 5.5.5.5 remote-as 3
R4(config-router)#neighbor 5.5.5.5 update-source loopback 0
R4(config-router)#neighbor 5.5.5.5 ebgp-multihop
R5(config)#router bgp 3
R5(config-router)#bgp router-id 5.5.5.5
R5(config-router)#neighbor 4.4.4.4 remote-as 2
R5(config-router)#neighbor 4.4.4.4 update-source loopback 0
R5(config-router)#neighbor 4.4.4.4 ebgp-multihop
3、BGP宣告:
(1)R1的环回访问R5的环回:
为了能将学习到的路由给该AS内部的其它IBPG邻居,因此需要修改下一跳为本地。
R2(config-router)#neighbor 3.3.3.3 next-hop-self
R2(config-router)#neighbor 4.4.4.4 next-hop-self
R3(config-router)#neighbor 2.2.2.2 next-hop-self
R3(config-router)#neighbor 4.4.4.4 next-hop-self
R4(config-router)#neighbor 2.2.2.2 next-hop-self
R4(config-router)#neighbor 3.3.3.3 next-hop-self
接着我们宣告R1、R5的环回:
R1(config)#router bgp 1
R1(config-router)#network 1.1.1.0 mask 255.255.255.0
R5(config)#router bgp 3
R5(config-router)#network 5.5.5.0 mask 255.255.255.0
之后,R1的环回就可以ping通R5的环回了:
(2)所有环回之间互访:
由于R1、R5它们没有到R2-R4中环回的路由,因此我们需要宣告R2-R4环回。
宣告这里省略,之后就可以实现全环回互访了。
但当我们进入bgp协议,宣告R2的环回的后,就会出现一个问题:R3会学习到两条R2环回的路由,一条是2.2.2.2/32OSPF的,另一条是R1发来的2.2.2.0/24BGP学习到的路由。
因此,我们还需要在环回中修改环回在OSPF的工作方式为点到点:
这样OSPF的环回网段的掩码就是24位,OSPF的管理距离【110】比BGP的管理距离【200】小,这样路由表就只会加载一条OSPF的路由。
这样我们就可以看到BGP表中的路由,显示没有被装载,已被更好的路由所替代。到这里实验就完了,
还有一种方法是:由于R2拥有R3、R4环回的路由,因此我们可以让R2直接宣告R3、R4的环回,不让R3、R4在bgp中宣告它们的环回,也可以实现环回间互访。
上面是两种宣告方式所呈现的路由表的截选,上面的是第一种宣告方式,而下面的路由表是第二种宣告方式。我们知道BGP是靠属性选路,但是这里却出现了度量值。
BGP协议在宣告路由时,将携带本地路由表中到达目标的度量值及下一跳。
第一种方式之所以度量都是零,是因为它们都运行的是BGP协议,且宣告的网段都和自己直连,因此都是0。
第二种方式是因为其它设备没有运行BGP,到达那些网段并不是直连,而是通过 OSPF,因此需要加度量。