4. VRF与多租户路由隔离

在多租户网络中,不同租户往往使用相同的私有地址空间,例如都使用 10.0.0.0/24。如果所有租户的路由都进入同一张全局路由表,地址冲突将导致转发不可控。VRF(Virtual Routing and Forwarding,虚拟路由转发)通过在设备内部创建多个相互独立的路由转发表,使每个租户拥有自己的路由、接口和转发表项,从而实现真正的路由隔离。本节围绕 VRF 的创建、接口绑定、路由表隔离、RD/RT 属性以及 VRF 间路由泄漏展开。

一、VRF 的本质与基本配置

VRF 可以理解为一台物理设备内部被切分出的多台“逻辑路由器”。每个 VRF 拥有独立的路由表(RIB)和转发表(FIB),接口、路由协议实例、静态路由都归属于某个 VRF。Comware 中创建 VRF 并绑定接口的基本过程如下:

# 创建两个租户 VRF
ip vpn-instance Tenant_A
 description To_Tenant_A
ip vpn-instance Tenant_B
 description To_Tenant_B

# 将接口绑定到对应 VRF
interface GigabitEthernet1/0/1
 port link-mode route
 ip binding vpn-instance Tenant_A
 ip address 10.0.0.1 24

interface GigabitEthernet1/0/2
 port link-mode route
 ip binding vpn-instance Tenant_B
 ip address 10.0.0.1 24

# 查看 VRF 路由表
display ip routing-table vpn-instance Tenant_A
display ip routing-table vpn-instance Tenant_B

注意两个接口可以配置完全相同的 IP 地址 10.0.0.1/24,因为它们分属不同 VRF,路由表彼此独立。绑定 VRF 后,接口的 IP 地址、路由协议、ACL 关联等都需要在对应 VRF 视图下配置,例如 ping -vpn-instance Tenant_A 10.0.0.2。若接口未绑定 VRF,则属于全局路由表,与各租户隔离。

二、路由表隔离的验证与常见误区

路由表隔离是 VRF 的核心价值。验证时不能只看接口状态,而应查看各 VRF 的路由表内容。例如 Tenant_A 学习到 10.0.0.0/24 的直连路由,Tenant_B 也学习到同样的前缀,但两者互不可见。常见误区包括:接口绑定 VRF 后仍使用全局地址配置命令、路由协议进程未指定 VRF、静态路由未加 vpn-instance 参数。这些都会导致路由进入错误的路由表,使隔离失效。

判断隔离是否生效的实用方法:在 Tenant_A 内 ping Tenant_B 的地址,若返回“Request timeout”且路由表中无对应条目,说明隔离正常;若意外可达,应检查是否存在 VRF 间泄漏配置或接口未正确绑定。

三、RD 与 RT:让 VRF 路由可被区分和传递

当 VRF 路由需要通过 MP-BGP 在设备之间传递时,仅靠本地路由表隔离不够,还需要 RD(Route Distinguisher,路由区分符)和 RT(Route Target,路由目标)。RD 的作用是给不同 VRF 的相同前缀加上唯一标识,形成 VPNv4 前缀,例如 10.0.0.0/24 在 Tenant_A 中变为 65000:1:10.0.0.0/24,在 Tenant_B 中变为 65000:2:10.0.0.0/24,从而在 BGP 中不冲突。RT 则控制路由的导入与导出:导出 RT 决定本 VRF 路由携带什么标记发布出去,导入 RT 决定接收哪些标记的路由进入本 VRF。

ip vpn-instance Tenant_A
 route-distinguisher 65000:1
 vpn-target 65000:100 export-extcommunity
 vpn-target 65000:100 import-extcommunity

ip vpn-instance Tenant_B
 route-distinguisher 65000:2
 vpn-target 65000:200 export-extcommunity
 vpn-target 65000:200 import-extcommunity

RD 只用于区分前缀,不决定路由去向;RT 才决定路由进入哪个 VRF。二者常被混淆,实际排障时应先确认 RD 是否唯一,再检查 RT 的导入导出匹配关系。

VRF 路由隔离与 RD/RT 传递关系 PE 设备 MP-BGP VPNv4 邻居 VRF Tenant_A RD: 65000:1 Export RT: 65000:100 Import RT: 65000:100 10.0.0.0/24 → 65000:1:10.0.0.0/24 VRF Tenant_B RD: 65000:2 Export RT: 65000:200 Import RT: 65000:200 10.0.0.0/24 → 65000:2:10.0.0.0/24 远端 PE 按 RT 匹配导入对应 VRF VPNv4 路由 路由表隔离 Tenant_A 与 Tenant_B 路由互不可见 相同前缀可共存,不冲突 VRF 间泄漏 Import RT 匹配对方 Export RT 即可选择性引入对方路由

四、VRF 间路由泄漏与多租户路由控制

完全隔离并不总是目标。某些场景下,租户之间需要有限互通,例如共享服务区、公共网关或审计服务器。此时可通过 RT 的交叉导入实现 VRF 间路由泄漏。典型做法是:Tenant_A 导出 RT 65000:100,Tenant_B 导入 RT 65000:100,则 Tenant_B 可获得 Tenant_A 的路由;反之亦然。若只希望单向泄漏,则只配置一个方向的导入。

# 让 Tenant_B 能访问 Tenant_A 的共享服务路由
ip vpn-instance Tenant_B
 vpn-target 65000:100 import-extcommunity

# 若需双向互通,再为 Tenant_A 导入 Tenant_B 的 RT
ip vpn-instance Tenant_A
 vpn-target 65000:200 import-extcommunity

路由泄漏必须谨慎控制范围。若直接导入对方全部路由,可能造成地址冲突或非预期可达。更精细的做法是结合路由策略(route-policy)对导入路由进行过滤,只放行特定前缀,例如仅允许 10.0.10.0/24 进入。多租户路由控制的核心思路可以归纳为:用 VRF 实现默认隔离,用 RD 保证前缀唯一,用 RT 控制路由传播方向,用路由策略收敛泄漏范围。

五、配置检查与结果判断

完成配置后,建议按以下顺序检查:第一,确认接口已绑定正确 VRF,且地址配置在 VRF 视图下;第二,查看各 VRF 路由表,确认本端直连和远端路由均已正确生成;第三,检查 BGP VPNv4 邻居状态及路由的 RD、RT 属性;第四,在目标 VRF 内执行 ping 或 tracert 验证转发路径。若路由未出现,优先排查 RT 导入导出是否匹配、路由策略是否误过滤、接口是否遗漏绑定。通过这套检查,可以快速定位绝大多数 VRF 隔离与泄漏问题。

关键结论:VRF 提供路由表级隔离,RD 解决前缀冲突,RT 决定路由归属与泄漏方向。多租户路由控制不是“全通”或“全断”,而是通过 RT 与路由策略实现按需、可控的互通。