VPNv4 需要核心里的 MPLS 吗?并不一定
BGP VPNv4 协商的是路由分发上下文,不是转发路径。请把导入、下一跳解析和你能运行的封装分开看。
在两台路由器之间启用 VPNv4 地址族,只会建立一个路由分发上下文,仅此而已。它不会安装转发路径,也不会告诉你哪种封装会把客户报文送到远端端点。一旦把这两件事分开,「这是否需要核心中的 MPLS」就变成一个更窄、可以回答的问题,关键在于平台所支持的数据平面。
地址族实际协商的是什么
多协议 BGP 在 AFI 1 和 SAFI 128 下承载 VPNv4 网络层可达性信息,每条记录把路由区分符与一个前缀和一个标签配对。会话协商的是双方都能编码和解码这些信息。它不协商数据平面。本段之后的一切都关于转发,而其中没有任何一项是由会话建立来决定的。
因此,会话成功只能证明控制平面的能力,不能证明转发。路由器可以保存数千条 VPNv4 记录,却仍然丢弃每一个客户报文,这正是两类故障从一开始就被混为一谈的原因。
注意 NLRI 中的标签。它是服务标签,绑定在 VRF 内的一个前缀上,报文到达出口端点后就承担转发角色。是否有任何中转设备读取它,是另一个设计决策。
接收、导入和转发是三个步骤
接收一条路由、被允许使用它,以及能够用它转发,由设备的不同部分完成。BGP 存储它听到的内容;导入策略和路由目标匹配决定哪个 VRF 可以考虑它;然后转发平面必须把通告的下一跳解析成它真正能发到线路上的东西。
| Step in the chain | What has to be true | How it fails quietly |
|---|---|---|
| NLRI exchange | Both speakers negotiate the VPNv4 capability | Session stays up while the family is never activated |
| Import eligibility | A route target on the received route matches the VRF import policy | The route exists in the table but never enters the VRF |
| Next-hop resolution | The advertised next hop resolves to a usable tunnel or label path | Best path is selected, then marked unreachable or unusable |
| Encapsulation | The egress endpoint can decapsulate what the ingress produced | Packets arrive and are discarded for a format mismatch |
最令人意外的故障就出在这个中间步骤。一条路由可以存在于 BGP 表中、有效,甚至是最优的,而 VRF 路由表却保持为空,因为没有路由目标匹配导入列表。没有任何东西记录协议错误,因为根本没有发生协议错误。
最后一步才是平台支持显现的地方。底层可达的下一跳并不会自动解析为 VPN 业务传输,设备可能要求特定隧道类型、特定标签操作,或两者兼有。读取解析状态比读取路由数量更有信息量。
IP 核心可以承载一个它从不交换的协议栈
值得保留的区分是「核心不运行 MPLS」和「业务中任何地方都不存在标签」。这是两种不同的主张,只有前者是在讲中转设备。RFC 4023 定义了通过 IP 或 GRE 隧道承载 MPLS,正是这个机制使第二种主张在纯 IP 核心上成为可能。
customer packet + service label
encapsulated in GRE, addressed to the egress tunnel endpoint
forwarded by ordinary IP routers on the outer header
decapsulated at the endpoint, label still meaningful
中转路由器按外层 IP 目的地址转发,既不需要客户前缀,也不需要原生标签交换。在远端,外层隧道被移除,服务标签继续工作。核心搬运的是不透明的载荷,而这正是 IP 网络擅长的事。
这个设计不能给你的是一个普适保证。它不能证明每台路由器都能通过任何 GRE 接口解析每一个 VPNv4 下一跳,也不是删除一份可用原生 MPLS 配置的理由。它是对普适主张的反例,而实际问题仍局限在平台之内。把这个问题记为平台限制,而不是协议规则。
在设备上沿链条走下去,直到它断掉
从收到的路由开始,停在第一个失败的步骤,因为前一步坏掉时,后续步骤无法诊断。在典型实现中,四条命令可以覆盖其中大部分。
show bgp vpnv4 unicast all summary
show bgp vrf CUSTOMER_A ip route 198.51.100.0/24
show ip route vrf CUSTOMER_A 198.51.100.0
show mpls forwarding-table vrf CUSTOMER_A
把它们当作一个序列来读,而不是四项独立检查。第一条确认地址族已激活且对端在交换路由;第二条显示前缀到达时是否带有可用的下一跳;第三条证明导入资格;第四条显示转发平面是否为其绑定了标签或隧道。
然后沿两个方向测试工作负载路径,使用能承受封装的 MTU。GRE 会增加首部字节,一条能通过小探针的路径,可能只在某一个方向上对满尺寸报文失败,看起来像应用故障而不是传输故障。
两条运维提示收尾。GRE 是封装,不是保密,因此不可信的中转网络需要在其上采用受支持的安全安排,而不是想当然。还要在设计评审之前记录平台实际支持哪种封装,因为这一个答案决定了纯 IP 核心是可行选择,还是一份无法转发的方案。