尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

eNSP实战:单臂路由实现VLAN间互访,从原理到排错全解析

eNSP实战:单臂路由实现VLAN间互访,从原理到排错全解析 先分享一个我印象挺深的现场小公司的网络刚做完VLAN隔离财务部和技术部就同时炸了锅——财务访问不了技术部的文件服务器技术部也打不开财务的ERP系统。运维同事跑过来说“网被你们做隔离做坏了”。其实不是坏了是只做了隔离没做互访。VLAN切分广播域是网络设计里必须做的一步但业务系统天天要跨部门通信这也是刚需。一边要隔离、一边要互联单臂路由就是解决这个矛盾最经典也最轻量的一种方案。这篇文章我会基于eNSP华为网络模拟器从零复现一个单臂路由实验把原理讲透、把命令敲全、把坑也一并踩完。内容覆盖交换机的VLAN划分、路由器子接口的802.1Q封装、ARP广播配置以及eNSP环境里最常见的启动失败和ping不通问题。适合刚接触数通、准备HCIA考试、或者在真实项目里被VLAN间路由卡住的人。我不打算写成说明书更多是站在实操角度把为什么这样做、不那样做以及哪些地方最容易翻车一次说清楚。1. 为什么要做单臂路由VLAN隔离做完之后跨VLAN互访才是真需求VLAN的价值今天不用我多说核心就一句话把一个大的二层广播域切成若干个小广播域。网络里的广播报文不会跨VLAN泛滥安全性提升了故障面缩小了管理上也能按部门、按业务灵活分组。但VLAN解决的是“隔离”问题它天然不解决“通信”问题。两个不同VLAN的终端MAC地址互相不知道ARP请求也到不了对端它们默认就是不通的。很多新手在这里有个误区以为VLAN分完了网络就“做完”了结果一测试发现不同VLAN之间完全不通然后开始怀疑设备是不是坏了。这是理解上的偏差VLAN设计本身就是为了隔断互访是后续额外要解决的需求。跨VLAN通信的常见方案一共有三种我简单对比一下方案核心设备优点缺点适用场景单臂路由路由器成本低、配置灵活、适合学习和低流量场景所有流量过一个物理口存在性能瓶颈小型网络、实验环境、临时链路三层交换机三层交换机硬件转发性能高支持VLANIF接口设备成本高配置逻辑相对复杂大中型园区网、高流量场景多臂路由路由器每个VLAN一个物理口无封装开销占用端口多扩展性差极少用只适合VLAN数量很少的场合单臂路由的核心思路是路由器用一个物理接口连接交换机在这个物理接口上创建多个子接口每个子接口对应一个VLAN子接口在收到带VLAN Tag的帧后做解封装再根据路由表转发到另一个子接口从而实现不同VLAN之间的三层互通。为什么叫“单臂”形象一点说路由器只有“一只手臂”伸出去接交换机却要一个人干好几个人的活。对比传统的多臂路由每个VLAN单独接一根网线到路由器物理口单臂路由用虚接口换端口节省代价是带宽共享。这里要特别强调一个认知单臂路由里的路由器干的是“路由”的活没错但它不是简单地看IP头转包就完了。每一份从VLAN 10到达VLAN 20的数据帧进接口的时候带着VLAN 10的Tag出去的时候必须改成VLAN 20的Tag。路由决策发生在三层但数据帧在二层要被“重新打扮”一次这个打扮的工作就是子接口完成的。2. 单臂路由到底在做什么子接口与802.1Q标签的完整链路理解单臂路由最关键的是把“子接口”这个虚拟概念彻底吃透。华为路由器上一个物理接口可以拆分出多个子接口子接口的编号是物理接口加小数点比如 GigabitEthernet0/0/0.10GigabitEthernet0/0/0.20。这些子接口共享物理接口的收发能力但逻辑上完全独立可以配置不同的IP地址、不同的VLAN封装。数据帧处理流程是整个实验的钥匙。我用VLAN 10的主机A192.168.10.1访问VLAN 20的主机B192.168.20.1举例完整走一遍主机A发现目的IP 192.168.20.1跟自己不在同一网段把帧交给默认网关192.168.10.254。此时主机A发ARP请求请求的是网关的MAC。交换机收到主机A的帧这个帧在VLAN 10里广播从Trunk口发给路由器时交换机打上VLAN 10的Tag。路由器物理口GigabitEthernet0/0/0收到带Tag的帧交给子接口GE0/0/0.10。子接口认出Tag是10剥离Tag继续往IP层送。路由器查路由表发现192.168.20.0/24网段从GE0/0/0.20可达把报文交给子接口GE0/0/0.20。GE0/0/0.20封装上VLAN 20的Tag通过物理口发给交换机。交换机根据Tag 20把帧从Access口转发给主机B主机B收到数据。整个过程看起来不复杂但有几个细节特别容易忽略。第一个是“子接口默认不处理广播报文”的问题。华为AR路由器上子接口默认情况下对ARP广播报文是直接丢弃的。如果你在子接口下配了IP地址和dot1q termination vid却没开arp broadcast enable那主机A的ARP请求到了子接口就被丢了网关MAC永远学不到ping自然不通。这句话请记住后面排查部分我会专门展开。第二个是“物理接口本身不能配IP”。单臂路由的物理接口下面只负责透传带Tag的帧它本身不参与三层转发。很多新手手一滑在物理接口上配了IP地址结果子接口全部失效。第三个是“交换机Trunk口放行VLAN”的细节。Trunk口默认只放行VLAN 1你必须手动放行VLAN 10和VLAN 20否则帧到了交换机Trunk口就直接被丢弃了。这个在eNSP里不报错但就是不通非常坑。我做了个简单类比帮助记忆子接口就像小区单元楼下的信报箱每个信箱对应一户VLAN。投递员物理口把信件收回来以后先看一眼门牌号Tag再塞到对应的信箱里。如果你信箱上没贴门牌号没配dot1q termination vid或者贴错了信就送不到。如果你压根没给投递员开信箱权限Trunk放行未配置信就在门口被扔掉了。这么记整个逻辑就顺了。3. eNSP实验拓扑搭建与参数规划以及先避开那些安装启动的雷很多读者是在eNSP里做这个实验的。我先说安装和启动的问题因为这一步不过后面全是白搭。热词里提到的“eNSP启动设备AR1失败40”是出现频率最高的问题常见原因其实就那么几个VirtualBox版本和eNSP不兼容。eNSP自带的VirtualBox版本较旧如果你电脑装了新版VirtualBox或VMware冲突概率很高。VirtualBox后台服务残留。eNSP启动设备时会调用VirtualBox的Headless模式如果上次异常退出残留的vbox进程没清干净新设备就起不来。电脑开了Hyper-V或内核隔离。这两个功能会干扰VirtualBox的虚拟化能力导致AR1启动后立刻崩溃。遇到启动失败40我按这个顺序处理先把eNSP完全退出任务管理器里把VBoxSVC、VBoxHeadless这两个进程全部结束然后检查VirtualBox的版本eNSP对VirtualBox版本很敏感推荐使用eNSP安装包里捆绑的版本最后确认Windows功能里的Hyper-V已关闭。还有一个很隐蔽的问题eNSP安装路径和VirtualBox安装路径不能有中文或空格否则也会玄学失败。eNSP装好之后搭建本实验拓扑如下1台路由器 AR1型号可以选AR22201台交换机 SW1型号选S57002台PCPC1和PC2连线关系很简单AR1的GigabitEthernet0/0/0连接SW1的GigabitEthernet0/0/1SW1的GigabitEthernet0/0/2连接PC1SW1的GigabitEthernet0/0/3连接PC2。地址规划我列成表格方便直接抄对象接口/位置IP地址网关所属VLANPC1网卡 eth0/0/1192.168.10.1/24192.168.10.254VLAN 10PC2网卡 eth0/0/1192.168.20.1/24192.168.20.254VLAN 20路由器子接口GE0/0/0.10192.168.10.254/24无封装VLAN 10路由器子接口GE0/0/0.20192.168.20.254/24无封装VLAN 20注意路由器的子接口IP就是各VLAN的网关地址。PC必须把网关指到对应子接口的IP上否则数据包没有下一跳连第一步都走不出去。4. 配置命令逐条拆解交换机VLAN、路由器子接口、终端网关这个实验的配置量不大但每一步都有讲究。我会按“交换机 → 路由器 → PC → 验证”的顺序来并在每条关键命令后面解释为什么要这么写。4.1 交换机侧的VLAN创建与端口划分system-view sysname SW1 vlan batch 10 20vlan batch是批量创建VLAN的写法比单独vlan 10再vlan 20省事得多。VRP平台上的习惯是多VLAN一次创建。接下来划分端口interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 interface GigabitEthernet0/0/2 port link-type access port default vlan 10 interface GigabitEthernet0/0/3 port link-type access port default vlan 20GE0/0/1连接路由器必须配置为Trunk口这样才会转发带VLAN Tag的帧。有一行命令我特意没加就是port trunk allow-pass vlan all为什么不推荐all因为它会把交换机上所有VLAN都放行如果某个VLAN是专门隔离的敏感业务你等于是把门全敞开了。精确放行VLAN 10和VLAN 20是更严谨的配置习惯在真实项目里也建议这样做。GE0/0/2和GE0/0/3连接PCPC发送的是不带Tag的普通以太网帧所以接口类型必须是Access并且要指定default vlan。Access口发出的帧不带Tag收到不带Tag的帧就归入default vlan这个机制要理解清楚。4.2 路由器子接口与VLAN封装交换机配好之后配置路由器。核心命令如下system-view sysname AR1 interface GigabitEthernet0/0/0.10 dot1q termination vid 10 ip address 192.168.10.254 255.255.255.0 arp broadcast enable interface GigabitEthernet0/0/0.20 dot1q termination vid 20 ip address 192.168.20.254 255.255.255.0 arp broadcast enable interface GigabitEthernet0/0/0 undo shutdowndot1q termination vid 10表示这个子接口只接收VLAN Tag为10的帧发出去的帧也要打上VLAN 10的Tag。这条命令是整个单臂路由的核心少了它子接口就是个没有“门牌号”的信箱。ip address就是给子接口配IP这个IP是所在VLAN内主机的网关。arp broadcast enable这一条在eNSP的很多版本里是必须的。前面原理部分提过华为AR路由器子接口默认不转发ARP广播报文如果不开主机A发出去的ARP请求到了子接口就被丢弃无法获取网关MAC。开启之后子接口才会处理对应VLAN的ARP广播。最后那条undo shutdown很关键但很容易被忽略。eNSP里路由器物理接口有时默认是shutdown的状态尤其是模拟器环境容易出这种状况。你配了半天子接口结果物理口没打开数据压根进不了路由器。4.3 PC终端配置PC1配置IPv4地址192.168.10.1子网掩码255.255.255.0网关192.168.10.254PC2配置IPv4地址192.168.20.1子网掩码255.255.255.0网关192.168.20.254在eNSP里双击PC图标在图形界面里填就行。这里有个eNSP特有的坑PC的网关必须填哪怕只是做VLAN间互访的实验也必须填。有些读者觉得“我只想测通先不配网关”结果是ping网关都不通还以为是路由器配置错了。网关就是PC的“出门地址”不填等于不出门。4.4 验证配置与连通性配置完成后先看路由器的接口状态display ip interface brief输出里会看到GE0/0/0.10和GE0/0/0.20状态为UpIP地址分别为192.168.10.254和192.168.20.254。如果子接口显示Down重点检查物理接口GE0/0/0是否undo shutdown以及交换机Trunk口是否放行了对应VLAN。然后在PC1上ping PC2ping 192.168.20.1正常情况下源地址是192.168.10.1目标地址是192.168.20.1经过路由器中转后能够ping通。如果通了恭喜你单臂路由已经生效了。5. 实测排查从ping不通到彻底搞懂ARP广播与子接口封装很多人在这个实验里第一次体会到什么叫“配完了但不通”。这里我把最常见的几个症状、原因和排查方法完整过一遍都是我实际踩过或者被问过无数次的。5.1 症状一PC ping网关都不通这是第一道坎。如果PC1连192.168.10.254都ping不通说明问题出在一二层跟路由没半毛钱关系。排查链路在PC1上执行ipconfig命令行窗口确认IP地址、掩码、网关确实填对了。在SW1上执行display vlan确认VLAN 10存在且GE0/0/2已经被划进VLAN 10。在SW1上执行display port vlan查看端口链路类型和PVID确认没有把Access口错配成Trunk口。在AR1上执行display ip interface brief确认子接口状态为Up。最后用display arp查看路由器能否学到PC1的ARP表项。如果display arp里看到192.168.10.1对应的MAC地址说明ARP已经通了问题在三层如果看不到问题就在ARP环节十有八九是arp broadcast enable没开。这里我多说一句eNSP模拟器对arp broadcast enable的处理和真实设备存在版本差异。有些eNSP版本不开这条命令也能通有些版本必须开而真实AR设备上部分默认开启、部分需要手动开启。最稳妥的做法是配置子接口时无条件加上这条命令并不多余。5.2 症状二PC ping通网关但ping不通对端PC网关通了说明PC到路由器这段链路没有问题问题出在路由器的三层转发或者交换机Trunk放行上。按这个顺序查在AR1上执行display ip routing-table确认有192.168.10.0/24和192.168.20.0/24两条直连路由。子接口配了IP之后直连路由会自动出现如果没出现回去检查子接口IP配置。在SW1上执行display vlan确认GE0/0/1的Trunk口确实放行了VLAN 10和VLAN 20。在PC2上确认网关是192.168.20.254不是192.168.10.254或者空。还有一个小概率问题PC1 ping 192.168.20.1时在PC1上配的网关如果写错了比如写成了192.168.20.254那PC1根本找不到自己的网关数据包会一直发ARP请求但没回应。这种情况我见过新手犯过多次排查时先回头看一眼终端配置。5.3 症状三配置看起来全对但就是不定期丢包如果在eNSP里做大数据量ping比如ping -c 1000 -s 1400偶尔丢一两包这个多半是模拟器的性能问题不是配置问题。eNSP的设备进程受宿主机CPU性能影响很大尤其是AR2220路由器在模拟大量转发时会存在处理延迟。真实设备上如果出现类似症状更需要关注的是单臂路由的带宽瓶颈。所有VLAN间的流量都要挤同一个物理口流量一大拥塞丢包是必然的。这个我会在下一章展开。5.4 用抓包彻底理解数据帧的VLAN Tag变化如果条件允许我在SW1和AR1之间的链路上做一次抓包可以非常直观地看到VLAN Tag的变化。eNSP里可以用WireShark抓Trunk口的报文。PC1 ping PC2时在GE0/0/1这个Trunk口上抓包你会看到从PC1方向来的报文带有VLAN 10的Tag。从路由器回来、发往PC2方向的报文带有VLAN 20的Tag。看到这两种Tag在同一个链路交替出现就说明交换机在给帧打Tag路由器子接口也正确识别并按VLAN重新封装了。这个观察比任何理论解释都更能帮助你形成直觉单臂路由的本质就是在一个物理链路上跑多个VLAN的帧靠Tag进行区分。6. 单臂路由的边界什么项目敢用它什么场景必须换三层实验通了以后很多人会下意识问一句这方案能直接搬到真实项目里吗我的回答是看情况但大部分中大型场景不建议。单臂路由最大的瓶颈在带宽。所有VLAN间通信流量共享路由器的一个物理接口假设物理口是千兆实际转发时既收又发吞吐量理论上只有约50%也就是500Mbps左右。如果你还在这条链路上跑视频会议、大文件传输性能会迅速恶化。再加上AR路由器本身是软件转发CPU要处理解封装、查路由表、再封装负载一高延迟和丢包就上来了。但有些场景它依然很合适。我举几个真实例子小型办公网络。公司总人数不超过50人一台AR路由器、一台二层交换机VLAN间流量集中在OA、邮件这类低带宽应用上单臂路由完全够用成本还低不需要多花几千块升级三层交换机。防火墙单臂接入。不少企业在出口防火墙上做“单臂”部署一个物理口绑定多个子接口连接内部VLAN既能做VLAN间转发又能顺路做安全策略过滤。这在安全领域是常见架构配置逻辑跟今天实验同源。临时链路或灾备。主链路故障时临时用一台路由器做VLAN间转发撑过故障窗口这个场景对性能要求不高胜在部署快。什么场景必须换三层交换机一句话VLAN数量多、流量大的时候。三层交换机的VLANIF接口属于硬件转发吞吐量跟单臂路由不在一个数量级。比如校园网、大型企业园区网一个汇聚交换机下面挂几十个VLAN用单臂路由会直接把路由器打爆。如果你已经掌握了单臂路由再往深走就很简单了。三层交换机的VLANIF配置本质上就是“省掉了子接口封装”的单臂路由逻辑——VLANIF接口天然绑定VLAN不需要dot1q termination不需要arp broadcast enableIP地址直接配在VLANIF上就行。把这两者的配置对比着学网络三层互访的底层思维就打通了。最后分享一个配置习惯。我在eNSP里做这类实验习惯先把所有设备命名好sysname设置清晰这样多台设备联动排查时不会看花眼。另外做完一个阶段配置就及时保存saveeNSP里不保存的话关掉之后所有配置都白做。至于PC终端那边每次启动实验后确认一下IP仍在eNSP偶尔会出现终端配置丢失的情况这是模拟器本身的小毛病重新填一遍就好。单臂路由这个实验虽然基础但它是你理解“二层隔离、三层互访”最直接的一条路径值得花半小时亲手敲一遍。
返回列表