
干了这么多年网络有一个问题几乎每次培训都会被问到“我明明在一台交换机上创建了VLAN 10和VLAN 20两个VLAN里的电脑也都接在同一台交换机上为什么就是ping不通”在二层交换机时代答案很简单VLAN本身就是隔离广播域的不同VLAN之间没有三层路由不通是正常现象。但换成三层交换机后很多人还是习惯性地在上面创建VLAN划分接口配好IP然后等两个VLAN互通——结果等来的却是一堆问号。这就是SVISwitch Virtual Interface或者说华为体系里VLANIF接口没有搞明白导致的。SVI就是三层交换机上那个“看不见摸不着但确实存在”的虚拟路由接口它才是让VLAN之间真正互通的关键。这篇文章我想把它的原理、配置、排错和工程应用一次讲透针对的是正在学网络、准备考华为认证、或者在ensp里做实验总被VLANIF坑到的朋友工作里要和三层交换机打交道的网工也能当个速查参考。1. 为什么需要SVI一个VLAN一个网关这条铁律的由来很多人第一次听到“虚拟路由接口”这几个字第一反应是“虚的接口也能路由”能而且企业网络里天天靠它干活。要理解SVI得先从VLAN的二层隔离本质说起。1.1 先理清VLAN的二层隔离本质VLAN把一台交换机在逻辑上拆成了多台交换机。PC-A接在GigabitEthernet0/0/1属于VLAN 10PC-B接在GigabitEthernet0/0/2属于VLAN 20。它们虽然物理上连着同一台设备但广播域完全隔离ARP请求根本不会跨VLAN转发所以二层永远不通。既然二层不通那就需要三层介入。三层介入的方式就是给每个VLAN配一个“网关”。PC-A要把数据发给PC-B先把数据丢给网关由网关负责跨VLAN路由转发。问题来了网关在交换机上但交换机上并没有一个物理接口能同时代表VLAN 10和VLAN 20。这个时候SVI就该登场了。1.2 “用一台路由器做网关”的老思路与它的天花板在SVI普及之前跨VLAN通信用的是单臂路由Router-on-a-Stick。把交换机上的一个物理口配成Trunk口接到路由器路由器上拆出多个子接口每个子接口对应一个VLAN的网关地址。VLAN 10的PC发数据先从Trunk口送到路由器的子接口路由器拆掉802.1Q标签后发现目的地是另一个VLAN再从另一个子接口送回去。这个方案能跑通但所有跨VLAN流量都要挤在一条物理链路和路由器CPU上带宽上不去延迟也明显。一个小网络十几个VLAN或许还能忍到了汇聚层、核心层这种动辄几百个VLAN、流量每秒几个G的环境单臂路由根本扛不住。三层交换机的出现就是把“路由”这件事从路由器CPU搬到了交换芯片里让它用硬件线速转发于是SVI成了必然选择。1.3 SVI到底是个什么东西一个绑在VLAN上的逻辑接口SVI的全称是Switch Virtual Interface华为体系里叫VLANIF。它的本质是交换机内部生成一个虚拟的三层接口这个接口“属于”某个VLAN所有在这个VLAN里的物理接口都相当于这个三层接口的成员端口。换句话说SVI不是一个物理存在的插槽而是一个逻辑接口。它绑定了两个关键信息一个VLAN ID、一个IP地址。VLAN ID决定了它代表哪个二层广播域IP地址决定了这个广播域的网关身份。PC把网关指向192.168.10.1交换机收到发往这个地址的ARP请求后VLANIF 10直接应答数据就能进到三层路由流程。这里要特别强调一个底层机制SVI接口的UP/DOWN状态不是自己决定的而是由对应的VLAN决定的。华为VRP系统里如果一个VLAN里没有任何物理端口是UP状态那么对应VLANIF会处于Down状态IP地址虽然配置着但不生效ping不通。这一点在排错时是重点检查项后面会专门讲。2. SVI不是唯一解和单臂路由、三层物理口的横向对比学网络最忌讳“一招鲜”。SVI是三层交换机上最常用的三层接口类型但绝不是唯一的三层接口类型。实际工程里单臂路由和三层物理口也就是华为里的三层routed端口也都有各自的用武之地。搞清楚它们的区别才知道什么时候该用谁。2.1 单臂路由省钱但不成规模单臂路由最大的价值在于省钱和省端口。老旧的二层交换机没有三层功能配个路由器当网关几百块就能解决跨VLAN通信问题适合家庭实验室、微型办公网络这类只有几个VLAN、流量非常小的场景。但它有三个明显的天花板第一所有跨VLAN流量必须经过路由器CPU转发带宽被路由器的转发性能锁死第二单条物理链路承载所有VLAN的帧链路上行带宽就是全网跨VLAN流量的总和上限第三子接口的配置极其琐碎每个VLAN都要建一个子接口、配一个封装、配一个IPVLAN一多配置量和出错概率都直线上升。所以但凡网络规模超过20个VLAN我都不建议再考虑单臂路由。2.2 三层物理口没有VLAN概念的高速通道华为的三层交换机上可以用undo portswitch把一个物理口从二层口变成三层口直接配置IP地址这就是routed port。它和SVI最大的区别是routed port不依赖任何VLAN它就是一个纯粹的物理三层接口类似路由器上的以太网口。routed port的典型场景是交换机之间的互联。比如核心交换机和汇聚交换机之间跑OSPF互联地址用/30网段这时候直接用routed port最干净。如果用VLANIF做互联你还得单独创建一个互联VLAN在两端交换机上都创建相同VLAN ID、接入对应物理口中间还必须是Trunk徒增复杂度。三层物理口没有这些包袱接口物理UP三层就直接UP排错维度少一层。2.3 选型逻辑什么场景用SVI、什么场景用三层口工程里的选型逻辑其实不复杂我平时是这样判断的作为终端用户VLAN的网关用SVI。终端接入的接口是二层口归属某个VLAN网关必然落在对应VLANIF上。交换机之间的互联口优先用三层物理口。前提是两端设备都支持或者中间链路是三层互联如果中间隔了一台二层透传设备那就只能退回VLANIF方式创建专门的互联VLAN。小规模出口场景可以考虑单臂路由或者直接用SVI接上行路由器。接口需要同时承载二层和三层需求时用SVI因为物理口本身可以保持二层模式并划分到VLAN里。选型的最终落脚点是“这个接口要不要终结VLAN”。如果终结VLAN就必须SVI如果不终结VLAN、就是纯粹的路由器到路由器互联就上三层物理口。这个判断标准背下来就够了。3. ensp实战从VLAN划分到VLANIF互通再到DHCP中继理论讲完上实操。这个实验完全基于华为ensp模拟器场景是经典的企业接入汇聚核心模型接入层交换机只做二层VLAN划分汇聚/核心层交换机把对应的VLANIF创建出来充当网关并顺带演示DHCP中继——这也是问得最多的热词之一。整个流程跑一遍SVI的配置逻辑就清楚了。3.1 组网拓扑与地址规划拓扑里我用一台汇聚交换机我们叫它Core-SW连接两台接入交换机Access-SW1和Access-SW2接入交换机下面挂PC。VLAN规划如下网络对象VLAN ID网段网关VLANIF地址办公区终端VLAN 10192.168.10.0/24192.168.10.254生产区终端VLAN 20192.168.20.0/24192.168.20.254管理网段VLAN 10010.0.0.0/2410.0.0.254核心上行互联VLAN 20010.0.200.0/30Core侧10.0.200.1PC1接Access-SW1的GE0/0/1划入VLAN 10PC2接Access-SW1的GE0/0/2划入VLAN 20PC3接Access-SW2的GE0/0/1也划入VLAN 10。接入交换机上联汇聚交换机用Trunk口放通VLAN 10和20。Core-SW上创建VLAN 10、20、200对应的VLANIF分别充当网关。3.2 接入层交换机的配置接入层交换机的任务只有一个把终端的流量按VLAN打好标签通过Trunk送给核心设备。它不需要任何三层路由配置也不需要创建VLANIF这一点很多人会搞混看到接入交换机是台三层交换机就忍不住在上面配置网关结果网关配在接入层汇聚层又配了一遍本地流量被强制绕路排错时一头雾水。接入层配置如下sysname Access-SW1 vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 interface GigabitEthernet0/0/2 port link-type access port default vlan 20 interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20这里有几个细节值得注意Trunk口默认只放通VLAN 1所以必须用port trunk allow-pass vlan 10 20显式放通。上行口不要配port trunk pvid vlan改默认VLAN保持默认VLAN 1就行否则无标签帧会被错误地塞进非预期VLAN造成二层环路或广播域混乱。接入层所有面向终端的口都用access模式不要用trunk因为终端不感知VLAN标签也基本不会主动打标签。3.3 汇聚/核心层的VLANIF配置Core-SW是关键。它的任务有三个终结VLAN 10和VLAN 20的网关、在VLAN 10和VLAN 20之间路由、提供DHCP中继能力。核心配置如下sysname Core-SW vlan batch 10 20 100 200 interface Vlanif10 ip address 192.168.10.254 255.255.255.0 interface Vlanif20 ip address 192.168.20.254 255.255.255.0 interface Vlanif100 ip address 10.0.0.254 255.255.255.0 interface Vlanif200 ip address 10.0.200.1 255.255.255.252 interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 interface GigabitEthernet0/0/2 port link-type trunk port trunk allow-pass vlan 10 20 interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 200配置完VLANIF以后VLAN 10和VLAN 20之间就会自动出现直连路由因为交换机内部的路由表会为每个UP状态的VLANIF生成一条直连路由。此时PC1192.168.10.1/24网关192.168.10.254ping PC2192.168.20.1/24网关192.168.20.254应该是通的。如果ping不通不要急着怀疑VLANIF配置先检查下面三件事第一Core-SW上这些VLAN是否存在可以用display vlan查看。如果VLAN 10都不存在VLANIF 10自然起不来。第二接入交换机的Trunk是否放通了对应VLAN放通一个查一个两端必须一致。第三PC的网关地址是否真的指向了VLANIF的IP如果PC把网关指到了192.168.10.1而VLANIF 10是192.168.10.254那ARP请求根本没人应答。3.4 DHCP中继让VLANIF成为“离网关最近的帮手”很多规模稍大的网络DHCP服务器不放在用户网段而是集中在服务器区。这时候用户VLAN的DHCP请求是广播包无法跨网段送到DHCP服务器必须靠网关设备做中继。华为VRP里的配置非常简单就是在VLANIF下开启DHCP中继功能并指定服务器地址。假设DHCP服务器在服务器区地址为10.0.0.100/24Core-SW上VLAN 10和VLAN 20的VLANIF配置改为interface Vlanif10 ip address 192.168.10.254 255.255.255.0 dhcp select relay dhcp relay server-ip 10.0.0.100 interface Vlanif20 ip address 192.168.20.254 255.255.255.0 dhcp select relay dhcp relay server-ip 10.0.0.100PC启动后发出的DHCP Discover广播到达Core-SWVLANIF 10发现这是一个DHCP请求并且自己配置了中继就把它单播转发给10.0.0.100。DHCP服务器回包送到Core-SW后Core-SW根据VLAN信息把应答广播回VLAN 10里的PC。整个过程对PC完全透明PC只知道自己从一个叫“192.168.10.254”的网关那里拿到了IP地址。这里有个小知识点DHCP中继之后PC拿到的是服务器地址池里的IP比如服务器上为VLAN 10建的地址池是192.168.10.0/24为VLAN 20建的地址池是192.168.20.0/24。因为服务器收到的是经中继转发的请求请求里带着网关地址192.168.10.254服务器就是靠这个网关地址来判断该分配哪个地址池的。所以如果发现PC拿到了错的网段IP先去看服务器上的地址池和VLANIF的IP是否对应别急着查中继配置。4. Ping不通时的排查链路SVI问题定位的五个关键点VLANIF配置了VLAN也建了PC网关也指对了但就是不通用。这种情况我在群里见得太多了而且大多数时候问题都不是出在VLANIF本身而是被前面的某个环节卡住了。下面这套排查链路是我自己的标准动作按顺序走一遍基本能在两分钟内定位问题。4.1 第一步看接口状态先登进三层交换机执行display ip interface brief找到VLANIF 10这一行。如果Status和Protocol都是UP说明三层接口本身没问题往下一层查。如果显示Protocol down那基本可以断定是VLAN的问题。SVI的协议状态由VLAN内是否有UP的物理接口决定。这个机制不难理解VLANIF存在的前提是这个VLAN在交换机上“活”着而VLAN“活”着的前提是至少有一个物理口属于它且处于UP状态。VLAN里一个UP的口都没有VLANIF自然起不来。所以排查Protocol down重点查两点VLAN 10有没有被创建有没有任意一个物理口划入VLAN 10且接线正常我第一次带新人排查这个问题时他们最容易漏掉的是第二种情况。口没接终端或者对端设备没开物理口是Down的VLAN里面全是Down的口SVI就废了。4.2 第二步看VLAN的“存在感”执行display vlan确认VLAN 10是存在的。如果列表里压根没有VLAN 10那问题就变成了“为什么VLAN没建出来”。在ensp里常见的坑是配置命令里写了vlan batch 10 20但系统提示没有成功可能是因为VLAN ID范围超出了设备支持范围或者命令写到了系统视图之外。另外一个隐蔽的坑如果VLANIF配置后又执行了undo interface Vlanif 10那么VLAN 10的VLANIF会被删除但VLAN本身还在。之后再想恢复很多人只重新配了IP地址忘了重新创建VLANIF接口结果display current-configuration里看到VLAN还健在但三层一直不通。4.3 第三步看ARP回包接口状态UP、VLAN存在PC还是ping不通网关这时候需要抓ARP。在PC上ping网关IP然后在交换机上执行display arp | include 192.168.10.254看看ARP表里有没有这个地址。如果ARP表里没有VLANIF 10的MAC说明这个VLANIF可能根本没有参与二层通信。为什么接口状态UP但ARP不响应最常见的原因是IP地址和VLAN里的某台主机IP冲突了。比如VLAN 10里有台PC手动配了192.168.10.254交换机的ARP表一直在这两个MAC之间横跳飘忽不定当然ping不通。还有个ensp特有的坑模拟器的ARP学习速度比真机慢特别是同一时间多个PC同时开局时。遇到ARP表为空先等几秒再刷新不要急着下结论。如果你在ensp里测试时发现第一次ping不通第二次通了基本就是这个原因。4.4 第四步看路由表与回程路由SVI的ARP正常了从PC到网关的链路就通了但如果数据要跨网段走还需要看路由表。执行display ip routing-table确认VLANIF 10对应网段的路由是存在的并且是直连路由。直连路由出现的前提是接口UP且配置了有效IP地址。如果VLANIF 10是UP的路由表里却没有192.168.10.0/24这条路由那几乎可以断定IP地址没配上去或者配置时子网掩码敲错了。比如把255.255.255.0敲成了255.255.255.128路由表里就会出现一个半残的网段PC的IP在这个网段外ARP都不应答。排到这一步还要考虑回程路由的问题。PC1 ping PC2时PC1把包发给Core-SWCore-SW查到192.168.20.0/24是直连路由从VLANIF 20转发出去这一步没问题。但如果Core-SW还有上行设备比如上层还有一台核心路由器它就需要知道192.168.10.0/24和192.168.20.0/24该怎么回来。很多VLAN间互通的问题核心交换机本身没问题而是上游设备没有回程路由导致响应报文被丢弃。4.5 第五步看ensp实验里的“隐藏坑”ensp是个好东西但它也有自己的脾气。VLANIF实验里最容易踩的坑有三个第一个是设备选择。有些版本的ensp里S5700系列的某些型号默认不支持部分高级特性比如DHCP中继配置了也不生效。实验前先确认你拖进来的是三层交换机型号里带三层功能标识的别拿S3700这类纯二层凑合。第二个是接口编号和物理连接不符。ensp里接错端口是常态比如把PC接到了GE0/0/2却在GE0/0/1上配了access vlan 10结果PC的VLAN归属完全不对。排错时先用display mac-address看看终端的MAC到底在哪个接口上学习到的比盯着配置看半天高效得多。第三个是防火墙和PC的虚拟网卡干扰。ensp的PC和外部通信时如果宿主机开启了虚拟网卡或代理工具可能导致ensp里的ARP/ICMP报文被劫持。实在排查不动的时候把所有虚拟网卡禁用、关闭代理、以管理员身份运行ensp很多怪问题就不治而愈了。5. 生产环境中的SVI进阶端口安全、上行联动和设计习惯考试和实验做完真正到了生产环境SVI的很多“性格”才彻底暴露出来。这里挑几个容易被忽视、但一出问题就很头疼的点来说。5.1 端口安全对SVI网关的影响三层交换机上开启端口安全后SVI的行为会有些变化。华为交换机的端口安全port-security默认只允许一个MAC地址通过一旦该端口上的终端换了MAC比如拔出笔记本网线插到另一台设备上交换机会直接丢弃帧甚至关掉端口。之前帮一个客户排查故障核心交换机下的某台PC突然断网外网全通本网段的终端也ping不通它。最后定位到是接入交换机上开启了端口安全终端的MAC和配置的不一致端口被error-down了。因为PC连接的是二层端口从VLANIF的角度看VLAN 10少了一个成员口如果这个VLAN里只有这一台PCVLANIF 10直接Protocol down整个网段都遭殃。所以我的建议是生产环境开启端口安全时一定要配套使用port-security mac-address sticky动态学习并记忆MAC同时把VLAN内的冗余端口数量留足。更关键的是端口安全配置完成后必须检查每个VLAN内是否至少有一个UP状态的普通端口否则VLANIF 10会因为VLAN“空转”而Down掉网关直接消失。5.2 接入层vlanif为什么不建议当网关热词里有个“接入层交换机用vlanif接口在汇聚层核心层端口怎样设置”这正好反映了一个常见的方案误区。有些工程师习惯在接入层交换机上也创建VLANIF并把它作为终端网关。一台接入交换机上同时做了二层VLAN划分和三层网关终结配置看起来简单实际上埋了不少雷。当VLANIF网关下沉到接入层而网络里存在多台接入交换机时网关就分散了。终端流量要跨VLAN通信必须先从接入交换机绕到汇聚层再绕回来路径环了一大圈。更麻烦的是如果这台接入交换机挂了下面挂的所有终端的网关都没了故障域被放大。规范的做法是接入层纯粹做二层透传汇聚层统一终结用户VLAN的VLANIF核心层只做路由。这样网关集中、路径清晰、故障域小。接入层如果非要配VLANIF只推荐配管理地址比如Management VLAN的VLANIF 100配10.0.0.254这种地址用来远程登录管理不承载终端流量。这样既满足了远程运维的需求又不会污染业务流量。关于三层交换机的登录认证生产环境强烈建议至少启用AAA认证管理口的访问控制列表里只允许管理网段来源的SSH连接。管理VLAN的VLANIF不要和业务VLAN混在一起独立画一个VLAN出来用独立网段管理设备这在审计时也能说得清。5.3 一些值得养成的SVI设计习惯最后说几个经验总结主要是设计习惯层面的。第一个习惯一个VLAN只允许一个VLANIF。这个原则在华为VRP里是硬性的一个VLAN只能创建一个VLANIF接口。如果有两个网段需要共用同一个VLAN就说明VLAN规划出了问题需要拆成两个VLAN。反之一个VLANIF对应一个网关这个对应关系要死记。第二个习惯VLANIF的IP地址尽量选在网段末尾不要用网段第一个地址。原因有两个一是第一个地址经常被PC手动配置的静态IP占用避免冲突二是终端自动获取地址时DHCP分配往往从网段低位地址开始把网关放在末尾能减少和DHCP池重叠的概率。我接触过不少客户网络网关用.1或.254的都有实际都能跑但.254出问题概率更低。第三个习惯给VLANIF配置描述。生产环境几百个VLAN如果没有描述排错时每次都要先查VLAN和网段对应关系效率极低。配置描述后display current-configuration一目了然interface Vlanif10 description Gateway-of-Office-Network ip address 192.168.10.254 255.255.255.0第四个习惯规划好VLANIF所在的管理VLAN。很多设备默认VLAN是1但业务VLAN已经划到10、20了管理还留在VLAN 1意味着管理流量和业务流量混在一起。建议把管理流量安排到VLAN 100这类独立VLAN里VLANIF 100用独立的管理网段用SSH远程管理统一切到管理VLAN。第五个习惯在上行链路上显式放通VLAN不要依赖Trunk的默认行为。华为的Trunk端口默认放通VLAN 1其他VLAN需要显式配置。如果上行链路没有放通某个VLAN而VLANIF又已经配好就会出现“接口UP、VLAN存在、ARP正常但跨设备不通”的怪现象。每次扩容新VLAN记得同时更新所有相关Trunk口的放通列表这条能直接决定你的VLANIF能不能生效。写在最后回头来看SVI/VLANIF的配置本身并不复杂核心就是一句话在交换机上创建VLAN在同一个VLAN上再建一个虚拟三层接口配上IP就成了网关。但真正考验基本功的是你能不能理解这个虚拟接口和VLAN、物理端口、路由表之间的绑定关系以及出了问题之后能不能按链路一层一层剥开看。我个人在实际运维中最大的感受是很多VLANIF的故障最终都是因为“某个成员口Down了导致VLAN里没有UP端口”或“Trunk放通列表漏配”引起的SVI本身反而是最不容易出错的部分。所以如果你也用这套东西建议把排错的重心多分一点给VLAN状态和二层链路这两块。ensp是个好工具把配置敲熟、把故障模拟出来再亲手解决比看十遍文章都管用。