先看一下我们的拓扑
网络架构:R1和R2是ISP1电信,R5和R6是ISP2联通,AS65282是某大型企业,有两个出口,分别跟电信和联通起EBGP,通过BGP选路,访问电信和联通的资源分别走相应运营商的出口,保证网络的高可靠性和访问速度。
遇到的问题:在R7上BGP表中有默认路由,但在路由表中却没有默认路由,如下图所示:
如果没有默认路由,在路由表中没有明细路由的情况下,路由器就不知道如何转发,就会将数据包丢弃,这样网络就不可达了。
我们知道路由放入路由表的原则是下一跳可达,我们现在在R7上ping一下1.1.1.1或2.2.2.2看是否通。
下一跳不可达,所以不能将默认路由放进路由表。为什么学到了路由却放不进路由表呢?
我们知道BGP路由器从EBGP邻居学到的路由转发给IBGP邻居时,默认是不修改下一跳,所以看到默认路由的下一跳,显示的是R1和R2的loopback地址。
在IBGP R7收到该默认路由时,发现下一跳不可达,于是不放入路由表中,这就是为什么BGP表中有路由,但路由表中没有路由的原因。
我们知道了原因,肯定需要想办法解决它,是时候拿出我的武林秘笈了。
从秘笈中发现BGP有一条peer next-hop-local命令用来设置向IBGP对等体(组)通告路由时,把下一跳属性设为自身的IP地址。意思就是在R3和R4上告诉R7,你去往某某的路由,往我这里扔,我帮你转发出去。我们在R3和R4上把这条指令敲上看会是怎么样。
我们再在R7上看一下BGP表和路由表。
可以看到BGP表和路由表下一跳都指向了R3和R4的loopback地址了,现在R7就有默认路由了。
总结:缺省情况下:
- BGP向EBGP对等体通告路由时,将下一跳属性设为自身与对等体相连的接口地址。
- BGP从EBGP向IBGP对等体通告非标签路由时,不改变下一跳属性,通告标签路由时,将下一跳属性改为自身与对等体相连的接口地址。
- BGP从IBGP向IBGP对等体通告路由时,不改变下一跳属性。
- BGP将本地始发路由发布给IBGP对等体时,将下一跳属性设为自身与对等体相连的接口地址。
后期会持续出企业多BGP出口相关知识,欢迎大家关注一下,有什么疑问可以在下方留言,一起讨论。
关键词:BGP表中有默认路由,但无法进入到路由表?这是啥因素?