首页 / 资讯中心 / 文章详情

跨交换机VLAN配置实战:Trunk链路、802.1Q封装与常见故障排查

跨交换机VLAN配置实战:Trunk链路、802.1Q封装与常见故障排查 ★ FEATURED ARTICLE
1. 跨交换机VLAN配置到底在解决什么问题很多刚接触网络设备的朋友第一次听到“跨交换机划分VLAN”这个词脑子里冒出来的第一个疑问往往是我单台交换机上划VLAN已经玩明白了为什么还要折腾跨交换机这不是自找麻烦吗其实这个问题的答案特别朴素——因为现实中的网络从来不会只有一台交换机。你随便走进一个稍微像样点的办公场所少则三五台接入交换机多则几十台堆在弱电间里。如果VLAN只能在单台设备上生效那每台交换机上的VLAN就是一座孤岛财务部在A交换机上的VLAN 10和财务部在B交换机上的VLAN 10根本通不了这显然不符合实际需求。跨交换机VLAN配置要解决的核心问题就一个让同一个VLAN的广播域能够跨越物理设备的边界同时保持不同VLAN之间的隔离。听起来简单但这里面涉及到的知识点相当密集——Trunk链路的协商、Native VLAN的处理、VLAN标签的封装与剥离、生成树协议对Trunk的影响每一个环节出问题都会导致“明明配置看起来没问题但就是不通”的尴尬局面。这篇文章适合谁看如果你已经掌握了单台交换机上创建VLAN、划分端口的基础操作但对Trunk链路、802.1Q封装、跨设备VLAN通信这些概念还处于“好像知道又好像不知道”的状态那这篇内容就是为你准备的。我会从设计思路开始拆然后一步步带你走完整个配置流程最后把我在实际项目中踩过的坑和排查经验都倒出来。需要说明的是不同厂商的交换机在命令语法上有差异但底层逻辑是相通的。我会以业界最常见的命令行风格来演示你理解了原理之后迁移到其他平台只是查一下命令手册的事。2. 整体设计思路与方案选型2.1 为什么是Trunk而不是Access跨交换机要实现VLAN互通最核心的决策就是两台交换机之间的互联链路用什么模式答案几乎没有悬念——Trunk。但我想把“为什么”讲透因为很多人是背下来的不是理解的。Access端口的行为逻辑是收到不带标签的帧打上本端口PVID的标签发送时把标签剥掉再发出去。也就是说Access端口只认一个VLAN它天生就是给终端设备用的。Trunk端口的行为逻辑完全不同它默认可以承载多个VLAN的流量发送帧的时候除了Native VLAN默认VLAN 1的帧不打标签其他VLAN的帧都带着802.1Q标签发出去。接收的时候如果帧带了标签就看标签里的VLAN ID决定放行还是丢弃如果帧不带标签就归到Native VLAN里。所以两台交换机之间的链路必须是Trunk这样A交换机上VLAN 10的帧带着标签传到B交换机B交换机一看标签是10就知道该把这个帧转发给本机VLAN 10的端口。整个过程就像贴了快递面单的包裹面单上写着“VLAN 10”对面分拣中心一看就知道往哪个区域送。2.2 802.1Q标签到底长什么样既然Trunk靠标签来区分VLAN那这个标签到底是怎么插进以太网帧里的这个问题值得花点篇幅说清楚因为理解了帧结构后面排查问题的时候你才能有的放矢。标准的以太网帧在源MAC地址和类型字段之间802.1Q协议插入了4个字节的标签字段。这4个字节里包含TPID标签协议标识符2字节固定值0x8100用来告诉接收方“这是一个带标签的帧”PCP优先级代码点3位用于QoS优先级标记DEI丢弃 eligible 指示符1位用于拥塞时的丢弃决策VIDVLAN标识符12位取值范围0-4095其中0和4095保留实际可用范围是1-409412位的VID意味着理论上最多支持4094个VLAN这个数字在绝大多数场景下都够用了。但要注意某些厂商的交换机默认只允许创建一定数量的VLAN比如某些低端型号可能只支持64个或256个这个在选型的时候要留意。2.3 Native VLAN的设计考量Native VLAN是Trunk链路上一个容易被忽视但又特别容易出问题的概念。它的定义是Trunk端口上不打标签的那个VLAN。为什么要有Native VLAN历史原因是为了兼容不支持802.1Q的老设备。当Trunk端口收到一个不带标签的帧时它会把这个帧归入Native VLAN。默认情况下Native VLAN是VLAN 1。在实际项目中我强烈建议把Native VLAN改成一个不用的VLAN比如VLAN 999。原因有两个第一安全考虑避免VLAN 1上的流量被意外泄露到其他VLAN第二避免VLAN跳跃攻击。这个习惯我从入行第二年就开始坚持后面确实帮我省了不少事。还有一个铁律Trunk链路两端的Native VLAN必须一致。如果一端是VLAN 1另一端是VLAN 999那不带标签的帧就会从一端的一个VLAN跑到另一端的另一个VLAN里去造成莫名其妙的通信故障。这种问题排查起来特别费劲因为配置看起来都“没问题”。2.4 允许VLAN列表的精细控制Trunk端口默认允许所有VLAN通过但这个默认行为在生产环境中并不理想。想象一下你在一台交换机上创建了20个VLAN但两台交换机之间只需要传递其中5个VLAN的流量如果允许全部通过那另外15个VLAN的广播帧也会白白占用带宽。所以正确的做法是在Trunk端口上显式配置允许通过的VLAN列表。比如interface GigabitEthernet0/1 switchport mode trunk switchport trunk allowed vlan 10,20,30,99这样只有VLAN 10、20、30和99的流量能通过这条Trunk链路其他VLAN的帧会被丢弃。这不仅节省带宽也缩小了广播域的范围提升了网络的安全性和可控性。2.5 方案对比单臂路由 vs 三层交换跨交换机VLAN配置本身只解决二层互通的问题但实际项目中往往还需要VLAN间通信。这时候有两种主流方案对比维度单臂路由三层交换实现方式路由器一个物理口划多个子接口三层交换机上配置SVI转发性能受限于路由器CPU较低硬件ASIC转发极高适用场景小型网络VLAN间流量小中大型网络VLAN间流量大配置复杂度中等较低成本需要路由器需要三层交换机我的经验是如果VLAN间流量不大比如只是偶尔跨部门传个文件单臂路由够用但如果是数据中心或大型园区网三层交换是唯一选择。不过这是另一个话题了本文重点还是放在二层跨交换机VLAN互通上。3. 核心配置细节与实操要点3.1 实验拓扑设计与地址规划在动手之前先把拓扑和地址规划清楚。我见过太多人上来就敲命令敲到一半发现VLAN ID冲突了、IP地址段重叠了又得推倒重来。假设我们有一个典型的办公场景两台接入交换机SW1和SW2通过一条Trunk链路互联每台交换机下挂两台PC分属不同的VLAN。拓扑结构SW1的G0/1口连接PC1VLAN 10G0/2口连接PC2VLAN 20SW2的G0/1口连接PC3VLAN 10G0/2口连接PC4VLAN 20SW1的G0/24口与SW2的G0/24口互联配置为TrunkVLAN与地址规划设备接口VLANIP地址子网掩码PC1网卡10192.168.10.1255.255.255.0PC2网卡20192.168.20.1255.255.255.0PC3网卡10192.168.10.2255.255.255.0PC4网卡20192.168.20.2255.255.255.0这个规划的核心逻辑是同一个VLAN的PC必须在同一个网段不同VLAN的PC必须在不同网段。PC1和PC3都是VLAN 10所以它们用192.168.10.0/24网段PC2和PC4都是VLAN 20用192.168.20.0/24网段。注意这里假设没有三层设备做VLAN间路由所以VLAN 10和VLAN 20之间是不通的。这是正常的二层交换本身不负责VLAN间通信。3.2 交换机基础配置VLAN创建与Access端口划分先搞定两台交换机的基础配置。这部分在单台交换机上划VLAN的时候已经做过但跨交换机场景下有几个细节需要特别注意。SW1的配置enable configure terminal hostname SW1 ! 创建VLAN vlan 10 name Finance vlan 20 name HR vlan 99 name Native_VLAN exit ! 配置Access端口 interface GigabitEthernet0/1 switchport mode access switchport access vlan 10 no shutdown exit interface GigabitEthernet0/2 switchport mode access switchport access vlan 20 no shutdown exitSW2的配置enable configure terminal hostname SW2 ! 创建VLAN注意VLAN ID和名称要与SW1保持一致 vlan 10 name Finance vlan 20 name HR vlan 99 name Native_VLAN exit ! 配置Access端口 interface GigabitEthernet0/1 switchport mode access switchport access vlan 10 no shutdown exit interface GigabitEthernet0/2 switchport mode access switchport access vlan 20 no shutdown exit这里有一个容易被忽略的点两台交换机上的VLAN数据库必须一致。如果SW1上有VLAN 10、20、99SW2上只有VLAN 10和20那Trunk链路上VLAN 99的流量到了SW2就会被丢弃。虽然VLAN 99只是作为Native VLAN使用不承载业务流量但为了保持一致性还是建议在两端都创建。另外VLAN的名称name字段在功能上不影响通信但强烈建议保持一致。当你在大型网络中管理几十台交换机时看到VLAN 10叫“Finance”还是叫“VLAN0010”排查问题时的效率完全不一样。3.3 Trunk链路配置核心中的核心Trunk配置是跨交换机VLAN互通的关键这里我把每一步的意图都讲清楚。SW1的Trunk配置interface GigabitEthernet0/24 switchport trunk encapsulation dot1q switchport mode trunk switchport trunk native vlan 99 switchport trunk allowed vlan 10,20,99 no shutdown exitSW2的Trunk配置interface GigabitEthernet0/24 switchport trunk encapsulation dot1q switchport mode trunk switchport trunk native vlan 99 switchport trunk allowed vlan 10,20,99 no shutdown exit逐条解释这些命令的意图switchport trunk encapsulation dot1q——指定Trunk封装协议为802.1Q。有些交换机默认就是dot1q但有些老型号可能默认是ISL思科私有协议所以显式指定一下更稳妥。如果你的交换机不支持这条命令说明它只支持dot1q跳过即可。switchport mode trunk——把端口模式设为Trunk。这条命令是核心它告诉交换机“这个口要承载多个VLAN的流量发帧的时候记得打标签。”switchport trunk native vlan 99——把Native VLAN从默认的VLAN 1改成VLAN 99。前面说过这是为了安全和避免VLAN跳跃攻击。switchport trunk allowed vlan 10,20,99——只允许VLAN 10、20、99通过。注意这里必须包含Native VLAN 99否则Native VLAN的流量会被过滤掉导致一些控制协议如CDP、STP的报文无法正常传输。实操心得配置完Trunk之后一定要用show interfaces trunk命令确认一下。重点看三个地方Mode是不是“on”或“trunk”Native VLAN是不是99Allowed VLAN列表里有没有你需要的VLAN。我见过好几次因为Allowed VLAN列表漏了某个VLAN导致业务不通的情况。3.4 验证配置从PC端到交换机端的完整检查配置敲完了不代表就通了必须做完整的验证。我习惯按照“从下到上、从近到远”的顺序来检查。第一步检查PC的IP配置在PC1上确认IP地址是192.168.10.1/24PC3是192.168.10.2/24。这个不用多说但确实有人在这里翻车——IP地址配错了网段然后怪交换机有问题。第二步检查交换机的VLAN和端口状态! 在SW1上执行 show vlan brief ! 输出应该能看到VLAN 10、20、99以及G0/1在VLAN 10里G0/2在VLAN 20里 show interfaces status ! 确认G0/1、G0/2、G0/24都是connected状态第三步检查Trunk状态show interfaces trunk ! 关键输出解读 ! Mode: on 表示Trunk已经建立 ! Encapsulation: 802.1q 表示封装协议正确 ! Native vlan: 99 表示Native VLAN配置正确 ! Vlans allowed: 10,20,99 表示允许列表正确 ! Vlans allowed and active: 10,20,99 表示这些VLAN在VLAN数据库中存在且已激活如果Vlans allowed and active里少了某个VLAN说明那个VLAN没有在VLAN数据库里创建或者被shutdown了。第四步PC间ping测试从PC1192.168.10.1ping PC3192.168.10.2应该能通。从PC2192.168.20.1ping PC4192.168.20.2也应该能通。但PC1 ping PC2应该不通因为它们在不同VLAN。如果PC1 ping PC3不通但PC1 ping PC2同交换机不同VLAN也不通那问题可能出在Access端口配置上。如果PC1 ping PC2通但ping PC3不通那问题大概率在Trunk链路上。3.5 关于VLAN ID的规划建议在实际项目中VLAN ID的规划是一门学问。我见过太多网络因为VLAN ID规划混乱而变得难以维护。这里分享几个我总结的原则原则一按功能或部门分段。比如1-99留给基础设施管理VLAN、Native VLAN、互联VLAN100-199留给办公区200-299留给服务器区300-399留给访客网络。这样一看VLAN ID就知道大概是什么用途。原则二避免使用VLAN 1。VLAN 1是默认VLAN很多协议默认在VLAN 1上跑把它留作管理用途或者干脆不用能减少很多安全隐患。原则三预留扩展空间。不要连续分配VLAN ID比如VLAN 10、11、12、13这样排下去。中间留一些空号以后新增部门或功能时不用打乱原有规划。原则四文档化。每分配一个VLAN就在文档里记一笔VLAN ID、名称、用途、所属网段、创建日期。这个习惯在单人维护的小网络里可能觉得多余但一旦网络规模上去或者需要交接文档就是救命稻草。4. 完整实操流程与关键环节实现4.1 从零开始的完整配置流程前面拆开讲了各个模块现在把整个流程串起来给你一个可以直接照着做的完整方案。阶段一物理连接与基础准备先把两台交换机的G0/24口用网线连起来。注意现在很多交换机支持自动MDI/MDIX直通线和交叉线都能用但如果是老设备交换机之间互联需要用交叉线。连好之后观察端口指示灯正常应该是亮绿灯或闪烁。然后给两台交换机接上Console线用终端软件连上去。波特率一般是9600数据位8停止位1无校验。这个参数在设备手册里都能查到。阶段二SW1完整配置enable configure terminal hostname SW1 ! 创建VLAN vlan 10 name Finance vlan 20 name HR vlan 99 name Native_VLAN exit ! 配置Access端口 interface range GigabitEthernet0/1-2 switchport mode access exit interface GigabitEthernet0/1 switchport access vlan 10 exit interface GigabitEthernet0/2 switchport access vlan 20 exit ! 配置Trunk端口 interface GigabitEthernet0/24 switchport trunk encapsulation dot1q switchport mode trunk switchport trunk native vlan 99 switchport trunk allowed vlan 10,20,99 no shutdown exit ! 保存配置 end write memory阶段三SW2完整配置enable configure terminal hostname SW2 ! 创建VLAN vlan 10 name Finance vlan 20 name HR vlan 99 name Native_VLAN exit ! 配置Access端口 interface range GigabitEthernet0/1-2 switchport mode access exit interface GigabitEthernet0/1 switchport access vlan 10 exit interface GigabitEthernet0/2 switchport access vlan 20 exit ! 配置Trunk端口 interface GigabitEthernet0/24 switchport trunk encapsulation dot1q switchport mode trunk switchport trunk native vlan 99 switchport trunk allowed vlan 10,20,99 no shutdown exit ! 保存配置 end write memory阶段四验证与测试配置完成后按照3.4节的验证步骤逐项检查。特别要注意的是Trunk链路建立需要一点时间如果刚配完就测试可能还没协商好等个十几秒再测。4.2 抓包验证亲眼看到VLAN标签如果你想让验证更有说服力可以在Trunk链路上抓包。把一台PC的网卡接到交换机的镜像端口上或者用支持端口镜像的交换机把G0/24的流量镜像出来然后用Wireshark抓包。正常情况下你应该能看到VLAN 10的帧带有802.1Q标签VID10VLAN 20的帧带有802.1Q标签VID20Native VLAN 99的帧不带标签这个抓包结果能直观地验证Trunk链路的工作状态。我每次做培训的时候都会让学员抓一次包亲眼看到标签之后对Trunk的理解会深刻很多。4.3 生成树协议对Trunk的影响这是一个容易被忽视但很关键的点。生成树协议STP在Trunk链路上运行时会对每个VLAN单独计算拓扑如果启用了PVST或MSTP。这意味着如果Trunk链路被STP阻塞了所有VLAN的流量都过不去如果只允许部分VLAN通过TrunkSTP只会为这些VLAN计算拓扑Native VLAN的STP BPDU是不带标签的如果Native VLAN两端不一致STP可能会出问题在实际项目中我建议在Trunk链路上显式配置STP参数比如把连接核心交换机的端口设为根端口或指定端口避免STP震荡导致业务中断。interface GigabitEthernet0/24 spanning-tree portfast trunk spanning-tree bpdufilter disable spanning-tree bpduguard disable注意spanning-tree portfast trunk这条命令在连接终端的Trunk端口上使用比如连接虚拟化主机的端口在交换机之间的Trunk链路上不要用否则可能导致环路。4.4 链路聚合与Trunk的结合如果两台交换机之间的流量比较大单条Trunk链路可能成为瓶颈。这时候可以用链路聚合EtherChannel把多条物理链路捆绑成一条逻辑链路然后在逻辑链路上配置Trunk。! SW1配置 interface range GigabitEthernet0/23-24 channel-group 1 mode active exit interface Port-Channel1 switchport trunk encapsulation dot1q switchport mode trunk switchport trunk native vlan 99 switchport trunk allowed vlan 10,20,99 exit链路聚合的好处是增加带宽、提供冗余、负载均衡。但要注意聚合的物理端口参数必须一致速率、双工、VLAN配置等否则聚合可能失败。4.5 配置保存与备份配置完成后别忘了保存。不同厂商的保存命令不一样思科风格write memory或copy running-config startup-config华为风格saveH3C风格save force保存之后建议把配置文件导出备份。如果交换机支持TFTP或FTP可以把配置文件传到服务器上。这个习惯在出故障需要恢复的时候能救命。! 思科风格备份配置到TFTP服务器 copy running-config tftp://192.168.1.100/SW1-config-backup.txt5. 常见问题与排查技巧实录5.1 跨交换机VLAN不通的排查思路这是最常遇到的问题我把它拆成一个排查流程你照着走基本能定位到问题。第一步确认物理链路show interfaces GigabitEthernet0/24看端口状态是不是up/up有没有CRC错误、输入输出错误。如果端口是down的检查网线、光模块、端口是否被shutdown。第二步确认Trunk是否建立show interfaces trunk如果输出里没有G0/24说明Trunk没建立。可能的原因两端模式不匹配一端是access一端是trunk、封装协议不匹配、DTP协商失败。第三步确认VLAN允许列表show interfaces GigabitEthernet0/24 trunk重点看Vlans allowed and active in management domain这一行。如果需要的VLAN不在列表里检查switchport trunk allowed vlan配置。第四步确认VLAN数据库show vlan brief确认需要的VLAN在数据库里存在并且Access端口已经划到了正确的VLAN。第五步确认Native VLAN一致性show interfaces trunk对比两端的Native VLAN。如果不一致不带标签的帧会跑到错误的VLAN里。第六步PC端检查确认PC的IP地址、子网掩码、网关如果有配置正确。有时候问题根本不在交换机上而是PC的防火墙挡住了ping。5.2 常见问题速查表现象可能原因排查命令解决方法Trunk链路不通端口模式不匹配show interfaces trunk两端都配成trunk部分VLAN不通允许列表遗漏show interfaces trunk补全allowed vlan列表时通时不通Native VLAN不一致show interfaces trunk两端Native VLAN改成一致所有VLAN都不通STP阻塞show spanning-tree检查STP拓扑调整优先级新加VLAN不通VLAN未创建show vlan brief在两端都创建VLAN重启后配置丢失未保存配置show startup-configwrite memory保存链路聚合失败端口参数不一致show etherchannel summary统一端口速率、双工、VLAN配置5.3 几个我踩过的坑坑一Native VLAN不匹配导致的“灵异事件”有一次在客户现场两台交换机之间的Trunk链路VLAN 10和20的业务都正常但管理VLAN 99时通时不通。查了半天发现一端Native VLAN是99另一端是1。不带标签的帧从一端出来到了另一端被归到了VLAN 1里而VLAN 1里没有管理地址所以管理不通。改成一致后问题消失。坑二Allowed VLAN列表漏了Native VLAN这个坑我踩过两次。配置Trunk的时候只写了业务VLAN忘了把Native VLAN加进去。结果业务VLAN正常但CDP、STP这些控制协议的报文过不去导致一些奇怪的问题。后来养成了习惯配置完Trunk一定用show interfaces trunk确认一下。坑三VLAN数据库不同步在一个有十几台交换机的网络里新增了一个VLAN 50只在核心交换机和其中几台接入交换机上创建了忘了在其他接入交换机上创建。结果VLAN 50的流量到了那些交换机就被丢弃了。后来我养成了一个习惯新增VLAN时先在所有交换机上批量创建再配置端口。坑四链路聚合的负载均衡算法配置了链路聚合之后发现流量都跑在一条链路上另一条几乎空闲。原因是负载均衡算法默认是基于源MAC或目的MAC的如果流量比较单一就会都走同一条链路。可以改成基于源和目的IP的算法让流量分布更均匀。port-channel load-balance src-dst-ip5.4 性能与安全优化建议性能方面在Trunk链路上启用流量控制flowcontrol可以避免拥塞丢包但可能带来Head-of-Line阻塞问题要权衡如果Trunk链路流量大考虑升级到万兆或使用链路聚合合理规划VLAN数量避免单个Trunk链路承载过多VLAN导致广播风暴风险安全方面把Native VLAN改成不用的VLAN避免VLAN跳跃攻击在Trunk端口上禁用DTP动态Trunk协议防止协商攻击配置BPDU Guard和Root Guard防止非法交换机接入限制Trunk端口允许的VLAN列表最小化攻击面interface GigabitEthernet0/24 switchport nonegotiate spanning-tree bpduguard enable spanning-tree guard root5.5 跨厂商设备互联的注意事项实际项目中经常遇到不同厂商的交换机互联比如一端是思科一端是华为。这种情况下有几个点要特别注意封装协议双方都必须支持802.1Q。ISL是思科私有协议其他厂商不支持所以互联时必须用dot1q。Native VLAN不同厂商对Native VLAN的处理可能略有差异建议互联时把Native VLAN设为一个双方都创建的VLAN并且保持一致。STP不同厂商的STP实现可能有差异建议在互联端口上明确配置STP模式如RSTP或MSTP避免协商问题。VLAN名称VLAN名称在不同厂商之间不传递只传递VLAN ID。所以互联时确保VLAN ID一致即可名称可以不同。DTPDTP是思科私有协议跨厂商互联时建议在思科侧配置switchport nonegotiate关闭DTP协商。6. 从二层互通到三层扩展的衔接跨交换机VLAN配置做完之后你得到的是一个二层互通的环境同一个VLAN的PC可以跨交换机通信不同VLAN之间隔离。但实际项目中往往还需要VLAN间通信这就涉及到三层交换或单臂路由了。如果后续要扩展我的建议是在核心层部署三层交换机为每个VLAN配置SVI交换机虚拟接口开启IP路由。这样VLAN间的流量在核心层直接硬件转发性能比单臂路由高得多。! 在三层交换机上配置SVI interface Vlan10 ip address 192.168.10.254 255.255.255.0 no shutdown exit interface Vlan20 ip address 192.168.20.254 255.255.255.0 no shutdown exit ! 开启IP路由 ip routing然后把PC的默认网关指向对应的SVI地址VLAN间就能通信了。这个配置和跨交换机VLAN是互补的一个解决二层互通一个解决三层互通。我在实际项目中一般会把这两步一起规划先确定VLAN划分和Trunk链路再确定三层网关的位置和地址。这样整个网络架构从一开始就是清晰的不会出现“二层通了才发现三层没规划好”的尴尬。最后分享一个小技巧配置完跨交换机VLAN之后用show cdp neighbors命令看一下两台交换机是否互相发现了对方。如果CDP邻居关系正常说明二层链路基本没问题。这个命令比ping更底层能帮你快速判断链路状态。
阅读完成 · 觉得有帮助?
咨询建站