哪些 SNMP 表能把 VPNv4 路由与其标签关联起来
选出你需要的标签,再把 VRF 路由条目关联到交叉连接及其各个段。开始遍历之前,先确认代理实现了这些对象。
一条 VPNv4 路由会带着三个不同的标签,而 SNMP 遍历只能看到代理实现了的那些。收到的 BGP 属性、本地分配的入向服务标签和出向转发标签,分处不同的表、位于不同的索引之下。不先确定问的是三者中的哪一个就向设备索取标签,正是采集项目在第一个机箱上就卡住的原因。
先选出任务需要的那一个,再沿着通到它的索引链往下走。如果链路断在代理未实现的对象上,那是应当记录的发现,而不是要用编造的 OID 去填的缺口。
确定任务需要三者中的哪个标签
从对等体收到的标签以 BGP 路径属性的形式到达,它描述的是该对等体期望你朝它推送什么。入向服务标签由本设备为某个 VRF 前缀分配,标记进入 LSP 的流量。出向顶层标签是转发面真正朝下一跳推送的值,下一跳一变它就跟着变。
只有第二个和第三个属于被轮询设备上的转发状态。第一个是对邻居期望的陈述,与这台机箱无关。
标准 L3VPN MIB 对 VRF 路由及其与交叉连接的关联建模,足以走到本地服务标签和转发标签。它并不承诺把 BGP 会话收到的每个属性都倒出来。读表要看它实际装了什么,而不是看问题暗示了什么。建立在错误假设上的采集器会报出零值,并把这些零值当成缺失数据归档。
| What you want | Where it lives | What a walk can return |
|---|---|---|
| Label advertised by a peer | BGP session state for that VRF | Usually outside the standard L3VPN MIB |
| Incoming service label for a prefix | VRF route entry joined to an incoming segment | Available when both tables are implemented |
| Label pushed toward the next hop | Outgoing segment with a push condition | Available, but only meaningful while a top label is pushed |
把 VRF 路由条目与它的交叉连接关联起来
RFC 4382 定义了 mplsL3VpnVrfRteTable。把它的索引读成六段:VRF 名、目的地址类型、前缀本身、策略值、下一跳类型和下一跳地址。IGP 与 BGP 条目共用这张表,所以要在前缀旁记录路由协议。两行可以携带同一个前缀而只在下一跳上不同,选错行就会把关联导向另一个交叉连接。
列 mplsL3VpnVrfRteXCPointer 携带的是交叉连接索引而不是整行 OID,尽管名字看起来相反。单字节的零值表示没有关联的标签栈,这是在绑定稳定之前、或者对一条从不需要标签的路由会看到的情况。
遍历前先把列名翻译出来,输出里的数字子树才不会含糊。下面两条命令用不同记法指向同一个节点。
snmptranslate -m +MPLS-L3VPN-STD-MIB -On mplsL3VpnVrfRteXCPointer snmpwalk -v2c -c monitor 192.0.2.10 mplsL3VpnVrfRteXCPointer
把返回的索引带进交叉连接表,它的条目键是一个三元组:交叉连接索引、入向段索引和出向段索引。这个三元组才是把路由变成标签的关联。要针对具体索引遍历交叉连接的子树,而不是整张表,因为带索引的读取能保住关联,批量遍历保不住。
读索引,而不是读标签号
段索引标识一行,而标签是那一行里的值,所以拿一个替另一个会得到一个看似合理的答案,却指向错误的 LSP。入向一侧要把接口和标签上下文与 mplsInSegmentLabel 一起看,并记住当这一行指向别处的条目时,该对象也可能携带指向标签表的指针。
出向一侧要在读 mplsOutSegmentTopLabel 之前,检查出向接口以及这一行是否声明会推送顶层标签。在什么都不推送的行上,填好的顶层标签列是过期值或上一条路径的残留,不是当前的转发状态。更深的栈需要被引用的标签栈表,多这一跳是正常的,不是缺陷。
特殊的零值约定适用于在本路由器上起始或终止的路径。把零索引当成有文档说明的行为,而不是空结果,并对照本地转发状态加以确认。
扩容之前先确认代理实现了什么
要针对确切的平台和版本、所用的地址族以及子树上的任何运维限制,核验已实现的对象。用只读且限定在这些子树上的凭据去轮询,并接受缺对象可能意味着功能未实现,而不是 MIB 写错了。
在把采集器指向整张表之前,先用一条已知的 VRF 路由去核对设备自己的运维输出。每个样本都要带上每个索引分量和采集时间,因为路由与绑定会在两次遍历之间移动。用相隔几分钟的两次遍历缝出来的快照,可能把旧的交叉连接索引和新的路由混在一起,看起来却完全一致。
如果收到的 BGP 视图或厂商专有的标签对象确实缺失,就转用平台有文档说明的遥测或运维接口。标准关联覆盖的是本地转发标签,别的很少,所以应把它当作采集设计的第一步,而不是成品。