菜鸟科技网

vrf命令如何配置与使用?

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

vrf命令如何配置与使用?-图1
(图片来源网络,侵删)

VRF 的核心概念

在理解命令之前,先要明白 VRF 的几个关键组件:

  1. VRF 定义:创建一个虚拟路由表,并给它一个名字(如 RED, BLUE, CUSTOMER-A)。
  2. 路由转发表:每个 VRF 都有自己的 FIB,存储着该虚拟网络的路由信息。
  3. 接口分配:将物理接口(如 GigabitEthernet0/0)或子接口划入一个 VRF,一旦分配,该接口的所有流量都将使用该 VRF 的路由表进行转发。
  4. 路由协议实例:为了在 VRF 内部学习路由,路由协议(如 BGP, OSPF)需要为每个 VRF 创建独立的实例。
  5. 全局路由表:设备默认存在的路由表,用于管理流量(如 SSH, Telnet)和未分配给任何 VRF 的接口流量。

VRF 命令详解 (以 Cisco IOS 为例)

下面我们按照配置流程来分解具体的命令。

创建 VRF

你需要定义一个 VRF。

Router(config)# ip vrf VRF_NAME
  • VRF_NAME:是你给这个虚拟路由表起的名字,Mgmt, Customer1,这个名字在整个配置中会反复使用。

示例: 创建一个名为 Mgmt 的 VRF,用于隔离管理流量。

vrf命令如何配置与使用?-图2
(图片来源网络,侵删)
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_AVRF_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。
  • Arista: 命令与 Cisco 类似,但更简洁。
    • 定义 VRF: vrf definition VRF_NAME
    • 分配接口: interface INTERFACE_NAME; vrf VRF_NAME;

VRF 是实现网络虚拟化和多租户隔离的核心技术,配置 VRF 的核心流程可以概括为:

  1. 定义ip vrf <name>
  2. 分配interface <x/x>; ip vrf forwarding <name>
  3. 配置:在接口和 VRF 内部配置 IP 和路由协议。
  4. 验证:使用 show ip route vrf <name> 等命令进行检查。

熟练掌握 VRF 命令对于网络工程师来说是一项非常重要的技能,尤其在数据中心、服务提供商和企业网络的多租户环境中应用广泛。

分享:
扫描分享到社交APP
上一篇
下一篇