VLAN 10 应使用 VPN,VLAN 20 应使用 WAN,因此第一个测试是从路由器发出的、以 VLAN 10 接口地址为源的 Ping。它成功了,route-map 计数器增加,于是所有人都断定设计有效。其实无效。那个 Ping 是本地生成的,而本地生成的流量所到达的策略挂接点,与从 VLAN 接口进入的报文并不相同。

三个条件决定你实际在测哪条策略:报文在哪里生成、从哪里进入,以及匹配什么。

报文从哪里进入,决定哪条策略生效

用 ip policy route-map 挂接的接口 route-map 适用于进入该接口的报文,正如 IOS XE PBR 指南 所述。VLAN 10 中的主机发出请求,帧到达 VLAN 子接口,路由器在那里评估策略。路由器自己的报文永远不会到达该接口,因为它诞生于路由器内部。

选择 VLAN 地址作为源只改变报文头。它不改变来源。

为什么带源地址的 Ping 仍不是主机

源地址对 ACL 匹配很重要,也正是这一点让该测试如此有说服力。报文匹配了源条件,计数器增加,输出看起来正确。但该测试无法显示入口接口、到达上下文,也无法显示主机报文是否会走同一分支。

只复现匹配、不复现上下文的测试,只能证明设计的一半;而设计恰恰常常带着错误策略上线,靠的就是这半份证明。

何时本地策略才是正确答案

Cisco 记录了 ip local policy route-map,用于路由器自身生成的流量。这是另一个适用范围,当需求确实针对路由器自身流量时,它才是正确工具。它并不是每个 VLAN 引流设计都缺少的一步。那里的宽泛匹配还可能影响管理与辅助连接,这比看上去的变化大得多。

本地生成的 TCP 还有一个额外前提:即使策略选择了另一条路径,它也必须在路由表中存在可用的目的条目。ICMP 的结果不能证明 TCP 的行为相同。

改在主机上测试什么

从 VLAN 10 中一台获授权的主机发起测试,使用它真实的源地址、目的地址、协议和端口。把入口接口和 route-map 匹配情况与结果一并记录,让证据指明实际运行的是哪条策略。然后对 VLAN 20 的主机重复一次,确认它走另一条路径。

两条路径都需要可用的下一跳、回程可达性,以及适用时的 VPN 覆盖。PBR 只是选择转发决定;它不会创建远端服务,也不会授予应用权限。

结果能证明什么,不能证明什么

成功的主机流量证明策略匹配了,且所选路径在当时可用。它不能证明路由器自身流量被引流,也不能证明应用已获授权,因为这是不同的问题、需要不同的证据。

把 Ping 留在记录里,作为关于本地报文的证据。然后去取得主机流量的证据,而不是不断扩大策略范围,直到两个测试碰巧看起来一样。

相关文章