实验拓扑:

实验要求:
- R1,R2,R3,R4,R5建立OSPF邻居,并将各自的Lo0口通告进入OSPF
- R3,R4,R5建立iBGP邻居,将R4配置为路由反射器
- R2配置BGP200并与R1的BGP100和R3的BGP300建立邻居关系
- 所有的BGP邻居建立都使用各自的Lo0口地址
- R5通告一个Lo200,地址200.200.200.200进入BGP300
- 最后要求R1能够访问到200.200.200.200
当所有的配置完成后,我们查看R1的BGP表:

已经通过BGP顺利的学到了R5的Lo200口的地址,但是当我们tracert 200.200.200.200时,发现产生了环路:

查看R2和R3的BGP表:

由于AS200和AS300是eBGP邻居,所有R3向R2通告200.200.200.192/27时,将下一条改为了R3出口的BGP地址,而R3是通过iBGP学到200.200.200.192/27,所以他的下一条不变
我们在查看R2的路由表:

当R1ping200.200.200.192时,数据包到达R2,R2查找路由表,发现200.200.200.192的下一条是3.3.3.3,于是将数据包发送到R3,而R3查找路由表,发现200.200.200.192的下一条是5.5.5.5,于是根据路由表将数据包发送到5.5.5.5的下一条R2,于是数据包在R2和R3之间来回发送,产生了环路。
要解决这个问题,只有改变R2到达200.200.200.192的下一条,直接去往5.5.5.5。使R3向R2的eBGP对端发送路由的时候不将下一条改为自己的地址:
R3(config)#router bgp 300
R3(config-router)#neighbor 2.2.2.2 next-hop-unchanged
这是R3发送给R2的路由的下一条已经不变:

这是再在R1上tracert 200.200.200.200,成功!
