资讯动态

VLAN、Trunk与单臂路由:原理、配置与实战排错

发布时间:2026/10/19 10:39:53 来源:尧图企业网站定制
系列第五篇安排上了。前几篇把IP地址、子网划分、交换机转发和路由基础都过了一遍这次聊聊VLAN、Trunk和单臂路由。这三个词放在一起就是公司局域网里“房间怎么隔、走廊怎么走、跨区怎么串门”的全部秘密。我这周刚用这套内容给女朋友讲完她最后给我的反馈是“原来交换机不是一整块大板子而是被切成了好多层公寓。”这个理解基本到位了。这篇文章的目标很简单看完之后你能给身边的人讲清楚几件事——为什么财务部的共享文件夹你死活打不开为什么同一个交换机下面还能同时跑好几个互不干扰的网络以及两个VLAN之间真的需要互通时单臂路由是怎么用一条物理线路硬生生挤出三条路的。适合刚接触网络、对VLAN一直似懂非懂的朋友也适合想找一套通俗讲法去教别人的同学。尤其这次我不打算只画概念图还会把手上的模拟器实验环境重新搭一遍把实际配置命令、踩过的坑、排查思路全部写在下面。你跟着敲一遍比背十遍书管用。1. 先想明白VLAN到底在解决什么问题1.1 没有VLAN的时候一个大广播域有多乱我们想象一个很小规模的办公场景一层楼、一台交换机、三十台电脑、打印机和服务器都接在这台交换机上。这个网络从二层看就是一个“大平层”所有端口都在同一个广播域里。在这个环境里任何一台电脑发出一个ARP广播交换机就得把这个帧从除了入端口以外的所有端口转发出去。三十台终端的时候你没什么感觉三百台呢三千台呢广播帧会像微信群里的“收到请回复”一样层层扩散大家都别想好好干活。更麻烦的是安全问题。同一个广播域意味着所有终端在二层是互通的只要有人抓包很多明文协议的数据直接裸奔万一哪台机器中了ARP欺骗之类的病毒影响范围就是整个广播域。出了故障排查也痛苦你根本不知道一个广播风暴是从哪儿冒出来的只能一台一台拔网线试。所以VLANVirtual Local Area Network虚拟局域网最核心的价值就一句话把一个大二层网络切成多个小二层网络广播域被隔离了问题范围也被圈住了。1.2 给女朋友的通俗版本从大通铺到独立单间我给她讲的时候用了这么个类比没有VLAN的交换机就像一个大通铺所有人都睡在一个房间里谁半夜咳嗽一声全屋人都听得见。VLAN就是把这个通铺用隔板分成一个个单间左边房间的人聊天右边房间的人完全听不见。这个比喻虽然糙但点到本质了。VLAN工作在二层它不关心这屋里住的是谁只关心你属于哪个隔间。同一台交换机上可以同时存在VLAN 10、VLAN 20、VLAN 30它们各自转发各自的广播帧互不干扰。从二层角度看一台交换机被虚拟成了好几台逻辑交换机。为什么说“虚拟”因为物理上它们仍然共用同一个硬件设备、同一个背板带宽但在数据转发层面VLAN 10的广播绝对不会跑到VLAN 20的端口上去。这就解决了广播泛滥、安全隔离、故障影响范围控制这三个最实际的问题。1.3 VLAN划分方式与编号范围VLAN的划分方式不止一种。最常见的是基于端口划分也就是把一个物理端口静态地划到某个VLAN里你插在这个口上就是VLAN 10的人。这种方式简单可靠运维起来也直观缺点是一旦换了座位就得改配置。另一种是基于MAC地址划分适合经常移动办公的场景电脑插到哪个口都自动归属到对应的VLAN。麻烦在于每台设备都要维护MAC和VLAN的绑定关系设备一多管理量就上去了。还有基于IP子网划分、基于协议划分的日常用得相对少。VLAN ID的范围也要清楚。标准范围是1到4094其中VLAN 1是默认VLAN所有端口初始都在这里面而且默认情况下不能删除。0和4095属于保留值协议规定用来表示“无VLAN”或特殊用途不要碰。实际项目中从合规和习惯的角度绝大多数人只在100到100这个范围附近规划比如VLAN 10给办公、VLAN 20给服务器、VLAN 30给无线一眼就能看懂。2. Trunk一条链路上怎么跑多个VLAN2.1 Access口和Trunk口差在哪VLAN分好之后下一个问题就来了如果交换机A上有VLAN 10和VLAN 20交换机B上也有VLAN 10和VLAN 20两台交换机之间怎么传数据最简单粗暴的办法是拉两根线一根专门跑VLAN 10一根专门跑VLAN 20。VLAN一多呢VLAN 10、20、30、40……总不能拉十根线吧端口不够用成本也扛不住。Access口和Trunk口的区别本质上就在“这根线上能不能同时跑多个VLAN”。Access口是“专属车道”只属于一个VLAN从这个口进去的帧不带任何VLAN标签交换机会悄悄给它打上这个口的PVID作为内部标识。所以Access口一般用来接终端设备比如电脑、打印机因为终端不太关心VLAN标签这回事。Trunk口是“公共走廊”默认情况下允许所有VLAN通过也可以配置只放行指定几个VLAN。进出Trunk口的帧会带着VLAN标签这样对端交换机才能知道这个帧属于哪个VLAN再根据标签把它送进对应的VLAN里。我给女朋友打的比方是这样Access口就像小区单元门回自己家直接就进了Trunk口就像小区主干道每辆车上都贴着“去几号楼”的标签到了门禁那儿保安一看标签就知道该放行还是拦下。2.2 802.1Q是怎么给帧贴门牌号的Trunk口能同时跑多个VLAN靠的是在以太网帧里插入一个VLAN标签。这个标准叫IEEE 802.1Q几乎所有主流网络设备都支持。802.1Q标签一共4个字节插在以太网帧的源MAC地址和类型字段之间。里面包含两部分前2个字节是TPIDTag Protocol Identifier固定值是0x8100用来告诉接收方“这个帧带标签”后2个字节是TCITag Control Information其中低12位就是VIDVLAN ID也就是VLAN编号。12位二进制能表示0到4095所以VLAN ID理论上最多4096个去掉保留值就是1到4094可用。这个标签本质上就是快递包裹上的门牌号。交换机在处理带标签帧的时候先看标签上的VID是多少再决定这个帧该从哪些端口转发出去。如果出端口是Access口交换机还得把标签剥掉因为终端设备认不出这玩意儿如果出端口是Trunk口标签就保留继续往下传。一句话记住标签只在Trunk链路上存在Access口出入的都是无标签帧。2.3 Trunk配置命令一步步来直接上一个配置片段以主流厂商命令行风格为例具体关键字可能因为设备厂商不同略有差异但思路完全一致# 在交换机上创建VLAN 10和VLAN 20 vlan batch 10 20 # 把连接PC的口划入对应VLAN这里假设G0/0/1接VLAN 10的电脑G0/0/2接VLAN 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 # 上联口配置成Trunk并放行VLAN 10和VLAN 20 interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20几个容易被忽略的细节第一创建VLAN的时候多VLAN可以一起建比如vlan batch 10 20比一个一个敲命令省事多了。如果用的真实设备或模拟器不支持batch关键字那就拆成vlan 10和vlan 20分别进入视图创建。第二Access口的port default vlan 10决定了这个端口收到的无标签帧会被划分到哪个VLAN。终端发出的普通以太网帧不带标签交换机必须给它“分房”这个命令就是这个作用。第三Trunk口的allow-pass vlan 10 20是白名单。哪怕Trunk默认允许所有VLAN通过稳妥起见还是要显式写清楚放行哪些VLAN。这样以后不小心在交换机上建了个VLAN 99垃圾广播也不会莫名其妙串到不该去的地方。配置完之后在交换机上敲一条display vlan就能看到VLAN 10和VLAN 20都已经建好端口也都在对应VLAN下面了。2.4 PVID和Native VLAN最容易翻车的地方很多人学会Trunk配置之后栽在了PVID和Native VLAN上。PVIDPort-base VLAN ID是端口默认的VLAN ID。Access口的PVID就是它所属的那个VLAN很好理解。Trunk口也有PVID默认是VLAN 1。关键坑点在这Trunk口收到无标签帧时会把这些帧当成PVID对应的VLAN来处理。也就是说如果Trunk口的PVID是VLAN 1那任何无标签帧都会被划分进VLAN 1。而在802.1Q标准里这个PVID对应的VLAN叫做Native VLAN交换机通常约定Native VLAN的帧在Trunk链路上是不打标签的。这会带来一个很经典的问题两端Trunk的PVID如果不一致无标签帧到了对端可能就“回错家”了。比如A交换机Trunk口PVID是VLAN 1B交换机Trunk口PVID是VLAN 2A发过来的无标签帧在B那儿会被当成VLAN 2的帧往VLAN 2的端口里乱送。排查起来一查一个不吱声。另外还有管理VLAN的问题。很多人习惯把设备管理地址放在VLAN 1里面而VLAN 1恰好又是默认Native VLAN意味着管理流量可能在Trunk链路上裸奔。加上无标签帧默认进VLAN 1万一有人恶意发无标签帧管理平面很容易被攻击。所以稍微正规一点的网络规划都会把Native VLAN改成100、999这种专门的VLAN甚至直接把它禁掉。我给一条实用检查顺序配置Trunk先看允许列表再看两端PVID。允许列表不对数据通不了PVID不一致数据会“通错地方”。两个问题表面现象都可能是“ping不通”但排查路径完全不同。3. 单臂路由VLAN之间怎么“串门”3.1 为什么VLAN建好了还是ping不通VLAN把广播域隔开了这是安全也是代价。两个不同VLAN之间的终端二层上彻底隔离默认情况下永远互相ping不通。为什么我们回想一下通信流程。PC-A在VLAN 10想访问VLAN 20的PC-B它只知道目标IP是192.168.20.0网段的。根据路由规则PC-A发现目标不在自己这个网段就会把数据包扔给网关处理。但网关在哪如果网关配置在VLAN 10内部那它只能处理VLAN 10的流量它怎么知道VLAN 20还有哪些主机VLAN 10的广播又到不了VLAN 20ARP请求根本扩散不过去。所以跨VLAN通信必须有一个三层设备介入由它来充当“翻译”和“转信人”。路由器天然适合干这个活因为它工作在三层不看VLAN标签只看IP路由表。这也是单臂路由登场的核心原因。还要强调一点VLAN之间是二层隔离不是三路不通。只要配置了网关和路由三层通信是可以恢复的。VLAN提供的隔离是“可控的隔离”而不是“彻底的断绝”这个设计初衷非常重要。3.2 子接口与802.1Q终结原理一次讲透单臂路由英文叫Router-on-a-Stick意思就是路由器只有一条“胳膊”伸到交换机上靠这一条物理链路完成所有VLAN的进进出出。路由器的物理接口本身不认识VLAN标签它收到带标签的帧通常直接丢弃。解决办法是把物理接口划分成多个逻辑子接口比如GigabitEthernet0/0/0.10和GigabitEthernet0/0/0.20每个子接口绑定一个VLAN并启用802.1Q封装终结。“终结”这个词可以这么理解路由器在子接口上看到带VLAN 10标签的帧就把它认定为VLAN 10流量剥掉标签转给三层的路由处理需要发往VLAN 10的流量则从对应子接口发出重新打上VLAN 10标签。每个子接口只处理自己绑定VLAN的帧互不干扰。配好之后PC-A发往网关192.168.10.254的帧经过交换机Trunk口打上VLAN 10标签送到路由器的G0/0/0.10子接口路由器剥标签、查路由表发现目标网段是192.168.20.0/24于是交给G0/0/0.20子接口重新打上VLAN 20标签再通过Trunk链路回到交换机交换机一看标签是VLAN 20就只往VLAN 20的端口转发。整个过程一气呵成。3.3 从零开始的完整配置流程搭一个最简单的实验拓扑一台路由器R1一台交换机SW1两台PCPC1在VLAN 10PC2在VLAN 20。规划如下设备接口IP地址所属VLAN路由器R1G0/0/0.10192.168.10.254/24VLAN 10路由器R1G0/0/0.20192.168.20.254/24VLAN 20PC1网卡192.168.10.1/24网关192.168.10.254VLAN 10PC2网卡192.168.20.1/24网关192.168.20.254VLAN 20交换机的配置已经在上文给过一部分这里把完整流程走一遍。第一步交换机上创建VLAN并划分端口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第二步路由器上创建子接口并配置IPinterface 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这里有一个高频翻车点很多设备默认情况下子接口不处理广播ARP报文导致终端发出来的ARP请求没人应答网关“假死”。必须加上arp broadcast enable这类命令让子接口响应ARP广播。第三部配置好之后在PC1上ping PC2的IP如果通说明VLAN间路由已经生效。在路由器上敲display ip interface brief能看到子接口IP地址为UP状态。有个小技巧如果ping不通先分别ping两边的网关地址用“能通到哪一跳”来缩小故障范围。比如PC1能ping通192.168.10.254但ping不动192.168.20.254问题大概率在路由器子接口20的封装或IP配置上。3.4 单臂路由的瓶颈和更好的方案单臂路由原理简单、配置不复杂但它有一个没法回避的短板所有跨VLAN流量都要挤在一条物理链路上进出。想象一下公司一栋楼所有跨部门的流量都从一扇小门进进出出这扇门再宽也是有限的。如果这条Trunk链路是100Mbps那所有VLAN间流量共享这100MbpsVLAN多、流量大的时候瓶颈非常明显。而且单臂路由要路由器CPU参与每个包的封装、解封装和路由转发数据量一大CPU占用率也会很吓人。所以现实项目里单臂路由更多出现在小规模网络、实验环境、或者手头只有一台路由器的应急场景。大多数公司会用三层交换机替代。三层交换机可以在交换机内部直接完成VLAN间路由不用把流量导出去绕一圈。具体就是给VLAN配置一个VLANIF接口比如interface Vlanif 10相当于给这个VLAN配了一个逻辑三层接口IP地址就是网关。数据包在交换机内部查表转发速度比“从交换机到路由器再绕回来”快得多。如果你在设计一个稍具规模的网络我的建议是先问清楚业务上要不要跨VLAN通信要的话优先考虑三层交换机方案单臂路由留着做备份链路或小型分支。4. 用模拟器做实验顺便把坑全踩一遍4.1 一个能复现所有问题的实验环境学网络最忌讳只看不练。哪怕前面理论知识背得再熟配置命令敲错一个字母设备状态就完全不一样。我在家里电脑上一直用一套图形化网络模拟器方便搭拓扑、抓包、验证配置尤其是做这种多设备联调实验比真机省心多了。你手边只要有类似的模拟环境就能完整复现下面的实验。实验拓扑很简单一台路由器一台交换机两台PC。路由器的G0/0/0口接到交换机的G0/0/24口交换机的G0/0/1接PC1G0/0/2接PC2。PC1划入VLAN 10PC2划入VLAN 20路由器上用两个子接口分别对应VLAN 10和VLAN 20实现两边网关互通。模拟器和真机的区别之一是模拟器网络里没有其他乱七八糟的干扰排错相对干净。但还是那句话命令思路和真机完全一样你在模拟器上练熟的步骤到真机上无非是换换接口名和端口编号。4.2 从零开始验证一次完整配置先给两台PC配好IP、掩码和网关具体参照上文规划表。然后按顺序配置。由于交换机的配置前面已经写过这里把重点放在可能被忽略的点上。给PC配置地址的时候别忘了把网关填上。很多人只填IP和掩码忘了网关结果同VLAN能通跨VLAN永远不通还怀疑是路由器问题。网关就是终端设备的三层出口没有它什么都出不去。配置路由器的物理接口之前有些平台需要先把物理口在二层模式下启用再创建子接口。你别一上来就进子接口配IP配了半天发现物理口是shutdown的流量根本进不来。在模拟器中路由器接口默认是开启的但真机上你可不要想当然。配置完成后做一个验证分别在两台PC上ping对端地址同时在交换机上抓包看看。会看到PC1发出目的MAC为网关MAC的帧交换机给它打上VLAN 10标签通过Trunk口送到路由器路由器返回时带的是VLAN 20标签交换机剥掉标签后只往属于VLAN 20的端口转发。这个过程在抓包里看得清清楚楚比背十遍原理都管用。4.3 常见故障排查速查表我在实际配置过程中反复遇到的主要就是下面这几个问题整理成表格方便你直接对照现象可能原因处理方法同VLAN的两台PC互相ping不通端口没划到同一VLAN或Access口PVID配错用display vlan查看端口归属把端口划到正确的VLAN同VLAN能通跨VLAN不通路由器子接口没启用802.1Q终结或IP地址配置错误检查子接口的dot1q termination vid和IP地址确认网关IP一致跨VLAN偶尔通一会又断子接口没开ARP广播响应给子接口加arp broadcast enablePC能ping通网关但ping不通对端VLAN主机对端VLAN的子接口封装或IP有问题在对端子接口上检查VID和IP用display ip interface brief看状态配置后整个网络全断Trunk允许列表漏了VLAN或Trunk PVID两端不一致核对port trunk allow-pass vlan并检查两端Trunk口PVID是否一致交换机上display vlan显示端口不对命令输错端口号或遗漏配置重新进入对应接口检查port default vlan这张表里的前四条基本就是单臂路由实验里百分之九十的问题。特别是arp broadcast enable这一条我在不止一台设备上栽过跟头。不同厂商对这个命令的默认行为不一样有的默认开有的默认关你在哪家设备上做实验必须去确认这个开关状态。4.4 实战排错心得先画图再做减法跟你们分享一个我自己的排错习惯。遇到网络不通不要急着改配置先把拓扑图画出来把每一跳写清楚。比如PC1到PC2中间要经过哪些接口、哪些VLAN标签变化、哪些网关地址然后按这个链路一层一层去ping。如果PC1能ping通自己的网关说明从PC1到路由器的Trunk链路和子接口10都没问题问题大概率在路由器发往VLAN 20的那一段。继续ping路由器子接口20的地址如果通说明路由器到VLAN 20的封装OK那就只剩PC2自己的网关或IP问题了。这就是一个标准的“二分法排错”每次只查一半的范围很快就能定位。另外做实验的时候每改一个配置第一时间保存配置文件。模拟器里不保存重启就回到解放前你会怀疑自己是不是没配成功白白浪费半小时。真机上就更不用说了一条save命令不花多少时间养成习惯反而省时间。建议把整个网络的配置导出一份做备份尤其是给甲方交付或者给别人做实验的时候配置记录有时候比拓扑图还值钱。最后说点我自己的体会。这个系列写到现在收获最大的其实是我自己。以前讲VLAN我只会背“广播域隔离”这个概念真要我用三句话给一个完全不懂的人讲明白反而卡住了。为了给女朋友讲清楚Trunk和单臂路由我在模拟器里来回拆建了好几遍很多以前模棱两可的细节是被这个讲解过程硬逼着搞明白的。所以我也建议你学网络别死磕理论找一个人当你的“女朋友”试着把一个知识点从头到尾讲一遍。讲得通说明你真懂了讲不通的地方就是你下次还要去翻书和抓包的地方。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑