同一台设备上的两条路由可以都指向 198.51.100.77,却回答着不同的问题。一条描述 MAC 地址从哪里可达,并可选地说明绑定的是哪个 IP。另一条描述一个通过下一跳解析的前缀,即使该前缀只有一个主机那么大。把两者混淆,就会产生一张看似路由故障、实为读错路由类型的工单。

区分它们最快的方法是读 NLRI 围绕的那个键,而不是它末尾的掩码。

路由的键说明路由在主张什么

2 型是 RFC 7432 中的 MAC/IP 通告路由,它的键是 NLRI 内部的 48 位 MAC 地址。这个键背后是一个 IP 地址字段,其长度字段可以是 0、32 或 128 位,因此只有 MAC 的通告本身就是一条完整路由,而不是缺了部件的主机条目。紧随其后的标签栈指向该 MAC 所在的桥接上下文。

IP 字段填不填,改变的是路由陈述的内容,而不是路由的种类。长度为 32 位或 128 位时,发送方还主张这个 IP 在一个 EVPN 实例内属于那个 MAC。长度为零时,发送方根本不作任何 IP 主张。两种版本都没有说前缀可以经由路由器到达。

5 型是 RFC 9136 中的 IP 前缀路由,它的键是写成「长度加相应位数」的前缀。长度在 IPv4 下从 0 到 32,在 IPv6 下从 0 到 128。

该区间的两端都合法,且都不暗示 MAC。零长度前缀主张可达而不点名任何主机,而 /32 恰好点名一个地址。NLRI 还携带一个网关 IP 地址,出口侧用它构建 overlay 索引,另有一个用于转发上下文的标签。没有可供交换的 MAC 字段,因此接收方把 5 型当作被路由的目的地。

/32 前缀路由不是改名的 2 型

主机大小的前缀就是普通的 5 型路由。同一个地址的 /32 前缀路由和 2 型可以并存于一个 EVPN 实例,它们携带的转发信息并不相同。

以 VNI 10100 的 EVPN 实例中的 198.51.100.77 为例。2 型可能把它与 MAC 02:00:00:00:00:77 以及标识该 MAC 学习所在桥域的一个标签配对。5 型可能为整个子网通告 198.51.100.0/24,或只为该地址通告 198.51.100.77/32,并带一个指向出口 VTEP 的网关地址。地址重叠是刻意的,因为两条路由回答的是不同的问题。

一条路由说存在一个端点绑定,并可通过某个特定的桥到达。另一条说某个前缀可通过某个特定的路由器到达,无论其中是否曾经学到过任何端点。

这个差别决定了流量失败时先看哪里。如果单个主机不可达而它的子网路由看起来正常,那么 5 型从来就不该承载该主机;去找缺失的 2 型。如果主机路由存在但整个子网不可达,就检查 5 型到底有没有被生成。按顺序读字段胜过凭掩码长度去猜。

不靠猜测地读两条路由

在 NX-OS 上,show bgp l2vpn evpn route type 2和show bgp l2vpn evpn route type 5正好沿这条线划分表,而show l2route evpn mac ip显示 2 型路由背后的本地 MAC 到 IP 绑定。在 Junos 上,show evpn database列出已学到的 MAC 与 IP 绑定,而show route table bgp.evpn.0显示通告出去和接收到的内容。

下结论前先按 route distinguisher 和 Ethernet 标记过滤。同一个 MAC 或前缀可能出现在多个 EVPN 实例中,在一个实例里看似错误的路由,在另一个实例里可能是正确的。

然后按顺序读 NLRI:路由类型、键、网关或标签字段,最后是属性里的 route target。携带非零 ESI 的 2 型告诉你该 MAC 属于多归属,正是这个值把不同 PE 路由器的通告绑在一起。携带网关地址的 5 型告诉你哪个出口 VTEP 应当接收流量。

如果缺少某条路由,在编码之前先查它的产生。确认源端本地确实有该绑定或前缀,再确认挂在它上面的 route target 在这台设备上被导入。多数关于 5 型损坏的报告最终停在导入策略上,而不是 NLRI 格式。

记录上下文,而不只是路由类型

把路由类型、EVPN 实例、route distinguisher、导入与导出的 route target,以及解析出的下一跳一起写下来。没有实例的 2 型是有歧义的,没有路由族的下一跳会招致错误结论。

即使载荷是 IPv4 地址,两者也都还是 EVPN 路由。NLRI 内部的地址族与路由自身的地址族是两个不同属性,5 型不会仅仅因为携带 IPv4 前缀就变成 IPv4-unicast 或 VPN-IPv4 路由。

这个区别体现在 EVPN 控制平面与 IP-VRF 的边界上。route target 决定哪个 VRF 导入该前缀,而网关地址与标签决定报文如何朝出口封装。把这些放在一起读,转发决策就不再显得随意。

下次 EVPN 表里出现 /32 时,先查键,再看掩码。带可选 IP 的 MAC 键是 2 型绑定;前缀键无论多长都是 5 型路由。把 route target 和下一跳写在旁边,下一位工程师就不必重新推导整段来龙去脉。

相关文章