参考: https://www.cisco.com/c/zh_cn/support/docs/ip/border-gateway-protocol-bgp/19167-bgp-rec-routing.html
此问题的出错原因在:
- EBGP邻居使用环回口地址建立(如果用邻接口就不会有此问题)
- 为了让Router A能在建立BGP邻居前ping Router B的lo 0口在A和B上分别添加了24位的环回口地址静态路由(这里如果用32位也就没这个问题了)
- BGP邻居建立后又傻乎乎的吧20.20.20.20的32位路由通过BGP通告了给router A (不通告也就没这问题了)
- 那么接下来Router A就会同时有去往router B环回口的24位静态路由和32位的BGP路由,因为LPM原则优先匹配32位BG路由,但是BGP路由的下一跳还因为update lo0是lo 0本身,这就不可达了。一段时间后这个路由就会被删除掉,连带着所有下一跳是Router B的lo 0的路由都由于下一跳不可达被删除了。
- 过一分钟左右router A中只剩下24位的去往Router B的lo 0的路由又会重新建立BGP邻接关系学习路由。如此反复就会看到A的路由表一分钟有BGP路由,另一分钟又没有。
解决方案:
出错原因中提到的地方随便改一个都能解决此问题。最合理简单的应该是在A和B添加静态路由时就直接加成32位的省的被32位BGP路由因为LPM变成次优。