VRF 里消失的路由:本地、VPNv4 还是转发表?
前缀在 VRF 中缺失、在 VPNv4 中缺失、在 CEF 中未安装,是三种不同的故障。请按顺序读表,再动路由目标。
客户说改完路由目标后前缀不见了,而他们发来的第一张截图往往看错了表。三张不同的表回答三个不同的问题:前缀在 VRF 内是否存在,是否作为 VPNv4 路由被通告和导入,以及是否真的装进了转发表项。顺序一换,结论就会自信而错误。本手册按顺序让一个本地前缀和一个远端前缀走完这三张表,最后给出针对引发问题的 RT 改动的回滚方案。
先给前缀和它该在的表命名
动手之前先写下两个前缀。一个属于客户站点本地,从直连接口或 CE 通告学到。另一个是远端前缀,应当经由运营商骨干网到达。它们走不同路径进入同一个 VRF,一个出问题并不能说明另一个。
| Table | Question it answers | Command |
|---|---|---|
show ip vrf CUST-A | Which RTs are attached for import and export | Read the RT lists before anything else |
show ip route vrf CUST-A | Is the prefix present in this VRF at all | Local and imported routes both appear |
show ip bgp vpnv4 all | Was the NLRI advertised and retained | Keyed by route distinguisher |
show ip cef vrf CUST-A | Was a forwarding entry installed | Proves 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-ACEF 表项带有已解析的邻接和出标签,说明数据面应该能通,剩下的症状属于应用或 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 的,才是下一个人可以对照的证据。如果只有前两项变了,你的变更并没有做完。