问题描述
路由条目在传递的过程中,很可能会变为无效(比如下一跳不可达,导致收到的路由条目不能将数据包引导到目的地址)。
如图 AR1 ⇐ EBGP Peer ⇒ AR2 且 AR2 ⇐ IBGP Peer ⇒ AR4,此时 AR1 通告的 10.1.1.1/32 路由通过 BGP 传递到 AR4 时,将成为无效路由。
原因分析
BGP Update Packet 的 Next-Hop 属性保存下一跳地址,而 BGP 要求路由在 IBGP Peer 间传递时,Next-Hop 属性要保持不变。鉴于此 10.1.1.1/32 这条路由的原始下一跳为 10.1.12.1(AR1 GE 0/0/0)。
为了模拟 AS 真实环境,10.1.12.0/24 是未通过 IGP(OSPF)进行宣告的,也就是说 AR4 并不知道 10.1.12.0/24 的路由,也就无法到达路由的原始下一跳 10.1.12.1,下一跳不可达,所以成为无效路由。
解决方案
需要将下一跳引入到区域中,使 AR4 知晓去往下一跳的地址(下一跳可达):
1)OSPF 宣告(不推荐)
2)import-router(不推荐)
3)ip route-static(不推荐)
4)[bgp] peer 10.1.4.4 next-hop-local # Connect Interface,在传递路由时,将下一跳修改为发送路由的 IEGP 的源地址(AR2 地址);
补充说明
关于「通告 IBGP Route 时,自动修改 Next-Hop 属性」说明
问题描述:
BGP 要求路由在 IBGP Peer 间传递时,Next-Hop 属性要保持不变。为什么不改变 Next-Hop 属性,使其为通告 IBGP Route 的 IBGP Router 地址呢?
原因分析:
如果采用这种方案(修改 Next-Hop 属性),那么在 MA Network 中,可能出现次优路径问题。
Network-A - R1 <== (MA) ==> R2 || vv R3 R1 <= EBGP Peer => R2 <= IBGP Peer => R3 如果修改 Next-Hop 属性,那么 R3 收到路由的下一跳是 R2 ⇒ 此时 R3 到 R1 的 Network-A,需要经过 R2,然而 R3 本身能够直达 R1; 如果不改 Next-Hop 属性,那么 R3 收到路由的下一跳是 R1 ⇒ 此时规避次优路由,R3 直接通过 R1 到达 Network-A
补充说明:
在 BGP 中,针对这种网络环境,Next-Hop 设置规则进行特殊优化。不限于 IBGP Peer,只要网段相同,则不修改 Next-Hop 属性。