两个 PE,一个前缀:RD 为何决定可见性
两台通告同一前缀的边缘路由器共享一个目的地,除非它们的 route distinguisher 不同。要有意分配,然后检查 VRF。
两台通告同一客户前缀的边缘路由器描述同一个 VPNv4 目的地,直到有东西把它们分开,而分开它们的是 route distinguisher。它限定前缀,但不决定谁来导入结果,那是 route target 的职责。分配 RD 时,要从“在每一个这些通告可能相遇的域里都必须保持可区分”的路由集合出发,而不是从单台设备的文件布局出发。你选定的编号是一个标识,后续复核都要依赖它,所以它应当先进入清单,再进入配置。
一个 RD 加一个前缀就是一个目的地
一个 RD 加一个 IPv4 前缀构成控制面比较的 VPNv4 目的地。把同一前缀发给两台 PE 用于不同客户,若 RD 相同,它们就是在通告通往同一目的地的路径。屏幕上没有任何东西告诉你这种归组是错的,因为平台完全按标识所说的去做。改动其中一台的 RD,旧通告会被撤销,另一台会在不同标识下出现新通告。所有依赖旧标识的下游内容,从路由选择到已保存的操作员过滤器,现在指向的东西已不存在。
每个目的地有多条路径是 BGP 的正常行为,不是症状。说话者可以在为转发选择一条最佳路径的同时保留多条收到的路径,收到与选中之间的差距,正是可见性问题所在。当某条路径像是消失时,先确认它所属的标识是否仍然存在,再看会话。
同一个 RD,同一个目的地,路径不同
以同一业务的名义从两台路由器发送同一个 RD 和同一前缀,两者都在提供通往同一目的地的路径,通常下一跳不同。route reflector 转发其中哪一条,是关于 reflector 的决定:它的路径选择、通告能力,以及叠加在其上的任何策略。两台边缘路由器都控制不了这个选择。给两个通告不同的 RD,它们各自成为独立目的地,于是两者都能在一个只承载单一标识选中路径的控制面里存活。
可见性与多路径在接收侧 VRF 相遇,但不是同一个决定,承载两个标识的 reflector 并没有配置第二条已安装路径。VRF 安装 导入策略所允许的内容,以及自身最大路径设置所允许的内容。若想让第二条路径真正被使用而不只是可见,需要单独检查这个设置。
本地唯一性规则不是策略
给每台 PE 和每个路由实例分配各自的 RD 是稳妥的约定:它命名来源,避免不相关的业务在同一标识上相撞,并给清单一个稳定的键。有些平台只要求设备内部唯一,并明确允许路由器为同一 VPN 实例共用 RD。这种许可是实现约束,不是可以交给厂商的跨网络规则。如果域跨越多个团队,请自己写下分配策略。
归属从不来自数字。某台 PE 用 65000:12、另一台用 65000:13 只是一种习惯,真正把路由放进 VRF 的,是像 65000:112 这样相匹配的导出与导入目标。把 RD 当作路由的标识,把 route target 当作把它带入 VRF 的许可。
在 VRF 上证明变更,而不是在显示上
在动 RD 之前,先写下四件事:PE 今天通告什么、reflector 反射什么、接收侧 VRF 导入什么、它选择哪条路径。新 RD 撤销一个通告并引入另一个,所以变化会在会话两侧出现,只看通告侧很容易误读。验收应基于你想要的连通性,而不是前缀列表里多出的一行。下表让这三个标识在复核中不至于混淆。
| Identifier | Question it answers | What breaks when it is confused with another |
|---|---|---|
| Route distinguisher | Which route identity is this? | Two services collapse into one destination, so one advertisement withdraws the other |
| Route target | Who is allowed to import it? | Routes arrive in a VRF that should not have them, or never arrive at all |
| VRF import policy | What does this instance accept and install? | The route is visible on the PE but never selected in the VRF |
从通告侧 PE 入手,在移除任何东西之前,比较同一前缀的两个标识。下面的 IOS 命令依次回答三个问题:旧通告是否还在、新标识对 reflector 是否可见、VRF 是否选中该前缀。
show bgp vpnv4 unicast rd 65000:12 203.0.113.0/24 show bgp vpnv4 unicast rd 65000:13 203.0.113.0/24 show ip route vrf CUSTOMER-A 203.0.113.0/24
其他平台用不同语法打印同样的信息,这些问题在变化之后依然成立。如果 reflector 上没有新标识,而 PE 却把它列为已通告,首先要怀疑的是 reflector 的策略或通告能力,而不是编号。
把 PE、实例、RD、导出与导入目标以及前缀归属记录在一处,因为只有存在这份记录时,下一次分配才是查询而不是猜测。保留旧 RD,直到新标识在接收侧 VRF 中可见,再在第二步撤销它,让每个阶段都可回退。