1、实验拓扑:
2、实验目的:
(1)掌握BGP(EBGP、IBGP)邻居建立过程,BGP路由通告原则
(2)EBGP邻居用Loopback地址建立邻居的条件
(3)掌握路由发布(静态、动态)
(4)掌握EBGP、IBGP路由传递下一跳问题
(4)掌握其配置
3、理论分析
建立邻居:
手动配置邻居,一对邻居地址间经TCP三次握手建立TCP连接,在TCP连接建立好的基础上,互相发送Open报文,协商BGP参数,建立BGP邻居。
EBGP:不同AS间建立EBGP邻居;用于在AS之间传播路由。
一般使用直连端口来建;
使用Loopback地址建邻居需满足以下条件:
二端IP能互相通信;需要使用ebgp-multihop 来修改TTL值,EBGP默认为1。
IBGP:同一AS内建立IBGP邻居,一般使用Loopback建立邻居;IBGP TTL值默认为255。
Next-hop-self:
(1) 向EBGP邻居通告路由时,将下一跳改变为自己。
(2) 默认情况下,IBGP路由传播不改变下一跳。(可以通过使用next-hop-self命令改变为自己)
(3) 本地始发的路由下一跳为0.0.0.0,向BGP邻居通告时,将下一跳改变为自己。
(4) 默认情况下,多路访问介质上的BGP路由传播不改变下一跳。(包括IBGP、EBGP)
4、部分配置
在R1、R2、R5、R6运行IGP协议实现全网连通,并在R1、R2上下发一条缺省路同给R5、R6
(1) BGP邻居建立
R1(config)# router bgp 10
neighbor 10.10.0.2 remote-as 10
neighbor 10.10.0.2 update-source loopback0 //建立IBGP邻居 指定更新源
neighbor 10.10.13.2 remote-as 30 //指定EBGP邻居 默认从接口发送更新
(2) 路由发布(静态路由注入)
R1(config)#
ip route 10.10.0.0 255.255.0.0 null0
router bgp 10
network 10.10.0.0 mask 255.255.0.0
(半动态注入)
RT1(config)#
router bgp 10
network 10.10.5.0 mask 255.255.255.0
network 10.10.6.0 mask 255.255.255.0
5、分析
R1(config)#
ip route 10.10.0.0 255.255.0.0 Null0
router bgp 10
network 10.10.0.0 mask 255.255.0.0
//使用BGP发布路由,只将全局路由表中存在的路由发布出去,路由表中不存在的路由即使发布了也不会生效。所以动态注入时应先配置一条下一跳指向Null0的路由。
R1#do show ip bgp
Network Next Hop Metric LocPrf Weight Path
* i10.10.0.0/16 10.10.0.2 0 100 0 i
*> 0.0.0.0 0 32768 i
*> 10.30.0.0/16 10.10.13.2 0 0 30 i
*>i10.40.0.0/16 10.20.24.2 0 100 0 40 i
* 10.10.13.2 0 30 40 i
R2#do show ip bgp
Network Next Hop Metric LocPrf Weight Path
* i10.10.0.0/16 10.10.0.1 0 100 0 i
*> 0.0.0.0 0 32768 i
*>i10.30.0.0/16 10.10.13.2 0 100 0 30 i
* 10.20.24.2 0 40 30 i
*> 10.40.0.0/16 10.20.24.2 0 0 40 i
//在R1、R2上关于10.30.0.0的路由,R1只有一个下一跳,而R2有二个下一跳的原因是:R1从R3通过EBGP收到这条路由,再发送给R2, 而R2又通过R4收到一条经过了2个AS的10.30.0.0这条路由, 根据AS-Path R2选择从R1收到的路由放入路由表。又根据水平分割,故不再氢10.30.0.0传回给R1. 10.40.0.0同理得到。
IBGP发送路由不改变下一跳,故在R2上收到的10.30.0.0下一跳为10.10.13.2而不是10.10.0.1
EBGP、IBGP路由下一跳问题
R1(config)#
router bgp 10
neighbor 10.10.0.2 next-hop-self //通告邻居下一跳为本路由器
R1#show ip bgp
Network Next Hop Metric LocPrf Weight Path
* i10.10.0.0/16 10.10.0.2 0 100 0 i
*> 0.0.0.0 0 32768 i
*> 10.30.0.0/16 10.10.13.2 0 0 30 i
*>i10.40.0.0/16 10.10.0.2 0 100 0 40 i
* 10.10.13.2 0 30 40 i
R2(config-router)#do show ip bg
Network Next Hop Metric LocPrf Weight Path
* i10.10.0.0/16 10.10.0.1 0 100 0 i
*> 0.0.0.0 0 32768 i
*>i10.30.0.0/16 10.10.0.1 0 100 0 30 i
* 10.20.24.2 0 40 30 i
*> 10.40.0.0/16 10.20.24.2 0 0 40 i
//通过next-hop-self命令改变了从IBGP学到的路由的下一跳
把R1、R2之间的线断开,出现了环路
R5#traceroute 10.40.4.1 source 10.10.5.1
Type escape sequence to abort.
Tracing the route to 10.40.4.1
1 10.10.1.5 372 msec 20 msec 52 msec
2 10.10.1.6 116 msec 116 msec 264 msec
3 10.10.1.5 104 msec 152 msec 128 msec
4 10.10.1.6 172 msec 136 msec 80 msec
5 10.10.1.5 452 msec 204 msec 216 msec
6 10.10.1.6 360 msec 272 msec 232 msec
7 10.10.1.5 228 msec 252 msec 236 msec
8 10.10.1.6 228 msec 376 msec 344 msec
9 10.10.1.5 296 msec 484 msec 304 msec
解决路由环路的方法:
1. 在RT1和RT2之间在增加一条链路,以保证路由的健壮性。
2. AS 10内的所有设备启动BGP,配置IBGP全网状互连。
3. AS 10内所有设备启BGP,配置路由反射器RR。
4. AS 10内所有设备启动MPLS,边界设备之间建立MPLS LSP。
5. 在RT1 RT2上,有选择地把部分BGP路由重发布至IGP
本实验采用第二种方案解决