华为H3C实战 | 第17章 VRF 与网络虚拟化
📚 本系列共 48 篇(第 17 / 48 篇) · 第二卷 路由与广域网篇 —— 让数据找到路
← 上一篇:第 16 章 IPv6 基础配置与地址自动配置 下一篇:第 18 章 ACL 与路由策略 →
本章导读:一台物理设备能不能同时服务两家客户、而这两家客户的地址段完全一样?能不能让办公网和生产线用同一个
192.168.1.0/24还不打架?这正是 VRF(虚拟路由转发)要解决的问题。本章从"一台设备虚拟成多台"讲起,重点是两个最容易被误解的概念——RD 只是区分、RT 才决定互通,以及一个最容易被忽略的操作陷阱——绑定 VRF 会清空接口上的 IP 地址。学过本章,你能独立设计并配好一套多租户或业务隔离的组网。
17.1 功能原理与业务场景
17.1.1 这功能是干嘛的(通俗版)
一栋写字楼里租了两家公司:A 公司在 3 楼,B 公司在 5 楼,两家都有"总经理"这个职位。如果整栋楼只有一个收发室、一套通讯录,那"总经理"就重名了——邮件不知道该送给谁。
解决办法是:收发室还是那一个,但给每家公司配一套独立的信箱和通讯录。A 公司的通讯录里"总经理"是张三,B 公司的通讯录里"总经理"是李四,两套通讯录互不相干,永远不会串。
VRF(Virtual Routing and Forwarding,虚拟路由转发)做的就是这件事。它把一台物理设备虚拟成多台互相独立的逻辑路由器,每台逻辑路由器有自己的一套:
| 资源 | 公网(全局)一份 | 每个 VRF 各一份 |
|---|---|---|
| 路由表 | ✅ | ✅ 独立 |
| ARP 表 | ✅ | ✅ 独立 |
| 接口归属 | ✅ | ✅ 独立(接口绑定到某个 VRF) |
| 路由协议进程 | ✅ | ✅ 独立实例 |
| 转发表(FIB) | ✅ | ✅ 独立 |
这意味着:两家公司的网络地址可以完全相同,因为它们在设备的"大脑"里是两套完全独立的表,谁都看不到对方的。
17.1.2 VRF 与 VLAN 的区别(最重要的一张表)
这是初学者第一道坎——很多人觉得"我已经用 VLAN 隔离了,为什么还要 VRF?"
| 对比项 | VLAN | VRF |
|---|---|---|
| 隔离的是哪一层 | 二层(广播域) | 三层(路由表) |
| 用来做什么 | 把大广播域切成小的,控制广播风暴、做接入隔离 | 把一台路由器的转发表切成多套,做业务/租户隔离 |
| 同名网段能否共存 | 不能。同一个 VLAN 只有一个子网;两个 VLAN 用同一网段,三层网关会冲突 | 能。两个 VRF 里都可以有 192.168.1.0/24,各走各的路由表 |
| 需要几个网关 | 每个 VLAN 一个网关(VLANIF) | 每个 VRF 里独立配网关,多个 VRF 可以有同名网段的网关 |
| 典型配置 | vlan 10 + port default vlan 10 |
ip vpn-instance X + ip binding vpn-instance X |
| 设备视角 | 一台设备,一张路由表 | 一台设备,多张路由表 |
一句话记住区别:
VLAN 是"隔开广播域",VRF 是"隔开路由表"。VLAN 解决"谁能收到谁的二层广播",VRF 解决"两个网段重名怎么共存"。
举个最能说明问题的例子:某公司要上线一套测试环境,测试环境的服务器 IP 和现网完全一样(10.0.0.0/8),因为开发人员图省事直接克隆了虚拟机。如果用 VLAN,你把测试环境放进 VLAN 100——但它的网关 10.0.0.1 和现网网关 10.0.0.1 在同一台核心上根本配不了两条(同一个地址不能配两次)。用 VRF,两个 10.0.0.0/8 各在一个 VRF 里,两套网关都叫 10.0.0.1,和平共存。
17.1.3 典型应用场景
| 场景 | 需求 | VRF 怎么用 |
|---|---|---|
| 多租户(MSP/园区分租) | 不同客户地址段可能重叠,必须彻底隔离 | 每个租户一个 VRF,接口绑定各自的 VRF |
| 业务隔离 | 办公网、生产线、监控网互不打扰 | 按业务建 VRF,各自跑独立路由 |
| 测试/演练环境 | 测试环境地址与生产完全相同 | 测试环境单独一个 VRF |
| 管理面与业务面分离 | 带外管理网不参与业务路由 | 管理网一个 VRF,业务网走公网 |
| 与运营商对接 | 企业 CE 接入运营商 PE,多个 VPN 共享一条链路 | 子接口分别绑定 VRF,与 PE 的 RT 对接 |
| MCE(多 VPN 实例 CE) | 一台 CE 设备承载多个 VPN 接入 PE | 靠 VRF + 静态路由/BGP 与 PE 交换路由 |
VRF 与 MCE 的关系:MCE(Multi-VPN-Instance CE,多实例 CE)不是一个独立技术,它就是"在 CE 设备上启用 VRF“这个用法的名字。理解了 VRF,MCE 就自然懂了。
适用版本:华为 VRP V200R019 及以上(S5700/AR6000 系列);H3C Comware V7(R2610 及以上)。
17.2 核心概念:RD、RT 与 VPN 实例
17.2.1 VPN 实例(VRF 在设备上的名字)
在华为和 H3C 上,VRF 的落地形式叫 VPN 实例(VPN instance)。“VRF"是协议概念,“VPN 实例"是设备上的配置对象,两者基本可以当同义词。
一个 VPN 实例包含三样东西:
- RD(Route Distinguisher,路由标识) —— 必须有
- RT(Route Target,路由目标) —— 必须有(跨设备交换路由时)
- 绑定的接口 —— 后续用
ip binding vpn-instance挂上去
17.2.2 RD:只是"区分”,不影响转发
RD 的作用是给每条路由打一个"身份证号前缀”,让不同 VRF 里的同一条路由能够被区分开。
举例:A 租户的 VRF 里有 192.168.1.0/24,B 租户的 VRF 里也有 192.168.1.0/24。当这两条路由要被同一台设备(或通过 MP-BGP 传播到对端设备)时,设备怎么知道哪条是哪条?靠 RD:
| 路由 | RD | 加上 RD 后的唯一标识 |
|---|---|---|
A 租户的 192.168.1.0/24 |
100:1 |
100:1:192.168.1.0/24 |
B 租户的 192.168.1.0/24 |
100:2 |
100:2:192.168.1.0/24 |
这样就区分开了。
RD 的三种格式(华为官方命令参考原文):
| 格式 | 说明 | 例子 |
|---|---|---|
| 2 字节自治系统号 : 4 字节用户自定义数 | AS 号 0 |
101:3 |
| 整数形式 4 字节 AS 号 : 2 字节自定义数 | AS 号 65536 |
65537:3 |
| 点分形式 4 字节 AS 号 : 2 字节自定义数 | AS 号写成 x.y,x/y 取值 0~65535 |
0.1:0 |
| IPv4 地址 : 2 字节自定义数 | IP 地址 + 自定义数 | 192.168.122.15:1 |
两个硬规矩:自治系统号和用户自定义数不能同时为 0(0:0 非法)。
最关键的一句:
RD 不影响转发,它只影响"这条路由叫什么名字”。
RD 是本地唯一的标识符,它的作用仅限于"让两条同名路由不打架"。它完全不管"谁能学到我、我能学到谁"——那件事归 RT 管。
17.2.3 RT:才决定"谁能和谁互通"
RT 是路由的"通行证"。它的工作方式是两个方向:
| 方向 | 含义 | 类比 |
|---|---|---|
| export(出方向) | 我发出的路由,打上这个 RT 标签 | 出门时贴的门禁标签 |
| import(入方向) | 我接收的路由,必须有这个 RT 标签 | 进门时要检查的通行证 |
互通的条件是:A 的 export RT = B 的 import RT(或者至少有一个交集)。
举例:要打通 VRF-A 和 VRF-B 两个租户的路由(比如两个租户要共享一台公共打印机服务器):
VRF-A 的配置:vpn-target 100:1 export-extcommunity ← A 发出的路由打上 100:1
vpn-target 100:1 import-extcommunity ← A 只想收带 100:1 的路由
VRF-B 的配置:vpn-target 100:1 both ← B 发出和接收都用 100:1
这样 A 发出的路由带着 100:1,B 看到"这个标签我认识(import 里有)",学进来;反之亦然。
如果把 B 的 import 写成 100:2,那么 A 发出的路由带着 100:1,B 一看"这标签我不认识",直接丢掉——两个 VRF 就是不通。而这时候 RD 配得再对也没用。
这就是最大的概念误区:
很多人以为"配了 RD 就配好了 VRF"。错。RD 只解决"路由叫什么",RT 才解决"路由给了谁"。配完 RD 不通,十有八九是 RT 没对上。
17.2.4 公网表与 VRF 表是两套独立系统
一台设备上,“公网路由表"和每个 VRF 的路由表是完全分开的:
┌──────────────────────────────────────┐
│ 一台物理设备 │
├──────────────────────────────────────┤
│ 公网路由表(global) │
│ 192.168.1.0/24 ← 没绑 VRF 的接口 │
├──────────────────────────────────────┤
│ VRF-A 路由表 │
│ 192.168.1.0/24 ← A 租户的接口 │
├──────────────────────────────────────┤
│ VRF-B 路由表 │
│ 192.168.1.0/24 ← B 租户的接口 │
└──────────────────────────────────────┘
后果一:查路由时必须带 vpn-instance 参数。你在设备上敲 display ip routing-table,看到的只有公网表——VRF 里的路由一条都看不到。这是新手最常见的"我明明配了路由怎么查不到”。
后果二:默认路由要在每个 VRF 里分别配。你在公网表里配了 ip route-static 0.0.0.0 0 1.1.1.1,VRF-A 里的用户照样上不了网——它得有自己的默认路由。
后果三:两个 VRF 之间默认完全不通,即使在同一台设备上。要通必须显式做(静态路由指向 / 路由泄漏 / 中间用防火墙),见 17.7。
17.2.5 接口归属:一个接口只能属于一个 VRF
一个三层接口(VLANIF、三层以太口、子接口)同时只能绑定一个 VRF。绑了就不再是"公网接口"。
绑定之后,这个接口:
- 加入该 VRF 的路由表(直连路由出现在 VRF 表里,不在公网表里)
- 只能配该 VRF 内的地址(地址可以和其他 VRF 重复)
- 跑的动态路由协议属于该 VRF 的实例
出处:
- RD 格式与取值:华为命令参考
route-distinguisher(references/huawei/EDOC1100212558.txt第 142591 行起,原文列出 2 字节 AS:4 字节、整数 4 字节 AS:2 字节、点分 4 字节 AS:2 字节、IPv4 地址:2 字节四种格式及各自取值范围)- RT 格式与方向:华为
vpn-target(同文件第 143310 行起,命令格式vpn-target vpn-target &<1-8> [ both | export-extcommunity | import-extcommunity ])- RT 的作用机制:H3C 官方原文「RT 用来控制 VPN 路由的发布。PE 在发布的 VPN 路由中添加 RT 扩展团体属性,该属性的值为配置的 Export Target。对端 PE 接收到 VPN 路由后,将路由中携带的 RT 属性与本地配置的 VPN 实例的 Import Target 进行比较,如果二者中存在相同的值,则将该路由学习到该 VPN 实例的路由表中」(
references/h3c/1203718_mce_cmd.txt第 1189 行起)
17.2.6 一个必须想清楚的问题:VRF 之间到底要不要通
初学者学完 RD/RT 常常直接问"那我怎么让两个 VRF 通?"。先别急着配,先问一句:这个互通是不是真的需要?
默认"不通"是特性,不是缺陷。 VRF 存在的全部意义就是隔离。如果两个租户本来应该互相看不见,那"不通"就是正确结果,你不需要做任何事。
只有下面三种情况才需要考虑打通:
| 需求 | 例子 | 推荐做法 |
|---|---|---|
| 共享公共服务 | 两个租户都要用同一台杀毒/打印/日志服务器 | 把公共服务单独放一个 VRF(如 VRF-SHARED),双方 RT 都能 import 它 |
| 有管控的业务互联 | 办公网要访问生产网的某个系统 | 过防火墙,由防火墙做策略转发 |
| 临时排障/迁移期 | 系统搬迁过渡期两边要通 | 临时静态路由,事后及时清理 |
为什么强烈建议"过防火墙"而不是直接泄漏路由:路由泄漏做出来的互通是三层直通——一旦路由通了,两边的所有主机都能互相访问,没有任何访问控制。如果这是两个客户,等于你把客户 A 和客户 B 的网络直连了,出了安全事故责任在你。而走防火墙,流量要经过安全策略检查,能控到"谁能访问谁的哪个端口"。
一个设计建议:如果确实需要"多租户 + 共享服务",正确的做法是在第一天就规划好 VRF-SHARED,让所有租户的 VRF 都 import 它的 export RT,而不是事后给每个租户单独做点对点的泄漏。前者是加法,后者是乘法——租户一多,点对点泄漏的配置量会爆炸。
17.2.7 VRF 的三层隔离能到什么程度
最后一个概念层面的问题:VRF 到底"隔"得多彻底?
| 隔离对象 | VRF 是否隔离 | 说明 |
|---|---|---|
| 路由表 | ✅ 完全隔离 | 同名网段可共存 |
| ARP 表 | ✅ 完全隔离 | 每个 VRF 有独立 ARP |
| 转发面(FIB) | ✅ 完全隔离 | 各自的转发表 |
| 路由协议实例 | ✅ 隔离 | OSPF/BGP 各自起实例 |
| 二层广播域 | ❌ 不隔离 | 如果需要二层隔离,还得靠 VLAN |
| 物理带宽 | ❌ 不隔离 | 多个 VRF 共享同一台设备的转发能力和上行带宽 |
| 设备故障域 | ❌ 不隔离 | 设备一挂,所有 VRF 一起挂 |
最后三行很重要:VRF 隔离的是"逻辑上的网络",不隔离"物理上的资源和故障"。 一台设备上跑 20 个租户的 VRF,这 20 个租户共享同一块 CPU、同一条上联、同一个电源——设备挂了 20 个一起断。要解决这个,需要的是设备冗余(堆叠/双机),不是 VRF。
所以完整的隔离方案通常是三层叠加:
二层隔离 → VLAN / 端口隔离
三层隔离 → VRF
硬件隔离 → 独立设备 / 双机冗余
只做其中一层,都会留下漏洞。
17.3 华为设备配置详解
17.3.1 命令行基础速览
| 用途 | 华为命令 | 视图 |
|---|---|---|
| 创建 VPN 实例 | ip vpn-instance <名字> |
系统视图 |
| 配 RD | route-distinguisher <RD> |
VPN 实例视图 |
| 配 RT | vpn-target <RT> { both | export-extcommunity | import-extcommunity } |
VPN 实例视图 |
| 接口绑定 | ip binding vpn-instance <名字> |
接口视图 |
| VRF 内静态路由 | ip route-static vpn-instance <名字> <目的> <掩码> <下一跳> |
系统视图 |
| VRF 内 OSPF | ospf <进程号> vpn-instance <名字> router-id <ID> |
系统视图 |
| VRF 内 BGP | bgp <AS号> → ipv4-family vpn-instance <名字> |
BGP 视图 |
| 查 VRF 列表 | display ip vpn-instance |
任意视图 |
| 查 VRF 路由表 | display ip routing-table vpn-instance <名字> |
任意视图 |
| 查 VRF ARP | display arp vpn-instance <名字> |
任意视图 |
17.3.2 完整配置模板:多租户组网(本章核心案例)
场景:一台核心交换机(S5735-L24T4S-A1)给两个部门做网关。两个部门用了完全相同的地址段 192.168.1.0/24(比如都是从同一个模板克隆的环境)。这正是在一张路由表里绝对做不到、而 VRF 天生能做的事。
[ 一台核心交换机 ]
Vlanif10 → 绑定 VRF-DEPT_A
Vlanif20 → 绑定 VRF-DEPT_B
Vlanif30 → 公网/上行(不绑 VRF)
|
+-----------------+------------------+
| |
VLAN 10(A 部门) VLAN 20(B 部门)
IP: 192.168.1.1/24 IP: 192.168.1.1/24 ← 完全相同的网段!
绑定 VRF-DEPT_A 绑定 VRF-DEPT_B
| |
PC-A: 192.168.1.10 PC-B: 192.168.1.10 ← 连 IP 都一样
网关: 192.168.1.1 网关: 192.168.1.1
完整配置:
# 进入系统视图
system-view
sysname HUAWEI
# ===== 第一部分:创建两个 VPN 实例 =====
# A 部门的 VRF
ip vpn-instance VRF-DEPT_A
# RD:用于区分同名路由,写成本地唯一的即可
route-distinguisher 100:1
# RT:both 表示收发都用这个标签
vpn-target 100:1 both
quit
# B 部门的 VRF
ip vpn-instance VRF-DEPT_B
route-distinguisher 100:2
# 注意:B 用 100:2,与 A 的 100:1 不同 → 两个 VRF 默认不互通
vpn-target 100:2 both
quit
# ===== 第二部分:创建 VLAN 和接口 =====
vlan batch 10 20 30
# ---- A 部门网关 ----
interface Vlanif 10
# 关键顺序:先绑定 VRF,再配 IP
ip binding vpn-instance VRF-DEPT_A
# 绑定后配的 IP 属于 VRF-A,公网表里看不到
ip address 192.168.1.1 255.255.255.0
quit
# ---- B 部门网关 ----
interface Vlanif 20
ip binding vpn-instance VRF-DEPT_B
# 和 A 完全相同的网段,完全相同的网关地址,互不冲突
ip address 192.168.1.1 255.255.255.0
quit
# ---- 上行接口(公网,不绑 VRF)----
interface Vlanif 30
ip address 10.200.1.1 255.255.255.252
quit
save
配完之后,三张路由表是这样的:
| 表 | 内容 |
|---|---|
| 公网表 | 只有 10.200.1.0/30(Vlanif30 的直连),没有 192.168.1.0/24 |
| VRF-DEPT_A 表 | 192.168.1.0/24(Vlanif10 直连) |
| VRF-DEPT_B 表 | 192.168.1.0/24(Vlanif20 直连) |
这份配置证明了 VRF 的核心价值:同一个 192.168.1.1 在设备上被配了两次,但因为在不同的路由表里,完全不冲突。
17.3.3 VRF 内的路由:静态、OSPF、BGP
(1)VRF 内静态路由
公网表的静态路由是 ip route-static <目的> <掩码> <下一跳>,VRF 里的要加 vpn-instance 前缀:
# 在公网表里配静态路由(默认路由指向 ISP)
ip route-static 0.0.0.0 0.0.0.0 10.200.1.2
# 在 VRF-DEPT_A 里配静态路由(默认路由指向该 VRF 的出口)
ip route-static vpn-instance VRF-DEPT_A 0.0.0.0 0.0.0.0 10.200.1.2
# 在 VRF-DEPT_B 里配默认路由(注意:单独一条,不能共用)
ip route-static vpn-instance VRF-DEPT_B 0.0.0.0 0.0.0.0 10.200.1.2
这三条命令说明了一个重要事实:同一个下一跳,每个 VRF 都要单独写一条默认路由。你在公网表配的那条,VRF 里的用户一个都用不上。
⚠ 注意下一跳的可达性:VRF 内的静态路由,下一跳必须在该 VRF 的路由表里可达。如果
10.200.1.2是公网接口的邻居地址,VRF-A 的表里根本查不到它,这条路由不会生效。跨 VRF 的下一跳需要特殊处理(见 17.7.5)。
(2)VRF 内 OSPF(多实例)
OSPF 支持按 VRF 起多个实例,命令是 ospf <进程号> vpn-instance <名字>:
# VRF-DEPT_A 里的 OSPF 实例(进程号 10)
ospf 10 vpn-instance VRF-DEPT_A router-id 10.200.1.1
area 0
# 注意:network 声明的是该 VRF 内的地址
network 192.168.1.0 0.0.0.255
quit
quit
# VRF-DEPT_B 里的 OSPF 实例(进程号 20,必须与 A 不同)
ospf 20 vpn-instance VRF-DEPT_B router-id 10.200.2.1
area 0
network 192.168.1.0 0.0.0.255
quit
quit
两个实例的 network 声明完全一样(都是 192.168.1.0/24),但因为分属不同的 VRF,互不干扰。
(3)VRF 内 BGP(BGP VPN 实例)
BGP 的写法是先起全局 BGP 进程,再在一个 ipv4-family vpn-instance 子视图里配:
# 全局 BGP 进程(本 AS 号)
bgp 65001
# 为 VRF-DEPT_A 建立独立的 IPv4 地址族视图
ipv4-family vpn-instance VRF-DEPT_A
# 在这个视图里配邻居、宣告网段,都属于该 VRF
peer 10.200.1.2 as-number 65002
network 192.168.1.0 255.255.255.0
quit
# 为 VRF-DEPT_B 再建一个
ipv4-family vpn-instance VRF-DEPT_B
peer 10.200.2.2 as-number 65002
network 192.168.1.0 255.255.255.0
quit
quit
BGP 与 VRF 是天然搭配:VRF 提供隔离的路由表,BGP(尤其是 MP-BGP)提供跨设备传递带 RD/RT 的 VPN 路由。企业内网如果只是单机多租户,用静态路由或 OSPF 多实例就够了;要跨设备扩展,才需要上 BGP。
17.3.4 逐行讲解
| 命令 | 作用 | 新手常填错的地方 |
|---|---|---|
ip vpn-instance VRF-DEPT_A |
创建 VPN 实例 | 名字区分大小写,最多 31 字符;两台设备上同名实例的 RT 要一致才能互通 |
route-distinguisher 100:1 |
配 RD | 配错 RD 影响不大,配错 RT 才不通;RD 只要本地唯一即可 |
vpn-target 100:1 both |
配 RT | both = 收+发都用;要单向控制就拆成 export/import 两条 |
ip binding vpn-instance X |
接口绑 VRF | 会清空接口已有的 IP 和三层配置(见 17.7.2) |
ip route-static vpn-instance X ... |
VRF 内静态路由 | 下一跳必须在该 VRF 内可达,否则不生效 |
ospf 10 vpn-instance X |
VRF 内 OSPF | 每个 VRF 的进程号要不同 |
ipv4-family vpn-instance X |
BGP 的 VRF 视图 | 在 bgp 视图下配,不是接口下 |
出处:
ip vpn-instance、route-distinguisher、vpn-target、ip binding vpn-instance、ip route-static vpn-instance、ospf <进程号> vpn-instance <名字>、ipv4-family vpn-instance、display ip vpn-instance(487 处)、display ip routing-table vpn-instance(800 处)、display arp vpn-instance(71 处) 均在references/huawei/语料中核实存在。
17.4 H3C 设备配置详解
17.4.1 完整配置模板:同一多租户场景
H3C 的命令和华为高度相似,主要差异在视图进入方式和个别关键字:
# 进入系统视图
system-view
sysname H3C
# ===== 创建两个 VPN 实例 =====
ip vpn-instance VRF-DEPT_A
route-distinguisher 100:1
# H3C 的 vpn-target 不给方向参数时,缺省就是 both
vpn-target 100:1
quit
ip vpn-instance VRF-DEPT_B
route-distinguisher 100:2
vpn-target 100:2
quit
# ===== 创建接口并绑定 =====
vlan 10 20 30
quit
interface Vlan-interface 10
ip binding vpn-instance VRF-DEPT_A
ip address 192.168.1.1 255.255.255.0
quit
interface Vlan-interface 20
ip binding vpn-instance VRF-DEPT_B
ip address 192.168.1.1 255.255.255.0
quit
interface Vlan-interface 30
ip address 10.200.1.1 255.255.255.252
quit
save force
17.4.2 H3C 的四处差异
| 差异点 | 华为(VRP) | H3C(Comware V7) | 抄错的后果 |
|---|---|---|---|
| vpn-target 缺省方向 | 必须显式写方向(both/export-extcommunity/import-extcommunity) |
不写方向 = both(官方原文:「没有指定 both、export-extcommunity 和 import-extcommunity 中的任何一个参数时,缺省值为 both」) | 习惯性照抄华为的 both,在 H3C 上也能跑,但省略写法更简洁 |
| IPv4 VPN 子视图 | 直接 ipv4-family vpn-instance X |
有独立的 address-family ipv4 视图,且 IPv4 VPN 视图下的配置优先级高于 VPN 实例视图(官方原文) |
两处都配了同一参数时,生效的是 IPv4 VPN 视图里的,容易以为配错 |
| VRF 内静态路由 | ip route-static vpn-instance X ... |
本章语料中未查到(见下方 TODO) | 不能照华为猜 |
| VRF 内 OSPF | ospf 10 vpn-instance X router-id ... |
ospf 100 vpn-instance vpna(官方示例,语法一致) |
基本相同 |
关于 H3C 的 address-family ipv4 优先级,这一点值得单独说:H3C 的 VPN 实例视图和 IPv4 VPN 视图两个地方都能配 RT 等参数,如果两处都配了,以 IPv4 VPN 视图为准。这意味着你在 VPN 实例视图里改了 RT 却发现不生效时,要去 IPv4 VPN 视图里看是不是有另一份配置压着它。
17.4.3 H3C 的 VRF 内路由
OSPF 多实例(语料已核实):
# H3C 的 OSPF 多实例写法
ospf 100 vpn-instance VRF-DEPT_A
router-id 10.200.1.1
area 0
network 192.168.1.0 0.0.0.255
quit
quit
静态路由:
⚠ H3C 的 VRF 内静态路由写法,我没查到官方原文,不照华为猜。
已核实的情况:H3C 的
ip route-static命令参考(references/h3c/1219381_30005_0.txt)给出的完整语法是ip route-static dest-address { mask | mask-length } { next-hop-address | interface-type interface-number [ next-hop-address ] } [ preference ] [ tag ] [ permanent ] [ description ],其中没有vpn-instance参数。而华为的写法是前置vpn-instance <名字>。上机时请用
ip route-static ?和ip route-static vpn-instance ?补全确认,或查阅对应版本的《三层技术-IP 路由命令参考》中ip route-static的完整语法。⚠ 待核实:待核实 H3C Comware V7 中为 VPN 实例配置静态路由的确切命令写法(是否支持
ip route-static vpn-instance <名> ...形式,或需在vpn-instance上下文内配置)。本章语料中的ip route-static命令参考未列出 vpn-instance 参数,不可照搬华为写法
BGP(MCE 场景):
# H3C 在 BGP 下为每个 VPN 实例配邻居
bgp 100
address-family ipv4 vpn-instance VRF-DEPT_A
peer 10.200.1.2 as-number 65002
quit
quit
⚠ 待核实:待核实 H3C Comware V7 的 BGP VPN 实例地址族视图准确关键字(华为为
ipv4-family vpn-instance X,H3C 可能为address-family ipv4 vpn-instance X或其他形式),本章语料未取到该视图的官方命令格式
出处:
ip vpn-instance vpn-instance-name、route-distinguisher、vpn-target { ... } [ both | export-extcommunity | import-extcommunity ]及「缺省 both」说明:references/h3c/1203718_mce_cmd.txt(H3C MCE 命令,第 1160~1210 行)ip binding vpn-instance vpn-instance-name、ospf 100 vpn-instance vpna:同上文档address-family ipv4视图与优先级说明:同上,第 1211 行附近(「IPv4 VPN 视图下的配置优先级高于 VPN 实例视图下的配置」)
17.4.4 H3C 的接口绑定与 IP 清除
H3C 的 ip binding vpn-instance 与华为同名同义,行为也一样:绑定会清除接口原有的 IP 地址和三层配置。这一点两家的官方文档都写明了,是 VRF 操作里最需要注意的"静默副作用"。
# 正确顺序:先绑 VRF,再配 IP
interface Vlan-interface 10
# 绑定 VRF(这一步如果是后做的,会把下面的 IP 清掉)
ip binding vpn-instance VRF-DEPT_A
# 绑定之后配的 IP 才属于该 VRF
ip address 192.168.1.1 255.255.255.0
quit
一个实操建议:调整接口 VRF 归属时,先把原来接口上的 IP、ACL 应用、路由协议使能等配置记下来(display current-configuration interface Vlan-interface 10),绑完 VRF 再逐条补回去。因为绑定动作清掉的不只是 IP,还有三层特性和 IP 相关的路由协议配置。
⚠ 待核实:待核实 H3C Comware V7 中
ip binding vpn-instance的确切副作用说明(是否与华为一样明确写「清除接口 IP 地址、三层特性和 IP 相关路由协议」),本章按两家一致的通行行为描述,未取到 H3C 官方原文
17.5 华为 / H3C 命令对照表
| 功能 | 华为(VRP) | H3C(Comware V7) | 差异说明 |
|---|---|---|---|
| 创建 VPN 实例 | ip vpn-instance VRF-A |
ip vpn-instance VRF-A |
相同 |
| 配 RD | route-distinguisher 100:1 |
route-distinguisher 100:1 |
相同 |
| 配 RT | vpn-target 100:1 both |
vpn-target 100:1(缺省 both) |
H3C 可省方向参数 |
| RT 单向 | vpn-target 100:1 export-extcommunity |
vpn-target 100:1 export-extcommunity |
相同 |
| 接口绑定 | ip binding vpn-instance VRF-A |
ip binding vpn-instance VRF-A |
相同(都会清 IP) |
| VRF 内静态路由 | ip route-static vpn-instance VRF-A 0.0.0.0 0 10.0.0.2 |
本章语料未核实,见 TODO | 待核 |
| VRF 内 OSPF | ospf 10 vpn-instance VRF-A router-id 1.1.1.1 |
ospf 100 vpn-instance VRF-A |
基本相同 |
| VRF 内 BGP | bgp 65001 → ipv4-family vpn-instance VRF-A |
bgp 100 → address-family ipv4 vpn-instance VRF-A(待核) |
视图名待核 |
| 查 VRF 列表 | display ip vpn-instance |
display ip vpn-instance |
相同 |
| 查 VRF 路由表 | display ip routing-table vpn-instance VRF-A |
display ip routing-table vpn-instance VRF-A |
相同 |
| 查 VRF ARP | display arp vpn-instance VRF-A |
display arp vpn-instance VRF-A |
相同 |
| 查 VRF 接口 | display ip vpn-instance verbose |
display ip vpn-instance verbose |
相同 |
| 保存 | save |
save force |
H3C 免交互 |
这张表的结论:VRF 的基础配置两家几乎一模一样,这是全书里命令相似度最高的技术之一。真正要注意的是三处:H3C 的 vpn-target 可省方向、H3C 有独立的 address-family ipv4 子视图且优先级更高、以及 H3C 的 VRF 内静态路由写法待核。
17.6 配置验证
验证 VRF 要按"建对没 → 绑对没 → 路由对没 → 通不通“四步走。
第一步:VRF 建对没
<HUAWEI> display ip vpn-instance
期望能看到两个实例,且各自有 RD 和 RT:
VPN-Instance Name and ID : VRF-DEPT_A, 1
Route Distinguisher : 100:1
Interfaces :
Vlanif10
Address family ipv4 :
Import VPN target :
RT : 100:1
Export VPN target :
RT : 100:1
VPN-Instance Name and ID : VRF-DEPT_B, 2
Route Distinguisher : 100:2
Interfaces :
Vlanif20
重点看两行:Route Distinguisher 是否与设计一致、Interfaces 下面是否挂着你期望的接口。如果 Interfaces 是空的,说明 ip binding 没配或配错了。
第二步:接口归没归
# 看接口是否绑定了 VRF
<HUAWEI> display ip vpn-instance verbose
# 或者直接看接口配置
<HUAWEI> display current-configuration interface Vlanif 10
期望看到 ip binding vpn-instance VRF-DEPT_A 和 ip address 192.168.1.1 255.255.255.0 两行都在。如果只有 binding 没有 ip address,就是踩了 17.7.2 那个坑——先绑后配 IP,绑的时候把原来的 IP 清掉了。
第三步:路由在不在(必须带 vpn-instance)
# 查公网表——看不到 192.168.1.0/24
<HUAWEI> display ip routing-table
# 查 VRF-A 的表——能看到
<HUAWEI> display ip routing-table vpn-instance VRF-DEPT_A
# 查 VRF-B 的表——也能看到同一条
<HUAWEI> display ip routing-table vpn-instance VRF-DEPT_B
这一步是 VRF 排错的分水岭。如果 display ip routing-table 里出现了 192.168.1.0/24,说明那个接口没有真正绑定 VRF——它的直连路由跑到公网表里去了。
期望的输出:
VRF-DEPT_A 路由表:
Destination/Mask Proto Pre Cost NextHop Interface
192.168.1.0/24 Direct 0 0 192.168.1.1 Vlanif10
192.168.1.1/32 Direct 0 0 127.0.0.1 Vlanif10
第四步:通不通
# 带 VRF 参数 ping(关键:不带参数会走公网表,一定不通)
<HUAWEI> ping -vpn-instance VRF-DEPT_A 192.168.1.10
# 看 VRF 里的 ARP
<HUAWEI> display arp vpn-instance VRF-DEPT_A
ping 必须带 -vpn-instance 参数。直接 ping 192.168.1.10 会走公网表,公网表里没这个网段,必然不通——很多人在这里误判成"VRF 配错了”。
H3C 侧验证命令基本一致:
<H3C> display ip vpn-instance
<H3C> display ip vpn-instance verbose
<H3C> display ip routing-table vpn-instance VRF-DEPT_A
<H3C> display arp vpn-instance VRF-DEPT_A
⚠ 待核实:待核实 华为
ping -vpn-instance <名>与display ip vpn-instance verbose的确切参数形式与输出字段(本章按常见实现给出,未从语料取到该两条命令的官方输出样例)
17.7 排错与故障树
VRF 的故障集中在五个地方,按下面的故障树查:
问题一:VRF 建了,但路由跑到公网表里去了
├─ 1. 接口绑定了吗?
│ └─ display ip vpn-instance 看 Interfaces 列表是不是空的
├─ 2. 绑的是正确的 VRF 吗?
│ └─ 名字大小写、拼写是否一致
└─ 3. 是不是先配 IP 再绑定,绑定后 IP 被清、直连路由自然没了?
└─ display current-configuration interface 看 ip address 还在不在
问题二:绑了 VRF 之后接口的 IP 没了
└─ 这不是故障,是官方设计行为(见 17.7.2),重新配 IP 即可
问题三:两个 VRF 之间不通
├─ 1. 这是默认行为——VRF 本来就是隔离的,不通是对的
├─ 2. 想通:要么用静态路由跨 VRF 指(需下一跳可达)
│ 要么做路由泄漏(import/export RT 配对)
│ 要么中间串一台防火墙做跨 VRF 转发
└─ 3. 走了 RT 方案还是不通 → 查 RT 是否真匹配(见问题四)
问题四:配了 RD 和 RT,两个 VRF 还是不通
├─ 1. A 的 export RT 与 B 的 import RT 不相等
│ └─ display ip vpn-instance 逐字比对 RT 值
├─ 2. RT 配在了错误的视图(H3C 有两个视图,IPv4 VPN 视图优先级更高)
├─ 3. 中间设备没有正确传递 VPN 路由(需要 MP-BGP,不是普通 BGP)
└─ 4. 只配了 RD 没配 RT → 路由出不去也进不来
问题五:跨 VRF 访问不通(如 A 要访问公网)
├─ 1. VRF 里没有默认路由 → 每个 VRF 都要单独配
├─ 2. 默认路由的下一跳在该 VRF 里不可达 → 换成可达的下一跳或走泄漏
└─ 3. 出口设备没做 NAT 或没放行 → VRF 的流量到出口要做地址转换
| 症状 | 最可能的原因 | 一条命令定位 |
|---|---|---|
display ip routing-table 里出现 VRF 网段 |
接口没绑定 VRF | display ip vpn-instance 看 Interfaces |
| 绑 VRF 后 IP 消失 | 官方行为,绑定会清 IP | display current-configuration interface |
display ip vpn-instance 里 Interfaces 为空 |
ip binding 没配 |
同上 |
| VRF 表里没有预期路由 | VRF 内没配路由(公网的不算) | display ip routing-table vpn-instance X |
| 两个 VRF 配好 RT 仍不通 | RT 不匹配 / 配错视图 | display ip vpn-instance 比 RT |
| ping 不通但 ARP 正常 | ping 时没带 vpn-instance,走了公网表 | ping -vpn-instance X <IP> |
| VRF 用户上不了网 | 该 VRF 没有默认路由 / 出口没 NAT | display ip routing-table vpn-instance X |
17.7.1 五个高频故障的深入说明
(1)“VRF 建了但路由在公网表里”
最常见的原因是接口没绑或者绑错了 VRF 名。注意 VRF 名区分大小写,VRF-A 和 vrf-a 是两个不同的实例。
另一个隐蔽原因:先配了 IP,后绑 VRF。绑定动作会清空 IP(见下条),IP 没了直连路由自然就没了,你以为是"路由跑到公网去了",其实是"路由没了"。
(2)绑定 VRF 会删除接口已有 IP —— 这是官方设计,不是 bug
华为官方命令参考原文写得非常明确:
「配置接口与 VPN 实例绑定后,或取消接口与 VPN 实例的绑定,都会清除该接口的 IP 地址、三层特性和 IP 相关的路由协议,如果需要应重新配置。」
正确顺序是:建 VRF → 绑接口 → 配 IP(及其他三层配置)。反过来做,你配的 IP 会被清掉,而且不会有任何报错提示——这是最坑的一点:命令执行成功,配置却没了。
(3)配了 RD 但 RT 不匹配 → 两个 VRF 不通
这是本章最想让你记住的坑。回到 17.2.2 和 17.2.3:RD 只是"给路由起个唯一名字",RT 才是"决定谁能收到"。
诊断动作:display ip vpn-instance 把两边的 RT 逐字比对。特别要注意方向——A 的 export 必须等于 B 的 import,反过来也一样。如果 A 配了 vpn-target 100:1 export-extcommunity,B 配了 vpn-target 100:2 import-extcommunity,那 A 发出来的路由带着 100:1 标签,B 只认 100:2,直接丢弃。
(4)全局路由表查不到 VRF 路由
不是故障,是设计。VRF 的路由只在 VRF 表里,查的时候必须 display ip routing-table vpn-instance <名字>。同理 ping、tracert 都要带 -vpn-instance。
(5)跨 VRF 怎么通
VRF 之间默认完全隔离。让它们通有三种做法,各有适用场景:
| 方法 | 做法 | 适用 | 风险 |
|---|---|---|---|
| 静态路由跨 VRF 指 | 在 A 的 VRF 里配一条路由,下一跳指向 B 的接口地址 | 简单场景、临时互通 | 下一跳必须可达,配置繁琐 |
| 路由泄漏(RT 配对) | 让 A 的 export RT 出现在 B 的 import 里 | 有 MP-BGP 的设备间、需要动态互通 | 泄漏范围大时可能扩大故障域 |
| 过防火墙 | 两个 VRF 各接防火墙一个接口,由防火墙做策略转发 | 有安全管控需求(多租户互联最常见) | 多一跳设备、成本高 |
生产环境的建议:多租户之间要互通,优先走防火墙。因为 VRF 之间直接泄漏路由,等于绕过了安全策略——两家租户本来该隔离,结果三层直通了,安全部门会找你。用防火墙做跨 VRF 转发,既能互通又能控策略。
17.7.2 VRF 与 DHCP / NAT / 防火墙 / 无线的配合
VRF 不是孤立的,它要和一批周边功能配合。这里把最容易踩的几个讲清:
(1)VRF 里的 DHCP 池
DHCP 服务器要把地址池绑定到对应的 VRF,否则拿不到地址:
# 全局先启用 DHCP
dhcp enable
# 创建地址池
ip pool POOL_A
network 192.168.1.0 mask 255.255.255.0
gateway-list 192.168.1.1
# 关键:地址池要绑定到该 VRF
vpn-instance VRF-DEPT_A
quit
# 在 VRF 内的网关接口上启用 DHCP
interface Vlanif 10
dhcp select global
quit
H3C 侧的写法类似,池里也要绑 VRF(vpn-instance VRF-DEPT_A)。没绑 VRF 的地址池只服务公网接口上的 DHCP 请求,VRF 里的用户请求拿不到地址——现象是"VRF 用户拿不到 IP",而你在池里看不出任何问题。
⚠ 待核实:待核实 华为
ip pool视图下绑定 VRF 的确切命令(本章写作vpn-instance VRF-DEPT_A,未从语料取到该命令的官方格式)以及 H3Cdhcp server ip-pool下绑定 VRF 的写法
(2)VRF 出口的 NAT
VRF 里的用户要访问公网,出口设备要做 NAT。关键是 NAT 必须指定 VRF——不带 vpn-instance 的 NAT 只处理公网实例的流量,VRF 里的用户走完全不会命中。
两家厂商的做法差别很大,分别说:
H3C:nat outbound 直接带 vpn-instance 参数
H3C 的 NAT 命令族在接口视图下就支持 vpn-instance,写法直接:
# H3C:给 A 公司的出口做源 NAT,指定其 VRF
# 关键就在末尾这个 vpn-instance 参数
interface GigabitEthernet1/0/1
nat outbound 3000 address-group 1 vpn-instance VRF-DEPT_A
quit
# H3C:NAT 静态映射(服务器发布)——最简形式
nat static outbound 192.168.1.10 203.0.113.10
# 需要指定 VRF 时,源和目的可各带一个 vpn-instance(语法支持,但官方示例多用简写)
# nat static outbound 192.168.1.10 vpn-instance VRF-DEPT_A 203.0.113.10 vpn-instance public
这两条命令的官方语法(已核实,H3C 命令参考原文):
nat outbound [ ipv4-acl-number | name ipv4-acl-name ] address-group
{ group-id | name group-name } [ vpn-instance vpn-instance-name ] ...
nat static outbound local-ip [ vpn-instance local-vpn-instance-name ]
global-ip [ vpn-instance global-vpn-instance-name ] [ acl ... ]
注意:vpn-instance 修饰的是"哪一侧的地址属于哪个 VPN 实例",静态映射时源和目的可以各写一个。
华为:走 nat-policy,按安全域 + 地址段匹配
华为的 AR/USG 用 nat-policy 视图做源 NAT,规则里按源安全域、地址段匹配。这个视图下的规则是否直接支持 vpn-instance 参数,本书语料未能核实。 工程上更常见的做法是:让 VRF 的流量先进入防火墙的虚拟路由器(见下面第 3 点),在虚拟路由器实例内做 NAT,而不是在路由器上直接对 VRF 做 NAT。
# 华为:nat-policy 视图的基本结构(供参考,VRF 相关的具体写法见下方 TODO)
nat-policy
rule name nat_vrf_a
source-zone trust
destination-zone untrust
source-address 192.168.1.0 mask 255.255.255.0
action source-nat easy-ip
quit
⚠ 待核实:待核实 华为 AR/USG 上为 VPN 实例内流量做源 NAT 的确切配置方式—— nat-policy 规则视图下是否支持按 vpn-instance 匹配或指定,或需借助防火墙 virtual-router 承接。 本书语料中
nat outbound与nat-policy均未取到含 vpn-instance 的官方语法。
(3)防火墙的 virtual-router(VRF 在安全设备上的实现)
防火墙上的**虚拟路由器(virtual-router)**就是 VRF 在安全设备上的对应实现。一台防火墙可以建多个 virtual-router,每个有独立的路由表、接口和安全策略,用于:
- 多租户场景下不同租户走不同 virtual-router
- 不同业务的安全域之间彻底隔离
- 双机热备时与对端 virtual-router 配对
理解要点:virtual-router 和 VRF 是同一个思想的两套实现——都是"把一台设备切成多台逻辑设备,各自有独立路由表"。你在交换机上学过 VRF,迁移到防火墙上只是命令名换了。
实际工程里最常见的架构:不让路由器/交换机上的 VRF 直接做 NAT,而是把 VRF 的流量引到防火墙,由防火墙的对应 virtual-router 承接——NAT、安全策略、VPN 都在那个实例内完成。这样既解决了"VRF 里做 NAT 各家写法不一"的问题,也顺便获得了防火墙的安全能力。
VRF-A 用户 ──┐
├──> 汇聚交换机(VRF 隔离)──> 防火墙
VRF-B 用户 ──┘ ├─ virtual-router A → NAT A → 互联网
└─ virtual-router B → NAT B → 互联网
⚠ 待核实:待核实 华为 USG6000E 与 H3C F1000 防火墙的 virtual-router(或等价多实例)配置命令, 以及它与交换机 VRF 对接(路由发布、接口归属)的完整流程。
(4)无线认证与 VRF
无线控制器(AC)给不同 SSID / 不同租户的 AP 分配地址时,如果 AC 上启用了 VRF,必须保证三处都绑对:
| 要绑的位置 | 绑错的后果 |
|---|---|
| AC 的 CAPWAP 源接口 | AP 找不到 AC,无法上线 |
| AP 管理 VLAN 的接口 | AP 上线后拿不到管理地址 |
| 用户网关(业务 VLANIF) | AP 能上线、STA 拿不到地址——最难查的一种 |
设计上有一条铁律:AP 管理网和用户业务网不要放在同一个 VRF 里。管理网应该是独立的、干净的、只有 AP 能访问的 VRF;用户网按租户/业务分。这样即使某个业务 VRF 出问题,AP 也不会一起掉线——否则一个 VRF 配错,整栋楼的 AP 全掉,连排错都进不去。
⚠ 待核实:待核实 华为 AC 与 H3C WX 系列在启用 VPN 实例后, AC 源接口(capwap source interface)、AP 管理 VLAN 与用户 VLAN 绑定 VRF 的具体配置要求与命令。
(5)一个务实的建议
VRF 不是越多越好。 每多一层虚拟化,排错的复杂度就多一层——你要记住"这个地址在哪个 VRF 里、这条命令要不要带 vpn-instance、这个功能支不支持 VRF"。只有当"地址段必须重复"或"必须做强隔离"这两个需求至少满足一个时,才值得上 VRF。 如果只是想做访问控制,ACL 就够了。
17.8 新手踩坑与本章小结
17.8.1 新手踩坑与注意事项
- 以为配了 RD 就完事——RD 只给路由"起名字",RT 才决定谁能收到。两个 VRF 不通,先查 RT 不查 RD。
- 先配 IP 再绑 VRF——绑定会静默清除接口 IP 和三层配置。正确顺序:建 VRF → 绑接口 → 配 IP。
- 查路由时忘了带 vpn-instance——
display ip routing-table只看公网表,VRF 路由得用display ip routing-table vpn-instance X。 - ping 时不带 vpn-instance——走公网表,必然不通,容易误判成"VRF 配坏了"。
- 默认路由只在公网配了一条——每个 VRF 都要各自配,公网那条对 VRF 无效。
- 以为 VRF 能替代 VLAN——两者层次不同,通常是配合使用:VLAN 做二层隔离,VRF 做三层隔离。
- VRF 名大小写不一致——
VRF-A和vrf-a是两个实例,绑定和查路由时必须完全一致。 - VRF 之间直接泄漏路由来做互通——绕过了安全策略,等保测评会被指出。生产环境走防火墙。
- 忘了 H3C 的
vpn-target缺省是 both——照抄华为写both没错,但要知道 H3C 不写也是 both,别以为是漏配。 - H3C 两个视图都配了 RT——
VPN 实例视图和IPv4 VPN 视图都配的话,以后者为准,改了不生效要去另一个视图查。 - VRF 内静态路由的下一跳在 VRF 里不可达——路由配了不生效,
display ip routing-table vpn-instance X里看不到。 - VRF 里的 DHCP 池没绑 VRF——用户拿不到地址,池配置看起来完全正常。
- VRF 叠加太多层——每加一层排错难度都上升。只有"地址必须重复"或"必须强隔离"时才用。
17.8.2 本章小结
- VRF 把一台物理设备虚拟成多台逻辑路由器,各自有独立的路由表、ARP 表、接口归属和路由协议实例。
- VLAN 隔二层、VRF 隔三层。最本质的差别:同名网段在 VLAN 里不能共存,在 VRF 里可以。
- RD 只是区分,RT 才决定互通。RD 给路由起唯一名字,RT 是收发路由的"通行证"——A 的 export 要等于 B 的 import。
- 公网表和 VRF 表是两套独立系统:查路由、ping 都必须带
vpn-instance参数;默认路由每个 VRF 各配一条。 - 绑定 VRF 会清除接口 IP(两家官方都明确写了),所以顺序必须是:建 VRF → 绑接口 → 配 IP。
- 华为与 H3C 的 VRF 命令相似度极高,要注意的差异只有三处:H3C 的
vpn-target可省方向、H3C 有独立的address-family ipv4子视图且优先级更高、H3C 的 VRF 内静态路由写法待核。 - VRF 不是万能药:只有"地址必须重复"或"必须强隔离"时才值得上,单纯做访问控制用 ACL 就够。
一张纸记牢本章:
| 你想干什么 | 记住这一句 |
|---|---|
| 理解 VRF | 一台设备切成多台,各有一套路由表 |
| 和 VLAN 区分 | VLAN 隔广播,VRF 隔路由;同名网段 VRF 能共存 |
| 记住 RD 和 RT | RD 起名,RT 开门;不通先查 RT |
| 配接口 | 先绑 VRF,再配 IP(反了 IP 会被清) |
| 查东西 | 路由、ping、ARP 全都要带 vpn-instance |
| 判断该不该用 | 地址要重复、或要强隔离,才用 |
自测题
- 某核心交换机上一个 VLAN 里有两个部门,都用
192.168.1.0/24。只用 VLAN 能做到吗?用 VRF 呢?为什么? - RD 和 RT 各解决什么问题?为什么"配了 RD 但两个 VRF 不通"是正常的?
ip binding vpn-instance之后接口 IP 没了,这是 bug 吗?正确的配置顺序是什么?- 在 VRF-A 里配了一条默认路由,VRF-B 的用户能用到吗?为什么?
- 两个 VRF 之间要怎么才能互通?三种做法分别适合什么场景?
- 华为和 H3C 在 VRF 配置上最主要的三个差异是什么?
- 只用 VLAN 做不到。两个 VLAN 可以用同一网段吗?技术上 VLAN 本身只隔离广播域,但两个 VLAN 配同一网段的网关(比如都是
192.168.1.1)在同一台三层设备上会冲突——同一个地址不能配在两张同一网段的路由表里。用 VRF 可以:两套独立路由表,各配一个192.168.1.1,互不冲突。 - RD 解决"两条同前缀路由如何区分"(给路由起唯一名字,只在本地/传递时用);RT 解决"谁能收到我的路由、我能收到谁的路由"(export/import 配对)。所以配了 RD 但 RT 不匹配时,路由能被区分开,但不会被对方接收,不通是正常的。
- 不是 bug,是官方设计。华为官方明确写「配置接口与 VPN 实例绑定后,或取消接口与 VPN 实例的绑定,都会清除该接口的 IP 地址、三层特性和 IP 相关的路由协议」。正确顺序:建 VRF → 绑接口 → 配 IP。
- 用不到。公网表和 VRF 表是两套独立系统,VRF 内的默认路由要在该 VRF 里单独配。VRF-B 的路由表里没有那条默认路由。
- 三种:①静态路由跨 VRF 指(下一跳指向对端 VRF 的接口地址,适合简单场景);②路由泄漏(让 A 的 export RT 出现在 B 的 import 里,适合有 MP-BGP 的场景);③过防火墙(各接防火墙一个接口做策略转发,适合多租户、有安全管控需求)。生产环境多租户互通优先走防火墙,避免绕过安全策略。
- ①H3C 的
vpn-target不写方向参数时缺省是 both(华为必须显式写);②H3C 有独立的address-family ipv4子视图,且其配置优先级高于 VPN 实例视图;③H3C 的 VRF 内静态路由写法本章语料未能核实,不能照搬华为的ip route-static vpn-instance。
关于本书:《华为 / H3C 网络设备典型功能配置详解》—— 面向国内高校/企业网络环境, 华为 VRP 与 H3C Comware 双厂商并排配置的实操教材,共 43 章。 全书所有命令尽量有官方出处,查不到的显式标注「待核实」。 返回系列目录
本人保留对侵权者及其全家发动因果律武器的权利
版权提醒
如无特殊申明,本站所有文章均是本人原创。转载请务必附上原文链接:https://www.elliot98.top/post/huawei-h3c-book/17/。
如有其它需要,请邮件联系!版权所有,违者必究!