邻居故障后流量悄悄失踪?华为BGP按策略迭代下一跳堵黑洞

本文整理自华为官方发布的典型配置案例,命令与步骤均按原始文档呈现,供现场实施参考。

BGP组网里有个隐蔽的流量黑洞:IGP路由撤得快,BGP路由感知得慢,两者时间差里,BGP路由的下一跳可能被错误地迭代到一条不相干的路由上,流量就这么无声无息地丢了。华为BGP按路由策略迭代下一跳功能,就是用一条路由策略管住迭代结果,把这个黑洞堵上。

黑洞是怎么形成的

官方组网把故障过程演示得很清楚:AS 100内跑OSPF,DeviceA分别与DeviceB、DeviceC通过Loopback0接口建IBGP,B和C都向A发布10.20.1.0/24。B的router-id小,A优选B那条,原始下一跳是2.2.2.2/32,正常时这个下一跳会迭代到去往2.2.2.2/32的IGP路由上,出接口10GE0/0/1。麻烦在于:当B故障,A会很快撤销去往2.2.2.2/32的IGP路由,而A要等BGP保持时间定时器超时才感知到BGP路由变化——这段空窗里,按掩码更长优先的匹配原则,A会把去往10.20.1.0/24的BGP路由下一跳错误迭代到去往2.2.2.0/24的直连路由上(A身上恰好有这条直连网段),流量全部掉进黑洞。

解法:在DeviceA上配置按路由策略迭代下一跳,把迭代结果路由限制为32位掩码的具体路由,通不过过滤的迭代结果直接标为不可达——逼着BGP放弃错误迭代、快速改选C那条路由。

底座:OSPF加IBGP

AS 100内三台设备跑OSPF:

[DeviceA] ospf 1
[DeviceA-ospf-1] area 0
[DeviceA-ospf-1-area-0.0.0.0] network 1.1.1.1 0.0.0.0
[DeviceA-ospf-1-area-0.0.0.0] network 10.1.0.0 0.0.255.255
[DeviceA-ospf-1-area-0.0.0.0] quit
[DeviceA-ospf-1] quit

(DeviceB、DeviceC的OSPF配置同理,分别宣告2.2.2.2、3.3.3.3与各自互联网段。)A通过Loopback0与B、C建IBGP:

[DeviceA] bgp 100
[DeviceA-bgp] router-id 1.1.1.1
[DeviceA-bgp] peer 2.2.2.2 as-number 100
[DeviceA-bgp] peer 3.3.3.3 as-number 100
[DeviceA-bgp] peer 2.2.2.2 connect-interface Loopback 0
[DeviceA-bgp] peer 3.3.3.3 connect-interface Loopback 0
[DeviceA-bgp] quit

B、C用静态路由配合引入的方式发布10.20.1.0/24:

[DeviceB] ip route-static 10.20.1.0 24 NULL 0
[DeviceB] bgp 100
[DeviceB-bgp] import-route static
[DeviceB-bgp] quit

一条策略锁住迭代结果

核心配置在DeviceA。先建前缀列表与路由策略,只放行32位主机路由:

[DeviceA] ip ip-prefix np-by-rp-ip permit 0.0.0.0 32
[DeviceA] route-policy np-by-rp permit node 0
[DeviceA-route-policy] if-match ip-prefix np-by-rp-ip
[DeviceA-route-policy] quit
[DeviceA] bgp 100
[DeviceA-bgp] nexthop recursive-lookup route-policy np-by-rp
[DeviceA-bgp] quit

模拟故障看切换

B正常时,A上10.20.1.0/24优选原始下一跳2.2.2.2,Relay出接口10GE0/0/1。在B的互联口上执行shutdown模拟故障后,再看A的路由表:

[DeviceA] display bgp routing-table 10.20.1.0 24
 AS-path Nil, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, best, select, pre 255
 Relay IP Nexthop: 10.1.2.2
 Relay IP Out-interface: 10GE0/0/2
 Original nexthop: 3.3.3.3
 AS-path Nil, origin incomplete, MED 0, localpref 100, pref-val 0, internal, pre 255
 Relay IP Nexthop: 0.0.0.0

best已切到原始下一跳3.3.3.3的那条,Relay出接口10GE0/0/2;B那条路由的迭代结果因为2.2.2.0/24不是32位具体路由、通不过策略过滤,Relay IP Nexthop显示0.0.0.0——不可达就不许用,BGP随即完成改选,流量不再失踪。

上生产前的提醒

官方注意事项里写得明白,配路由策略时必须确认所有允许被迭代到的结果路由都能通过过滤,否则会把正常BGP路由也标成不可达,反过来弄瘫转发。上生产前先把现网迭代路径捋一遍再定策略颗粒度。

黑洞这类故障贵在事前预防,出事后排查找半天未必能想到迭代层面。贵州诚鑫致达科技在做核心网BGP设计时习惯把迭代约束与路由策略一并纳入基线配置,欢迎搜索关注获取更多路由排障思路。

企业存储选型参考|贵州诚鑫致达

做机架式部署与数据中心扩容,群晖机型参考:RS2423RP+ · RS1221+ · RS822+。需要选型建议或上门评估,搜「诚鑫致达」即可找到我们。

服务区域|贵州诚鑫致达

贵州群晖NAS、贵阳存储、数据备份、信创云盘或 IT 集成服务,可联系贵州诚鑫致达科技,服务范围覆盖贵州全省各市州。贵州县域市场:县城及乡镇企业存储、办公网络与监控存储。