实验环境
实验要求
BGP环境,全网可达;R3为IGP启用IGP协议,其余均启用BGP协议!
实验过程
1.IP地址配置;
2.配置IGP环境;
[R2]ospf 1 router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]network 23.1.1.0 0.0.0.255
[R3]ospf 1 router-id 3.3.3.3
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]network 23.1.1.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.0
[R3-ospf-1-area-0.0.0.0]network 34.1.1.0 0.0.0.255
[R4]ospf 1 router-id 4.4.4.4
[R4-ospf-1]area 0
[R4-ospf-1-area-0.0.0.0]network 34.1.1.0 0.0.0.255
[R4-ospf-1-area-0.0.0.0]network 4.4.4.4 0.0.0.0
3.测试;
IGP环境已经配置成功!
4.启用BGP协议,互相建邻;
[R1]bgp 1
[R1-bgp]router-id 1.1.1.1
[R1-bgp]peer 12.1.1.2 as-number 2
[R2]bgp 2
[R2-bgp]router-id 2.2.2.2
[R2-bgp]peer 12.1.1.1 as-number 1
R4、R5建邻采用环回地址方式建邻:
建邻的前提条件为互相可达,所以需先配置静态路由:
[R4]ip route-static 5.5.5.0 24 45.1.1.2
[R4]ip route-static 5.5.5.0 24 54.1.1.2
[R5]ip route-static 4.4.4.0 24 45.1.1.1
[R5]ip route-static 4.4.4.0 24 54.1.1.1
测试:
然后再使用环回地址进行BGP手工建邻:
[R4-bgp]peer 5.5.5.5 as-number 3
[R5-bgp]peer 4.4.4.4 as-number 2
查看BGP邻居表:
此时,R4和R5是无法建邻成功的;因为路由器默认是以出接口为源来发包传递数据的,但是此时建邻却是以环回地址,这样就倒是回包的时候是回到了R4的出接口,并非R4的环回接口,所以我们需要将源改为环回接口即可!
为了保证网络的可靠性,我们需要将两端的源均改为环回接口;
[R4-bgp] peer 5.5.5.5 connect-interface LoopBack0
[R5-bgp] peer 4.4.4.4 connect-interface LoopBack0
但是此时还是无法建邻的,因为BGP设计之初就将EBGP之间的TTL值默认为1,而此时我们将源改为环回接口是必须经过2跳才能抵达对方的环回接口,所以需要进一步将默认跳数修改为2,保证数据包抵达目的地!
[R4-bgp] peer 5.5.5.5 ebgp-max-hop 2
[R5-bgp] peer 4.4.4.4 ebgp-max-hop 2
现在我们可以看到建邻成功!
5.BGP路由宣告;
[R1-bgp]network 1.1.1.1 24
[R2-bgp]network 2.2.2.2 24
[R4-bgp]network 4.4.4.4 24
[R5-bgp]network 5.5.5.5 24
此时我们在R4上查看一下BGP表:
我们发现R4上学到R1的路由的下一跳依然是R1的12.1.1.1接口,此时如果R4需要访问R1,下一跳不是R2的23.1.1.1接口,是无法访问的,因为中间存在EBGP,是无法跨过其直接访问R1,所以,我们需要将R2从R1学到的路由的下一跳地址统一修改为自己本身!
[R2-bgp]peer 34.1.1.2 next-hop-local
现在我们可以在R4上看到修改成功:
我们发现:
在R4上查看路由表:
虽然有R5的环回路由,但是R4上的BGP表中并没有R5的环回路由或者说它并没有加表!
但这又是为什么呢?
因为R4学R5的路由是通过静态路由学到的,优先级60<255,所以,R4压根就不会通过BGP学R5的路由的或者说不加表!
[R4]undo ip route-static 5.5.5.0 24 45.1.1.2
[R4]undo ip route-static 5.5.5.0 24 54.1.1.2
[R4]ip route-static 5.5.5.5 32 45.1.1.2
[R4]ip route-static 5.5.5.5 32 54.1.1.2
此时在R4上我们看到R5是优的,但是R2上却是不优的;
这是因为我们的下一跳有问题,修改即可!
[R4-bgp]peer 23.1.1.1 next-hop-local
在R1上也是优的:
此时产生了路由黑洞,R1和R5还是不通的,
R3上没有R5的环回,控制层面可达,数据层面不可达!
解决路由黑洞方案:
全都启用BGP,所以在R3上也需要启用BGP协议:
分别和R2、R4建邻
修改下一跳:
[R2-bgp] peer 23.1.1.2 next-hop-local
[R4-bgp] peer 34.1.1.1 next-hop-local
这下我们看到R3上学到R1和R5的路由是优的
6.测试;
总结
BGP协议本身不计算生成路由条目;负责转发从其他BGP邻居传递过来的路由条目;同时可以将本地路由表中任意路由宣告到BGP协议中来;
BGP宣告配置时,只能宣告本地路由表中的路由条目,且宣告配置中网络号的掩码必须和路由表中的记录完全的一致;