华为交换机 BFD 会话配置与静态路由联动实战 - 夜莺博客

华为交换机 BFD 会话配置与静态路由联动实战

静态路由本身没有任何检测机制,链路断了只能等管理员发现——这是很多"单边不通"故障拖了几个小时才被定位的根本原因。BFD(Bidirectional Forwarding Detection)可以在毫秒级感知链路故障,并与静态路由联动,让路由表在链路失效时立即撤销这条路由。本文给出华为 VRP 上完整的 BFD 会话配置、单跳与多跳的区分方法,以及与静态路由绑定的验步骤。

BFD 与静态路由联动的价值

把 BFD 会话绑定到静态路由之后:

  • BFD 检测到链路故障(会话状态 Down)时,会上报系统,系统把该静态路由从 IP 路由表中删除;
  • BFD 检测到链路恢复(会话状态 Up)时,系统把该路由重新加入路由表;
  • 缺省情况下,会话处于 Admin down 状态时,绑定的静态路由仍可参与选路;但整机重启后需要重新协商,以协商结果为准。

也就是说,BFD 把"路由存在但下一跳已经不可达"这种黑洞状态压缩到了毫秒级。

两端配置 BFD 会话

[SwitchA] bfd
[SwitchA-bfd] quit
[SwitchA] bfd aa bind peer-ip 10.1.1.2
[SwitchA-bfd-session-aa] discriminator local 10
[SwitchA-bfd-session-aa] discriminator remote 20
[SwitchA-bfd-session-aa] min-tx-interval 100
[SwitchA-bfd-session-aa] min-rx-interval 100
[SwitchA-bfd-session-aa] detect-multiplier 3
[SwitchA-bfd-session-aa] commit
[SwitchA-bfd-session-aa] quit

[SwitchB] bfd
[SwitchB-bfd] quit
[SwitchB] bfd bb bind peer-ip 10.1.1.1
[SwitchB-bfd-session-bb] discriminator local 20
[SwitchB-bfd-session-bb] discriminator remote 10
[SwitchB-bfd-session-bb] commit
[SwitchB-bfd-session-bb] quit

几个容易踩的点:

  1. discriminator local 必须与对端的 discriminator remote 一致,本端的 local 不能与 remote 相同。
  2. 会话名(aa / bb)是本端标识,两端不必相同。
  3. 不执行 commit,会话不会生效——配置看起来完整但 display bfd session all 里什么都没有。
  4. 检测时间 = min-rx-interval × detect-multiplier。上例为 100ms × 3 = 300ms。间隔设得越小,对 CPU 和对端要求越高。

单跳检测与多跳检测的区别

  • 单跳检测:用于非迭代的静态路由,出接口和下一跳都是直连可达的。BFD 会话的出接口即静态路由的出接口,对端地址即路由下一跳。此时建议在绑定语句中明确指定出接口,例如 bfd aa bind peer-ip 10.1.1.2 interface Vlanif10。
  • 多跳检测:用于迭代的静态路由(只配置了下一跳,需要迭代出直连下一跳和出接口)。会话的对端地址是路由的原始下一跳,出接口不限。用 display ip routing-table 查看时,如果 Flags 字段显示 R,说明这是迭代路由,应当使用多跳检测。

静态路由绑定 BFD 会话

[SwitchA] ip route-static 10.2.2.0 24 10.1.1.2 track bfd-session aa
[SwitchB] ip route-static 10.0.0.0 24 10.1.1.1 track bfd-session bb

绑定之后,这条静态路由能否参与选路由 BFD 会话状态决定。需要注意的是:一条静态路由只能绑定一个 BFD 会话;如果同时存在主备两条静态路由,应分别绑定不同的会话,用于各自的故障感知。

验证与排障

[SwitchA] display bfd session all
! Local Remote     PeerIpAddr     State     Type  InterfaceName
! 10    20         10.1.1.2       Up        S_IP_IF  Vlanif10

[SwitchA] display bfd session all verbose
[SwitchA] display bfd configuration all
[SwitchA] display ip routing-table 10.2.2.0
[SwitchA] display ip routing-table protocol static

排障顺序建议:

  • 会话无法建立:先确认 10.1.1.2 本身可达(ping),再检查两端 discriminator 是否对应、是否都执行了 commit、UDP 3784/4784 是否被 ACL 拦截。
  • 会话 Up 但路由不生效:检查静态路由是否真的绑定了正确的会话名,以及该路由是否被其他更优路由覆盖。
  • 会话频繁 Up/Down:检测间隔过小、链路存在丢包或抖动,或对端 CPU 繁忙。可先放大 min-rx-interval 与 detect-multiplier 观察是否稳定。
  • 整机重启后行为异常:重启后 BFD 需要重新协商,路由能否参与选路以协商状态为准,这是正常现象而非故障。

与动态路由协议联动

BFD 更大的价值在于和 OSPF、IS-IS、VRRP 联动:把检测时间从秒级压到毫秒级,收敛时间随之下降。配置思路是在协议视图或接口下启用 BFD,而不需要为每条路由单独绑定会话。相关配置可参考 华为交换机 OSPF 配置 与 华为交换机 VRRP 主备配置;如果用于双机热备场景,还可以结合 USG6000 HRP 双机热备 一起理解故障切换链路。

静态路由本身的进阶用法(迭代、浮动静态路由、路由优先级)见 华为静态路由配置。

原文链接:https://support.huawei.com/enterprise/zh/doc/EDOC1000178149/f43de708