客户说改完路由目标后前缀不见了,而他们发来的第一张截图往往看错了表。三张不同的表回答三个不同的问题:前缀在 VRF 内是否存在,是否作为 VPNv4 路由被通告和导入,以及是否真的装进了转发表项。顺序一换,结论就会自信而错误。本手册按顺序让一个本地前缀和一个远端前缀走完这三张表,最后给出针对引发问题的 RT 改动的回滚方案。

先给前缀和它该在的表命名

动手之前先写下两个前缀。一个属于客户站点本地,从直连接口或 CE 通告学到。另一个是远端前缀,应当经由运营商骨干网到达。它们走不同路径进入同一个 VRF,一个出问题并不能说明另一个。

TableQuestion it answersCommand
show ip vrf CUST-AWhich RTs are attached for import and exportRead the RT lists before anything else
show ip route vrf CUST-AIs the prefix present in this VRF at allLocal and imported routes both appear
show ip bgp vpnv4 allWas the NLRI advertised and retainedKeyed by route distinguisher
show ip cef vrf CUST-AWas a forwarding entry installedProves a usable path, not just a BGP entry

两个标识符必须分清,这类工单里的大部分混乱都来自这里。路由区分符(RD)是 VPNv4 NLRI 的一部分,作用是让本来相同的客户前缀在骨干网上唯一。路由目标(RT)是作为属性携带的扩展团体,导入和导出策略匹配的正是它。它不是区分符的第二个名字,也不会出现在客户的报文里。

步骤 1:证明前缀在 VRF 里

先看本地视图,再看掌管导入的 RT。如果本地前缀在这里就没有,上游的任何环节都不可能是原因:

show ip route vrf CUST-A 172.21.4.0 255.255.255.0
show ip route vrf CUST-A | include 172.21.4.0
show ip vrf CUST-A

显示为直连或静态的前缀是本地学到的,它存在并不能说明它被导出过。这是本流程中最常见的误读:一张健康的 VRF 表只是本地学习的证据。导出侧是另一个问题,由邻居视图和挂上的导出目标来回答。

既然来了就顺手检查 VRF 上的 RT 列表。如果预期的导入目标不在列表里,下游一切都没有意义。如果它在,但与远端 PE 导出的不同,那么你不必打开任何抓包就已经找到了故障。

步骤 2:读 VPNv4 表和它的目标

VPNv4 表显示控制平面实际交换了什么。先在正确的区分符下找到远端前缀,再看挂在它上面的团体值:

show ip bgp vpnv4 all 10.60.9.0/24
show ip bgp vpnv4 all | include 10.60.9.0
show ip bgp vpnv4 vrf CUST-A neighbors 192.0.2.17 advertised-routes

带着正确路由目标、却没有本地安装的表项,指向的是导入策略或路由选择,而不是可达性。根本没在 VPNv4 表里出现过的表项则指向上游:源 PE 可能没有导出,或者会话没有携带该地址族。

还有第三种情形,常在变更期间把人绕进去。有些平台会借助路由目标成员关系信息,限制自己请求或保留哪些 VPN 路由,所以某一张过滤后的视图里没有远端 NLRI,并不能证明这条通告在任何地方都不存在。在断定路由被全局撤销之前,先看不经过滤的表,以及邻居的已通告路由。

步骤 3:确认确实装了并打了标签

BGP 表项是一个决定,不是一条路径。转发表才告诉你报文有没有地方可去:

show ip cef vrf CUST-A 10.60.9.0/24
show mpls forwarding-table vrf CUST-A | include 10.60.9.0
show ip bgp vpnv4 vrf CUST-A

CEF 表项带有已解析的邻接和出标签,说明数据面应该能通,剩下的症状属于应用或 VRF 内部的过滤。CEF 表项显示下一跳未解析,说明即使 BGP 看起来健康,标签路径也是断的,而这正是 BGP 表截图曾经误导过变更评审的那类情形。

把本地 PE 压上的标签与远端 PE 期待收到的标签比一比。两个视图对不上,是标签分配或会话的问题,改多少次路由目标都不会修好。

带明确范围地回滚 RT 改动

如果故障是从改路由目标开始的,就把它当作一个刻意的步骤撤销,并说明你改动的范围。移除导入目标只是撤掉该 VRF 内的资格。它不会删除骨干网上的 VPNv4 通告,而且在某些平台上路由仍留在表里被保留。这是两种不同的结果,用户看到的现象取决于你想要哪一种。

configure terminal
vrf definition CUST-A
 address-family ipv4
  no route-target import 65000:410
 end
clear ip bgp vpnv4 vrf CUST-A soft in

会话本身已存有前缀时,入向的软重配就够了;在营业时间对面向运营商的会话做硬复位,这个决定应该由别人来做。在 Junos 上,等效检查直接读每个 VRF 的表和 VPN 表,回滚是提交时的回退而不是逐条命令的撤销,所以动手前先把配置差异抓下来。

用开始时的同样三条命令、同样顺序收尾,并带时间戳记录输出。只写「RT 错了,现在对了」的工单没法复用;能证明前缀在 VRF 里、在 VPNv4 里、且已装进 CEF 的,才是下一个人可以对照的证据。如果只有前两项变了,你的变更并没有做完。

相关文章