VRF 是一种在路由器或交换机上创建多个虚拟路由表的技术,每个 VRF 都有一套独立的路由转发表、路由协议实例和路由接口,这使得同一台物理设备可以隔离和管理多个独立的网络,就像拥有多台独立的路由器一样。

VRF 的核心概念
在理解命令之前,先要明白 VRF 的几个关键组件:
- VRF 定义:创建一个虚拟路由表,并给它一个名字(如
RED,BLUE,CUSTOMER-A)。 - 路由转发表:每个 VRF 都有自己的 FIB,存储着该虚拟网络的路由信息。
- 接口分配:将物理接口(如 GigabitEthernet0/0)或子接口划入一个 VRF,一旦分配,该接口的所有流量都将使用该 VRF 的路由表进行转发。
- 路由协议实例:为了在 VRF 内部学习路由,路由协议(如 BGP, OSPF)需要为每个 VRF 创建独立的实例。
- 全局路由表:设备默认存在的路由表,用于管理流量(如 SSH, Telnet)和未分配给任何 VRF 的接口流量。
VRF 命令详解 (以 Cisco IOS 为例)
下面我们按照配置流程来分解具体的命令。
创建 VRF
你需要定义一个 VRF。
Router(config)# ip vrf VRF_NAME
VRF_NAME:是你给这个虚拟路由表起的名字,Mgmt,Customer1,这个名字在整个配置中会反复使用。
示例:
创建一个名为 Mgmt 的 VRF,用于隔离管理流量。

Router(config)# ip vrf Mgmt
将接口分配给 VRF
创建 VRF 后,需要将接口划入其中。
Router(config)# interface INTERFACE_ID Router(config-if)# ip vrf forwarding VRF_NAME
INTERFACE_ID:物理接口名,如GigabitEthernet0/1。VRF_NAME:你之前创建的 VRF 名称。
示例:
将 GigabitEthernet0/1 接口划入 Mgmt VRF。
Router(config)# interface GigabitEthernet0/1 Router(config-if)# ip vrf forwarding Mgmt
注意:执行此命令后,接口原有的 IP 地址会丢失,你需要重新配置。
在 VRF 中配置 IP 地址
接口划入 VRF 后,为其配置 IP 地址,这个地址现在只存在于该 VRF 的路由表中。
Router(config-if)# ip address IP_ADDRESS SUBNET_MASK
示例:
为 GigabitEthernet0/1 配置管理 IP 地址。
Router(config-if)# ip address 192.168.100.1 255.255.255.0
在 VRF 中启用路由协议
为了让 VRF 中的路由器能学习到其他路由,你需要为 VRF 配置路由协议。
A. 配置 BGP
Router(config)# router bgp AS_NUMBER Router(config-router)# address-family ipv4 vrf VRF_NAME ! 进入 VRF 的 BGP 地址族 Router(config-router-af)# neighbor PEER_IP remote-as PEER_AS ! 定义 BGP 邻居 Router(config-router-af)# network NETWORK_MASK vrf VRF_NAME ! 宣告本 VRF 内的网络
示例:
在 Customer1 VRF 中配置 BGP。
Router(config)# router bgp 65001 Router(config-router)# address-family ipv4 vrf Customer1 Router(config-router-af)# neighbor 10.1.1.2 remote-as 65002 Router(config-router-af)# network 172.16.0.0 255.255.0.0 vrf Customer1
B. 配置 OSPF
Router(config)# router ospf PROCESS_ID Router(config-router)# address-family ipv4 vrf VRF_NAME ! 进入 VRF 的 OSPF 地址族 Router(config-router-af)# redistribute connected subnets ! (可选) 重分布直连路由 Router(config-router-af)# network NETWORK_AREA area AREA_ID ! 宣告网络到 OSPF 区域
示例:
在 Customer1 VRF 中配置 OSPF。
Router(config)# router ospf 1 Router(config-router)# address-family ipv4 vrf Customer1 Router(config-router-af)# network 172.16.1.0 0.0.0.255 area 0
VRF 间的路由 leaking(路由泄露)
默认情况下,不同的 VRF 之间是完全隔离的,无法相互通信,如果需要 VRF 之间进行通信,必须手动配置路由泄露,常用的方法有:
- 使用路由映射 和 route-target:这是 BGP/MPLS VPN 环境下的标准方法。
- 使用静态路由:简单直接,适用于小型网络。
示例:使用静态路由进行路由泄露
假设有两个 VRF:VRF_A 和 VRF_B。
VRF_A中有一台服务器1.1.0/24。VRF_B中有一台客户端168.1.0/24。- 我们希望
VRF_B的客户端能访问VRF_A的服务器。
在 VRF_B 的路由器上,配置一条指向 VRF_A 的静态路由,并指定下一跳是连接 VRF_A 的接口或对端地址。
! 在 VRF_B 的配置模式下 Router(config)# ip route 10.1.1.0 255.255.255.0 192.168.2.1 vrf VRF_A
这条命令的意思是:要去往 1.1.0/24 网段,下一跳是 168.2.1,并且这条路由应该注入到 VRF_A 的路由表中。
注意:路由泄露需要双向配置才能实现双向通信。
VRF 的验证和排错命令
配置完成后,需要使用以下命令来检查和排错。
查看 VRF 定义
Router# show ip vrf
这个命令会列出所有已定义的 VRF,以及它们包含的接口数量和路由数量。
示例输出:
Name Default Interface
VRF_A none Gi0/0
VRF_B none Gi0/1
Mgmt none Gi0/2
查看 VRF 的路由表
Router# show ip route vrf VRF_NAME
这是最常用的命令,用于查看特定 VRF 的路由表,确认路由是否已正确学习和注入。
示例输出 (查看 VRF_A 的路由):
VRF_A routing table
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override
Gateway of last resort is not set
10.0.0.0/24 is subnetted, 1 subnets
C 10.1.1.0 is directly connected, GigabitEthernet0/0
S* 0.0.0.0/0 is directly connected, GigabitEthernet0/0
查看 VRF 的接口信息
Router# show ip interface brief vrf VRF_NAME
查看特定 VRF 下所有接口的状态和 IP 地址。
调试 BGP 在 VRF 中的状态
Router# debug ip bgp vpnv4 unicast vrf VRF_NAME
用于调试 BGP 在特定 VRF 中的邻居关系、路由更新等。
不同厂商的命令差异
- Cisco IOS/NX-OS: 命令基本如上所述。
- Juniper: 命令语法不同。
- 定义 VRF:
routing-instances VRF_NAME { instance-type vrf; ... } - 分配接口: 在
routing-instances配置块内,使用interface INTERFACE_NAME;。 - 配置协议: 同样在
routing-instances块内配置 BGP 或 OSPF。
- 定义 VRF:
- Arista: 命令与 Cisco 类似,但更简洁。
- 定义 VRF:
vrf definition VRF_NAME - 分配接口:
interface INTERFACE_NAME; vrf VRF_NAME;
- 定义 VRF:
VRF 是实现网络虚拟化和多租户隔离的核心技术,配置 VRF 的核心流程可以概括为:
- 定义:
ip vrf <name> - 分配:
interface <x/x>; ip vrf forwarding <name> - 配置:在接口和 VRF 内部配置 IP 和路由协议。
- 验证:使用
show ip route vrf <name>等命令进行检查。
熟练掌握 VRF 命令对于网络工程师来说是一项非常重要的技能,尤其在数据中心、服务提供商和企业网络的多租户环境中应用广泛。
