1. 从能通就行到按规矩通跨VLAN通信到底在解决什么很多人第一次接触思科设备做实验心态都是能ping通就万事大吉。我在带新人做综合实验的时候发现一个特别普遍的现象单VLAN内的通信大家做得飞快一旦要求不同部门之间要能互相访问但又要隔离广播立刻就卡住了。这个卡点恰恰就是跨VLAN通信要解决的核心问题。先把场景说清楚。假设一个办公室里有三个部门行政、财务、技术。行政和财务的电脑需要互访共享文件技术部门的开发机需要访问行政的打印机但技术部门内部大量的广播流量比如开发工具自动发现、测试环境的组播又不希望影响到财务的办公网络。如果所有人都在同一个VLAN里广播域就是一个大杂烩任何一台机器的广播包都会泛洪到整个办公室轻则网络变慢重则广播风暴直接瘫痪。所以第一步一定是划分VLAN把广播域切开。但切开的代价是VLAN之间默认是隔离的行政访问不了财务技术也访问不了打印机。这时候就需要三层设备来打通这些被切开的网段。跨VLAN通信的本质就是让三层设备路由器或者三层交换机充当不同VLAN之间的翻译官和邮局——它知道每个VLAN对应哪个网段收到一个VLAN的包之后查路由表重新封装二层帧头转发到目标VLAN。这个实验的价值在于它把VLAN划分、Trunk链路、三层接口、路由转发、ACL访问控制这几个知识点全部串起来了。你单独学VLAN会配单独学路由也会配但综合起来做的时候各种细节就会打架。比如Trunk的native VLAN不匹配导致通信时通时不通比如三层交换机上SVI接口忘了no shutdown比如ACL写反了方向导致该通的没通、不该通的反而通了。这些坑只有真正动手做过综合实验的人才会踩到。这篇文章我会按照一个完整的办公室跨VLAN通信实验来展开从拓扑设计、VLAN规划、Trunk配置、三层转发方案选型到ACL精细化控制再到排错思路全部讲透。适合已经学过CCNA基础、想通过综合实验把知识串起来的同学也适合工作中需要做小型办公网络规划但一直没搞明白VLAN间路由的运维人员。我会尽量把为什么这么配讲清楚而不是只丢一堆命令让你抄。2. 拓扑与地址规划动手之前先把这张表填明白2.1 为什么地址规划比敲命令更重要我见过太多人实验做到一半发现IP冲突、网关写错、VLAN ID对不上然后从头返工。根本原因就是动手前没有把规划表列清楚。网络实验和写代码一样设计阶段花十分钟能省掉后面一小时的排错。所以在打开模拟器之前先把下面这几件事定下来有几个VLAN、每个VLAN的网段是什么、网关地址是多少、哪些设备之间需要Trunk、三层转发用路由器还是三层交换机。这里我给出一个典型的办公室场景规划。三个业务VLAN加一个管理VLAN管理VLAN用来远程登录设备做维护不承载业务流量。VLAN ID名称网段网关地址用途10Admin192.168.10.0/24192.168.10.1行政办公20Finance192.168.20.0/24192.168.20.1财务办公30Tech192.168.30.0/24192.168.30.1技术开发99Manage192.168.99.0/24192.168.99.1设备管理网段选择上有个小经验尽量用/24方便记忆和排错VLAN ID和网段第三段保持一致VLAN10对应10.0网段这样看到IP就知道属于哪个VLAN排查问题时脑子不用来回换算。这个习惯在大型网络里尤其重要我做过一个项目有四十多个VLAN如果ID和网段没有对应关系查故障时简直是灾难。2.2 拓扑结构的选择逻辑拓扑上办公室场景最常见的是接入交换机 核心三层设备的两层结构。接入层放几台二层交换机负责把PC接进来并打上VLAN标签核心层用一台三层交换机或者路由器负责VLAN间路由。为什么推荐三层交换机而不是路由器做单臂路由这是很多人纠结的点。单臂路由Router-on-a-Stick是在路由器的一个物理接口上划子接口每个子接口对应一个VLAN做网关。它的优点是省设备一台路由器就能搞定缺点是所有VLAN间流量都要挤在这一条物理链路上而且路由器靠软件转发性能有限。三层交换机用SVISwitch Virtual Interface做网关靠硬件ASIC转发速度快得多而且每个VLAN都有独立的逻辑接口扩展性更好。我的建议是实验环境两种都值得做一遍理解原理真实办公网络只要预算允许优先三层交换机。下面我以三层交换机方案为主线展开单臂路由作为对比方案在第三节补充。拓扑描述如下一台三层交换机作为核心下联两台二层接入交换机。接入交换机A接行政和财务的PC接入交换机B接技术部门的PC。三层交换机和两台接入交换机之间走Trunk。管理VLAN的网关也在三层交换机上方便统一管理。2.3 接口与链路对照把物理连接和逻辑配置对应起来是避免配错的关键。我习惯在实验前画一张这样的对照表设备接口连接对象链路类型允许VLAN核心三层交换机Gi1/0/1接入交换机ATrunk10,20,99核心三层交换机Gi1/0/2接入交换机BTrunk30,99接入交换机AGi0/1行政PCAccess10接入交换机AGi0/2财务PCAccess20接入交换机BGi0/1技术PCAccess30注意Trunk链路上允许VLAN这一列。核心到接入A的Trunk只放行10、20、99不放行30因为接入A下面根本没有技术部门的设备放行30只会增加不必要的泛洪范围。这个细节很多人忽略觉得Trunk配成switchport trunk allowed vlan all最省事但在真实网络里最小化放行VLAN是一个基本的安全和性能习惯。VLAN剪裁VLAN Pruning说的就是这个事。3. Trunk链路配置那些让通信时通时不通的隐藏细节3.1 Trunk的工作机制与封装协议Trunk链路的核心作用是让一条物理链路承载多个VLAN的流量。它的实现方式是在以太网帧里插入VLAN标签Tag接收方根据标签判断这个帧属于哪个VLAN。这里就涉及封装协议的问题。思科设备上曾经有两种ISLInter-Switch Link思科私有和802.1QIEEE标准。现在ISL基本淘汰了所有新设备默认和推荐都用802.1Q。你在配置时如果看到switchport trunk encapsulation dot1q这条命令说明这台设备的接口支持多种封装需要手动指定较新的设备只支持dot1q这条命令可能敲不进去属于正常现象。802.1Q标签是插在源MAC地址和类型字段之间的4字节字段里面包含12位的VLAN ID所以理论上支持4096个VLAN。但有一个VLAN是特殊的——Native VLAN。Native VLAN上的帧不打标签接收方收到没有标签的帧就默认它属于Native VLAN。这个设计本来是为了兼容不支持VLAN的老设备但也成了很多通信故障的根源。3.2 Native VLAN不匹配最隐蔽的坑我踩过最典型的一次坑是这样的两台交换机之间的Trunk一端Native VLAN是默认的1另一端被我改成了99。结果VLAN 10和20的通信完全正常因为它们的帧都带标签不受影响但管理VLAN 99的流量死活不通。排查了半天才发现一端把99当Native VLAN不打标签发出去另一端收到无标签帧却认为是VLAN 1自然就丢给了错误的VLAN。所以有一条铁律Trunk链路两端的Native VLAN必须一致。我个人的习惯是要么两端都用默认的VLAN 1要么两端都改成一个专门的、不承载业务的VLAN比如999并且这个VLAN不要在Trunk的allowed列表里承载业务流量。改Native VLAN的时候一定要两端同时改改一端等于制造故障。配置命令上设置Native VLAN是interface GigabitEthernet1/0/1 switchport trunk native vlan 999验证的时候用show interfaces trunk重点看两端的Native VLAN列是否一致以及allowed VLAN列表是否符合预期。3.3 Trunk配置的完整命令与验证以核心三层交换机到接入交换机A的Trunk为例完整配置如下interface GigabitEthernet1/0/1 switchport trunk encapsulation dot1q switchport mode trunk switchport trunk native vlan 999 switchport trunk allowed vlan 10,20,99 no shutdown接入交换机A对应接口interface GigabitEthernet0/1 switchport trunk encapsulation dot1q switchport mode trunk switchport trunk native vlan 999 switchport trunk allowed vlan 10,20,99 no shutdown配完之后验证分三步。第一步show interfaces trunk看端口模式和Native VLAN第二步show interfaces trunk看allowed和active的VLAN列表注意active列表里应该包含10、20、99第三步从行政PC ping财务PC的网关确认二层链路和三层接口都正常。提示如果show interfaces trunk里某个VLAN出现在allowed但不在active列表说明该VLAN在Trunk上没有被正确协商或者对端没有这个VLAN。常见原因是VLAN没有在VLAN数据库里创建或者对端Trunk没放行。3.4 接入端口配置与VLAN创建接入交换机上连接PC的端口配成Access模式并划入对应VLANvlan 10 name Admin vlan 20 name Finance vlan 30 name Tech vlan 99 name Manage ! interface GigabitEthernet0/1 switchport mode access switchport access vlan 10 no shutdown这里有个容易忽略的点VLAN必须先创建才能把端口划进去。虽然有些设备在你划端口时会自动创建VLAN但依赖这个行为不是好习惯尤其是在需要给VLAN命名、做统一规划的时候。我建议养成先建VLAN再配端口的顺序。4. 三层转发方案SVI与单臂路由的取舍4.1 SVI方案三层交换机上的虚拟接口SVISwitch Virtual Interface是三层交换机上为每个VLAN创建的一个虚拟三层接口它就是这个VLAN的网关。配置非常直观interface Vlan10 ip address 192.168.10.1 255.255.255.0 no shutdown ! interface Vlan20 ip address 192.168.20.1 255.255.255.0 no shutdown ! interface Vlan30 ip address 192.168.30.1 255.255.255.0 no shutdown ! interface Vlan99 ip address 192.168.99.1 255.255.255.0 no shutdown配完SVI之后还要确保三层交换机开启了路由功能ip routing这条命令是很多新手会漏的。三层交换机默认可能没有开启路由SVI配了地址但设备不转发不同VLAN之间的包结果就是网关能ping通自己但跨VLAN不通。ip routing一敲立刻就好。这个坑我见过至少五次每次都是排查半天才发现少这一条。SVI方案的优势在于每个VLAN一个逻辑接口配置清晰转发靠硬件性能高扩展VLAN时只需新建SVI不影响其他VLAN。缺点是三层交换机成本比普通二层交换机高小规模场景可能有点浪费。4.2 单臂路由方案路由器子接口的玩法如果手头只有路由器和二层交换机那就用单臂路由。原理是在路由器的一个物理接口上创建多个子接口每个子接口对应一个VLAN并封装802.1Q标签interface GigabitEthernet0/0 no shutdown ! interface GigabitEthernet0/0.10 encapsulation dot1Q 10 ip address 192.168.10.1 255.255.255.0 ! interface GigabitEthernet0/0.20 encapsulation dot1Q 20 ip address 192.168.20.1 255.255.255.0 ! interface GigabitEthernet0/0.30 encapsulation dot1Q 30 ip address 192.168.30.1 255.255.255.0物理接口本身不配IP只负责no shutdown。子接口的编号.10、.20只是本地标识和VLAN ID没有强制关系但为了可读性我习惯让子接口号和VLAN ID一致。encapsulation dot1Q 10里的10才是真正对应VLAN的标签。单臂路由的瓶颈很明显所有VLAN间流量都走Gi0/0这一条链路如果VLAN间有大流量比如财务和技术之间传大文件这条链路就是瓶颈。而且路由器转发靠CPU延迟比三层交换机高。所以它适合实验教学和小型网络不适合高负载办公环境。4.3 两种方案的对比与选型建议对比维度SVI三层交换机单臂路由路由器子接口转发性能硬件ASIC高软件转发较低链路瓶颈无背板交换单物理链路配置复杂度简单直观子接口较多时繁琐设备成本较高较低利用现有路由器适用场景中大型办公网络实验、小型网络我的实际经验是如果实验目的是理解VLAN间路由的原理单臂路由必须做一遍因为它把一个物理接口如何承载多个网段这件事暴露得很清楚。但如果是真实部署只要预算够直接上三层交换机省心且性能好。有些场景还可以两者结合核心用三层交换机做主要VLAN间路由边缘用路由器做广域网出口。4.4 验证跨VLAN通信的完整链路配置完成后验证要分层做不要一上来就ping。我的验证顺序是先确认PC的IP、掩码、网关配置正确。网关必须是SVI或子接口的地址。在PC上ping自己的网关确认二层到三层设备这一段通。在三层设备上show ip route确认直连网段都在路由表里。从行政PC ping财务PC确认跨VLAN转发正常。用traceroute看路径确认第一跳是网关。如果第2步就不通问题在接入层或VLAN划分如果第2步通、第4步不通问题在三层转发或路由。这个分层排查思路能帮你快速定位故障域而不是盲目地从头查到尾。5. ACL访问控制让该通的通不该通的别通5.1 为什么跨VLAN通了之后还要做ACL跨VLAN通信配通之后默认是所有VLAN之间全互通。但真实办公场景往往有访问控制需求。比如财务部门的数据敏感只允许行政访问财务的共享服务器不允许技术部门访问技术部门的测试环境只允许内部互访不允许其他部门进来。这时候就需要ACLAccess Control List来做精细化控制。ACL的本质是一组规则按顺序匹配流量匹配到就执行动作permit或deny不匹配就继续往下看最后有一条隐含的deny any。这个隐含deny是很多人的噩梦——你写了一条permit发现其他流量全断了就是因为没写permit的都被隐含规则拒绝了。所以写ACL的最后一条通常要显式放行剩余流量或者确保你的规则覆盖了所有需要放行的场景。5.2 标准ACL与扩展ACL的选择标准ACL只能匹配源IP扩展ACL能匹配源IP、目的IP、协议、端口。做VLAN间访问控制几乎都用扩展ACL因为你需要精确控制谁访问谁的什么服务。举个例子允许行政网段192.168.10.0/24访问财务网段192.168.20.0/24的TCP 445端口文件共享允许技术网段访问行政网段的TCP 9100端口打印机其他跨VLAN流量一律拒绝。ip access-list extended VLAN_CONTROL permit tcp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 445 permit tcp 192.168.30.0 0.0.0.255 192.168.10.0 0.0.0.255 eq 9100 deny ip any any注意这里的通配符掩码wildcard mask0.0.0.255对应/24网段。通配符和子网掩码是反的0表示必须匹配1表示忽略。这个换算新手容易搞混记住0严格1忽略就行。5.3 ACL的应用方向最容易搞反的地方ACL写好了应用到哪里、什么方向是另一个高频错误点。ACL应用在接口上时有in和out两个方向。in是进入接口的流量out是从接口出去的流量。对于VLAN间访问控制我推荐的做法是把ACL应用在源VLAN的SVI的in方向。比如要控制行政访问财务就在Vlan10的SVI上应用ACL的in方向interface Vlan10 ip access-group VLAN_CONTROL in为什么用in而不是out因为in方向在流量进入三层设备时就过滤效率更高而且逻辑清晰——从这个VLAN出来的流量受这些规则约束。如果用out方向应用在目标VLAN的SVI上规则的含义就变成进入这个VLAN的流量受约束容易和源网段搞混。注意ACL应用后原本能通的流量可能立刻断掉。应用前先用show access-lists确认规则顺序应用后立刻测试关键业务是否正常。我习惯在实验环境先应用验证无误再推到生产。5.4 ACL排错的常见误区ACL排错有几个经典误区。第一是规则顺序ACL是从上往下匹配的如果把deny ip any any写在前面后面所有permit都失效。第二是方向搞反明明要控制A到B却应用在了B的in方向结果控制的是B到A。第三是忘了ACL末尾的隐含deny导致只写了permit的流量通其他全断。第四是通配符写错比如把0.0.0.255写成0.0.255.255匹配范围就完全变了。排查ACL问题我一般用show ip access-lists看每条规则的匹配计数。如果某条permit的计数一直是0说明流量根本没匹配到这条规则可能是方向错了或者前面的规则拦截了。如果deny的计数很高说明有大量流量被拒绝需要确认这是否符合预期。6. 综合排错实录一次跨VLAN不通的完整排查链路6.1 故障现象描述配置全部完成后行政PC能ping通自己的网关财务PC也能ping通自己的网关但行政PC ping财务PC不通。三层交换机上show ip route能看到10.0和20.0两个直连网段。ACL已经临时移除排除访问控制因素。6.2 分层排查过程第一步确认PC配置。检查行政PC的IP是192.168.10.10/24网关192.168.10.1财务PC是192.168.20.10/24网关192.168.20.1。配置无误。第二步确认二层连通性。在接入交换机A上show mac address-table能看到行政PC的MAC在VLAN10财务PC的MAC在VLAN20。Trunk链路上show interfaces trunk显示VLAN10、20都是active。二层没问题。第三步确认三层接口状态。在三层交换机上show ip interface brief发现Vlan10和Vlan20都是up/up地址正确。ip routing也确认开启了。第四步检查ARP。在三层交换机上show arp发现只有Vlan10的ARP条目没有Vlan20的。这说明三层交换机没有学到财务PC的MAC。但财务PC能ping通网关说明ARP应该是通的。再仔细看财务PC ping网关时网关回复了但网关的ARP表里应该有财务PC的条目才对。第五步回到财务PCarp -a查看ARP缓存发现网关的MAC地址是对的。那问题在哪重新在三层交换机上show arp这次看仔细了Vlan20的ARP条目其实有但对应的接口显示的是Vlan20。等等那为什么行政ping财务不通第六步在行政PC上traceroute财务PC发现第一跳到了网关192.168.10.1然后就超时了。说明包到了三层交换机但没转发出去。这时候我想起来检查ACL——虽然我说移除了但只是删了Vlan10上的应用Vlan20的SVI上可能还有残留。show ip interface Vlan20一看果然有一个之前测试用的ip access-group还挂着方向是in把从Vlan20进来的回包给拦了。6.3 根因与修复根因是Vlan20的SVI上残留了一个测试ACL方向in拦截了财务PC发往行政PC的回程流量。删除该应用后通信恢复interface Vlan20 no ip access-group TEST_ACL in这个案例的教训是ACL的清理要彻底不能只删一处。而且排查时要养成看接口完整配置的习惯show running-config interface Vlan20比只看IP地址能发现更多隐藏配置。6.4 举一反三其他常见故障点除了ACL残留跨VLAN不通还有几个高频原因。一是Trunk的allowed VLAN列表漏了某个VLAN导致该VLAN流量无法通过Trunk。二是Native VLAN不匹配影响无标签流量。三是SVI没no shutdown接口处于down状态。四是ip routing没开三层交换机不转发。五是PC网关配错指向了不存在的地址。六是VLAN没在VLAN数据库创建端口划不进去。我建议把这张排查清单贴在实验台旁边遇到问题按顺序过一遍比盲目试错高效得多。排查项检查命令正常表现VLAN创建show vlan brief目标VLAN存在且端口正确Trunk状态show interfaces trunk目标VLAN在active列表SVI状态show ip interface briefup/up且有正确IP路由开启show ip route直连网段存在ACL应用show ip interface无意外ACL挂载ARP学习show arp有对端ARP条目7. 从实验到落地几个让配置更稳的个人习惯7.1 配置顺序与保存策略做网络实验配置顺序很重要。我的习惯是先建VLAN再配Access端口再配Trunk再配SVI和路由最后配ACL。这个顺序符合先二层后三层、先通后控的逻辑每完成一步就验证一步避免错误累积。保存配置这件事实验环境里很多人不重视觉得重启就重启。但真实设备上配完不保存一次断电就全没了。思科设备用write memory或copy running-config startup-config保存。我建议每完成一个逻辑模块就保存一次而不是全部配完再存这样即使后面配错了也能回退到上一个正常状态。7.2 用注释和命名让配置可读配置里加注释是个好习惯。思科设备用!开头加说明! VLAN 10 Admin Network interface Vlan10 ip address 192.168.10.1 255.255.255.0VLAN命名也要规范name Admin比默认的VLAN0010可读性强太多。接口描述description也别省interface GigabitEthernet1/0/1 description Trunk-to-AccessSwitchA这些细节在单人实验时看似多余但在多人协作或者几个月后回看配置时能救命。7.3 实验环境与真实环境的差异提醒最后说一个心态问题。实验环境里拓扑简单、流量小、没有历史包袱配置一次就通。但真实办公网络往往有历史遗留配置、多厂商设备混用、VLAN规划混乱等问题。把实验做通只是第一步真正考验人的是在复杂环境中定位问题、在不影响业务的前提下做变更。我的建议是实验阶段就养成变更前备份、变更后验证、出问题能回退的习惯。真实环境里任何配置变更前先show running-config备份一份变更后立刻测试关键业务发现问题马上回退。这个习惯比任何技术细节都重要。跨VLAN通信这个实验表面上是配几个VLAN、几个SVI、几条ACL实际上练的是网络设计的整体思维怎么划分广播域、怎么规划地址、怎么选三层方案、怎么做访问控制、怎么分层排错。把这些串起来你才算真正理解了VLAN间路由这件事。