资讯详情

资讯详情

跨交换机VLAN通信配置与故障排查详解

交换机之间通信一旦带上VLAN问题核心就变成帧从一台交换机发到另一台交换机时到底带没带VLAN标签对端认不认这个标签。很多刚接触网络的人第一次跨交换机配VLAN容易栽在这些地方两台交换机用Access口硬连、Trunk口没放行对应VLAN、PVID和本征VLAN对不上。结果经常是PC的IP、掩码、网关全都没问题但同VLAN就是ping不通或者不同VLAN反而互相串通。这个主题适合正在搭办公网、监控网、实验室组网或者排查跨交换机VLAN不通的人看。最值得先记住的判断是交换机之间的链路必须是Trunk或者等价的多VLAN承载链路同一VLAN靠二层透传不同VLAN必须走三层路由。下面按实际落地顺序拆一遍。1. 跨交换机VLAN通信的底层逻辑1.1 Access口和Trunk口的区别要先分清交换机的端口类型里Access口和Trunk口是最常用的两种。Access口一般接终端设备比如PC、打印机、摄像头、服务器。它只属于一个VLAN从Access口收到的正常数据帧不做VLAN标记端口自己的VLAN ID写在PVID里。发送帧给终端时也会把Tag剥掉因为普通终端网卡不识别802.1Q头。Trunk口一般接交换机、路由器、防火墙或者支持多VLAN的服务器网卡。它可以在同一条物理链路上传输多个VLAN的帧。为了实现“多个VLAN跑在一条线缆上”每个帧必须额外打上4字节的802.1Q Tag对端交换机看到Tag里的VLAN ID就知道这个帧属于哪个VLAN。所以交换机之间要通多个VLAN必须用Trunk口。如果只是临时测通一个VLAN用Access口也可以但一旦未来要加VLAN就得重新改物理接口配置工作量很大。1.2 为什么VLAN不能只在一台交换机内部生效很多人的第一个疑问是我在交换机A上创建了VLAN 10把接口划进去交换机B上也创建VLAN 10把接口划进去两台交换机用一根网线连起来为什么VLAN 10的PC还是不通因为VLAN是一个“交换机本地概念”。交换机A创建的VLAN 10本质上是在这台设备内部维护了一张VLAN表和对应的二层转发关系。交换机B的VLAN 10是另一台设备上的独立配置。两台设备之间默认不会自动交换VLAN注册信息。要让A上的VLAN 10和B上的VLAN 10组成同一个广播域必须在两台交换机之间的链路上把VLAN 10放行并且让带Tag的VLAN 10帧通过。这个任务就是Trunk口干的。这里的核心结论是同VLAN跨交换机通信依赖Trunk链路把带Tag的帧透传过去。不同VLAN跨交换机通信必须先解决二层透传再在某个三层设备上做路由。1.3 PVID、Tag和Native VLAN最容易搞混Trunk口相关的参数里PVID、Tag、Native VLAN这三个概念很多人容易绕进去。PVID的意思是端口默认VLAN ID。当Trunk口收到一个不带Tag的帧时会把这个帧打成PVID对应的VLAN帧。Trunk口发送不带Tag帧时也通常用在PVID对应的VLAN上。思科体系里把这种“不打Tag的VLAN”叫Native VLAN华为、H3C体系里通常直接叫PVID。默认情况下Trunk口PVID是VLAN 1。也就是说VLAN 1的帧在Trunk上是不带Tag的。如果你两台交换机之间Trunk的PVID不一致收到的不带Tag帧就会被分到不同的VLAN里轻则通信异常重则导致环路或广播风暴。我一般不建议把业务VLAN设成Trunk的PVID。尽量把PVID留在管理VLAN上比如VLAN 1或者单独的Management VLAN。如果实在要改两条互联交换机的PVID必须一致。2. 同VLAN跨交换机互通配置就三件事要让两台交换机上的同一个VLAN互通本质上只需要完成三件事创建VLAN、把接入端口划进VLAN、把互联端口配成Trunk并放行VLAN。2.1 先做地址规划和接口规划拿一个最简单的例子来说。交换机SW-A和SW-B通过GigabitEthernet0/0/1互联。PC1接在SW-A上属于VLAN 10IP是192.168.10.1/24。PC2接在SW-B上同样属于VLAN 10IP是192.168.10.2/24。两台PC的网关可以先不管因为同VLAN二层通信不依赖网关。设备端口规划可以画成这样设备接口端口类型所属VLAN用途SW-AGE0/0/1Trunk放行VLAN 10、20上联SW-BSW-AGE0/0/2AccessVLAN 10接PC1SW-BGE0/0/1Trunk放行VLAN 10、20上联SW-ASW-BGE0/0/2AccessVLAN 10接PC2我建议第一遍测试只放行VLAN 10。等基础通了再把VLAN 20加进去。不要一开始就配allow-pass vlan all容易把不想互通的VLAN也放过去。2.2 华为、H3C交换机的Trunk配置华为和H3C的命令在VLAN和Trunk这里基本一致都以system-view进系统视图。SW-A上的配置system-view vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 quit interface GigabitEthernet0/0/2 port link-type access port default vlan 10 quitSW-B上的配置除了接口名可能不同命令完全一样system-view vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 quit interface GigabitEthernet0/0/2 port link-type access port default vlan 10 quit这里有一个容易忽略的点华为和H3C的Trunk口默认只放行VLAN 1。如果只配置了端口模式为Trunk没有执行port trunk allow-pass对端的VLAN 10帧根本过不来。2.3 思科交换机的Trunk配置思科体系略有不同但逻辑一样。以常见的Catalyst系列为例。configure terminal vlan 10 vlan 20 exit interface GigabitEthernet0/1 switchport mode trunk switchport trunk allowed vlan 10,20 exit interface GigabitEthernet0/2 switchport mode access switchport access vlan 10 exit思科的switchport trunk allowed vlan如果不写默认允许所有VLAN。这个默认行为比华为激进容易被忽略。我在接触华为之后再碰思科设备就曾经因为“以为默认限制”踩过坑。2.4 验证命令不能只看up或down配完配置后建议按这个顺序验证。先看端口状态确认物理链路是UPdisplay interface brief再看Trunk口放行情况。华为设备可以用display port vlan思科可以用show interfaces trunk show interfaces switchport华为还可以直接看VLAN摘要display vlan brief如果display int vlan brief这种命令在二层交换机上通常用来查看VLAN接口和状态。很多人习惯用它但它更适合看三层VLAN接口是否UP。检查Trunk放行时display port vlan更直接。最后在PC1上ping PC2。如果通再用抓包软件抓一下SW-A和SW-B之间的链路能看到帧带着802.1Q头VLAN ID是10。同VLAN的两台PC能ping通说明二层透传没有问题。这时候再考虑VLAN间路由。3. 不同VLAN要通信路由必须做在边界3.1 为什么跨VLAN就是不通两台PC分别属于VLAN 10和VLAN 20即使它们接在同一台交换机上默认也ping不通。因为VLAN把广播域隔离了VLAN 10的广播帧不会进入VLAN 20VLAN 10的PC不知道自己要访问的主机在哪里设备层MAC地址必须有网关帮忙。这个“网关”就是三层设备三层交换机、路由器或者防火墙。二层交换机本身不做路由它只负责转发帧。常见的错误是有人给PC1配了192.168.10.1给PC2配了192.168.20.1然后把它俩接在纯二层交换机上以为换个IP就能跨VLAN互通。实际上没有三层网关封装了IP报文也没人帮他路由。3.2 三层交换机VLANIF最常用方案三层交换机在企业网里非常常见。核心思路是给每个VLAN配置一个三层接口叫VLANIF相当于这个VLAN的网关。华为设备配置system-view vlan batch 10 20 interface Vlanif10 ip address 192.168.10.254 255.255.255.0 quit interface Vlanif20 ip address 192.168.20.254 255.255.255.0 quitH3C设备命令一样只是接口名习惯写成interface Vlan-interface 10。思科是三层交换机时用SVIconfigure terminal ip routing interface vlan 10 ip address 192.168.10.254 255.255.255.0 exit interface vlan 20 ip address 192.168.20.254 255.255.255.0 exit思科这里有一个很关键的命令ip routing。如果不开启SVI只是理论上存在三层转发不生效。这个问题我见过不止一次。然后PC1的网关指到192.168.10.254PC2的网关指到192.168.20.254VLAN 10和VLAN 20之间的互通就走三层交换机完成了。3.3 路由器子接口适合小规模组网如果手头没有三层交换机只有一台路由器可以用单臂路由。交换机Trunk口接路由器物理口路由器在这个物理口上创建多个子接口每个子接口对应一个VLAN并封装802.1Q Tag。以思科路由器为例interface GigabitEthernet0/0.10 encapsulation dot1q vlan 10 ip address 192.168.10.254 255.255.255.0 exit interface GigabitEthernet0/0.20 encapsulation dot1q vlan 20 ip address 192.168.20.254 255.255.255.0 exit华为路由器子接口写法有差异interface GigabitEthernet0/0/0.10 dot1q termination vid 10 ip address 192.168.10.254 255.255.255.0 arp broadcast enable quit华为子接口默认不能转发ARP广播必须配arp broadcast enable否则PC连网关都找不到。这算是华为和思科在子接口上最明显的区别之一。3.4 路由配置的边界要提前确认VLAN间路由配置完之后真正考验人的往往不是命令而是IP网段规划。举个例子VLAN 10192.168.10.0/24网关192.168.10.254VLAN 20192.168.20.0/24网关192.168.20.254这个组合很清晰。但如果一开始把VLAN 10和VLAN 20配成了同一个网段那就没法通过网关区分流量三层路由根本无从谈起。有人问我“为什么VLAN 20的PC ping不通网关”我去一看两台PC配的竟然是同一个网段的IP。这个不是VLAN技术问题是IP规划问题。我建议在配VLANIF之前先列一张表VLAN ID、网段、网关、用途。确认没有重复网段再接下去。4. 复杂组网里的Trunk规划链路聚合、级联和服务器接入跨两台交换机的场景通了之后实际网络往往不止两台设备。核心层、汇聚层、接入层串起来的时候Trunk规划要提前想清楚。4.1 两条上行链路不要直接配两个Trunk如果汇聚交换机到核心交换机有两条万兆链路想着“既然都是Trunk就让它俩都放行VLAN流量自动分担”这是一个危险的想法。普通Trunk不跑STP时两条二层链路之间会形成环路广播帧在交换机之间反复转发直接把CPU打满。更稳的做法是把两条物理链路加入Eth-Trunk华为里叫Eth-Trunk思科里叫Port-Channel。逻辑上变成一个聚合接口再做Trunk配置。华为配置示例interface Eth-Trunk1 port link-type trunk port trunk allow-pass vlan 10 20 quit interface GigabitEthernet0/0/1 eth-trunk 1 quit interface GigabitEthernet0/0/2 eth-trunk 1 quit思科配置示例interface Port-channel1 switchport mode trunk switchport trunk allowed vlan 10,20 exit interface GigabitEthernet0/1 channel-group 1 mode active exit interface GigabitEthernet0/2 channel-group 1 mode active exit链路聚合完成后物理链路增减都不需要改动业务VLAN配置可维护性高很多。注意聚合成员口两边模式要一致一边是active另一边建议也是active或者passive不要一边active一边on。4.2 多台交换机级联时VLAN放行要“裁剪”接入层交换机从汇聚交换机上拿VLAN常见的做法是把汇聚到核心的Trunk直接放行所有VLAN。这样做省事但问题也不少广播域扩大、未知单播泛洪变多、后续排查困难。更推荐的做法是每台接入交换机只透传自己需要的VLAN。比如接入交换机A只有VLAN 10、20那上行Trunk就写port trunk allow-pass vlan 10 20不要图省事写vlan all。尤其当网络里有监控VLAN、访客VLAN默认放行会让监控广播包跑到办公交换机上既浪费带宽也有一定的数据暴露风险。4.3 服务器、虚拟机和容器怎么接入TrunkTrunk不只是交换机对交换机才用。服务器上如果装了虚拟机虚拟机又分了多个业务VLAN服务器的物理网卡也应该以Trunk模式接交换机。服务器上通过虚拟网卡或子接口配置对应VLAN Tag交换机放行对应VLAN两边才能对上。容器网络里如果用了Multus之类的多网卡方案给Pod附加VLAN网卡逻辑也一样上游交换机端口放行对应VLAN主机侧网络接口能识别和转发带Tag的帧。不过容器场景额外牵扯CNI、路由策略和命名空间排查时先要分清哪一层是二层Trunk哪一层是三层路由。GVRP这种自动VLAN注册协议可以在多台交换机之间自动同步VLAN信息减少手工创建。但我不建议一上来就开。GVRP只会传递VLAN编号不会自动帮你规划网段也不会自动配置VLANIF。设备数量少时手工配置更可控设备数量多时优先考虑自动化下发而不是依赖GVRP把VLAN表“广播”出去。5. 跨交换机VLAN不通按这个顺序排查跨交换机VLAN不通的现象比配置本身更值得专门写一遍。很多问题看起来复杂真正定位后就那么几个原因。5.1 先看物理链路和端口状态不管报错多奇怪先确认两端接口都是UP。display interface brief如果对端接口是DOWN后面的VLAN配置全是白搭。常见原因包括网线松动、光模块兼容问题、对端设备没开机、接口被shutdown。还有一种情况是两端速率协商不匹配端口一直Down或者反复Up/DownVLAN配置再对也没用。5.2 再看端口类型和VLAN放行列表物理链路正常但同VLAN还是不通第二步查端口类型。华为查看display port vlan思科查看show interfaces trunk show interfaces status重点检查三点互联口是否配成了Trunk。Trunk口是否放行了目标VLAN。接入侧PC端口是否划到了正确VLAN。如果一边是Trunk另一边是Access目标VLAN可能根本传不过去。华为设备有些接口默认是Hybrid类型也能放行多个VLAN但Tag行为和Trunk不一样。如果对端用的是Cisco或别的品牌建议把互联口固定成Trunk减少理解偏差。5.3 检查PVID和本征VLAN是否一致端口类型和放行列表都正常仍然有怪异现象比如VLAN 1通但VLAN 10不通或者出现广播风暴重点查Trunk两端的PVID。华为、H3C设备查看Trunk口PVIDdisplay port vlan里能直接看到。思科用show interfaces trunk看Native VLAN。两端PVID一定要一致。比如一端PVID是1另一端PVID是10那么不带Tag的帧会在对端被错误划分。轻则管理报文乱跳VLAN重则产生广播环路。5.4 最后查STP和抓包上述都没问题但还是不通别急着改配置。先看生成树状态。display stp brief如果端口一直处于Learning或者Blocking状态VLAN帧虽然能被Trunk放行但STP在等待收敛不会转发数据。这时候要确认是不是网络里出现了物理环路或者STP优先级配置不合理。如果STP也正常最后一步抓包。在Trunk链路上抓包看PC1发出的ICMP请求帧是否带有正确的802.1Q Tag目标VLAN ID是不是预期的数字。抓包能直接区分两种问题帧没到说明放行、端口类型或物理链路有问题。帧到了但有去无回说明对端交换机或终端没有正确处理Tag。我排查跨交换机VLAN故障时最常用的一套顺序就是端口状态、端口类型、VLAN放行表、PVID、STP、抓包。不要一上来就怀疑Palace模型、不要急着重配VLAN。先把两边配置导出来对比往往一眼就能发现问题。跨交换机VLAN通信这个事真正落地时最该盯住的不是新功能而是两侧配置是否对称。我一般会把每台交换机的VLAN表、Trunk放行列表、PVID单独列成一张表哪个口接哪台设备、放行哪些VLAN、PVID是多少全部写清楚。等网络规模变大这张表比记忆可靠得多。如果你正在改两台交换机的Trunk建议先让同VLAN小流量跑通再考虑VLAN间路由、链路聚合和服务器接入。基础链路稳了上面的路由和策略才谈得上。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →