VPN 中的 BGP 与 MPLS:哪一层真正承载数据包
BGP 负责分发路由,MPLS 负责转发数据包。按顺序做这五项检查,就能看出你的 VPN 前缀或数据包停在哪一层。
问 VPN 到底是跑在 BGP 上还是 MPLS 上,等于把两个层次混成一个决定。BGP 分发可达性与策略,MPLS 依据已安装的标签状态转发数据包。在 BGP/MPLS VPN 中两者协同工作,去掉任何一个都不会留下任何服务。下面的检查让同一个前缀依次经过两层,你就能准确看到自己的前缀停在哪里。
检查 1:前缀是否在正确的 VRF 中
从运营商入口边缘开始,询问客户前缀属于哪个 VRF。在这种设计中,客户地址重叠是常态,因此 VRF 正是把两个都使用 10.0.0.0/8 的客户区分开的上下文。
如果那里没有该前缀,后面的一切都不可能正确,剩下的检查就是白费力气。
检查 2:VPN 路由是否已分发并导入
运营商通过 MP-BGP 分发客户路由。每条路由携带路由区分符,使原本相同的前缀变得唯一,还携带路由目标,决定哪些 VRF 导入这条路由。路由到达却未被导入,接收方 VRF 对该前缀就是空的。在责怪远端之前,先检查导入策略。
路由选择同样重要:经由另一台运营商边缘的优选路径会替换你原本期望看到的那条。
检查 3:入口边缘对数据包做了什么
数据包到达时,入口边缘在 VRF 内做一次 IP 查找,然后为选定路径压入标签。即便抓包显示标签数量不同,栈也始终有两个逻辑角色。
transport label toward the egress edge
VPN service label for the egress forwarding action
customer IP packet
BGP/MPLS VPN 规范描述的就是这种安排。倒数第二跳弹出标签可能让传输标签在最后一跳之前就消失,因此在网络中部抓到两个标签并不能证明存在故障。
检查 4:底层网络是否转发了这些标签
中转路由器依据已安装的标签表项进行交换,并不会去读 BGP 更新来决定你这个数据包的命运。正因如此,客户路由明明存在,转发却仍然失败:解析出的下一跳或传输标签可能各自出问题。学到 VPN 前缀并不会修好它下面的底层网络。
要检查通往出口边缘的标签绑定,而不只是路由是否存在。
检查 5:出口动作与回程路径
在出口,业务标签指明转发动作,数据包被解封装,然后前往客户目的地。从那里开始,回程路径也必须工作,包括该接口上客户侧的访问策略。
单向成功通常是回程路由或过滤的问题,而不是标签栈的问题。
把你的症状对应到其中一项检查
接收方 VRF 缺少路由,说明是通告、导入策略或路由选择的问题。路由存在但数据包失败,说明是解析出的下一跳、标签转发或客户侧回程路径的问题。数据包到达了错误的目的地,通常说明你查错了 VRF。这些都不是更换路由协议的理由。
还有一点值得直说:这种设计把客户隔离开,并高效地转发他们的流量。它并不加密,把它当作机密性服务是另一个错误。