news 2026/9/17 0:58:20

三层交换机 VLAN 间通信:SVI、Trunk 与排错实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
三层交换机 VLAN 间通信:SVI、Trunk 与排错实战

1. VLAN 之间为什么天生不通,三层交换机到底在哪一层动手

很多人第一次配思科三层交换机,卡在同一个地方:两个 VLAN 的 PC 都配好了地址,接口状态全是 up,可就是 ping 不通。于是开始怀疑线缆、怀疑模拟器、怀疑设备是不是坏的。实际上这不是故障,这是 VLAN 的设计本意——隔离广播域。VLAN 存在的意义,就是把一个物理交换网络切成一堆互相看不见的逻辑网络,如果它默认就能互通,那它就白设计了。

所以"让不同 VLAN 相互通信"这句话,本质上是要求我们在隔离之上再开一道门,而这道门必须由第三层来开。这一点想明白了,后面的命令就都是顺理成章的事:二层负责把帧送到正确的接口,三层负责判断"这个包该不该跨网段走"。VLAN 间通信的关键词里那个"三层交换机",指的就是这台设备同时具备这两个身份。

1.1 二层转发只看 MAC,压根不认识 IP 网段

先把二层交换机的行为掰开说。接入层的二层交换机在转发一个帧的时候,判断依据只有两个东西:目的 MAC 地址VLAN ID。它维护一张 MAC 地址表,记录"某个 MAC 从哪个接口、属于哪个 VLAN 学到的"。收到帧之后,查表,命中就从这个接口发出去,不命中就在该 VLAN 内泛洪。

关键点在于:这张表里没有 IP 地址这一列。PC 的 IP 是 192.168.10.10 还是 192.168.20.10,二层设备完全不关心,它只看帧头里的 MAC。这就像小区里送快递,快递员只认门牌号,不认你身份证上的户籍地。VLAN 10 和 VLAN 20 在交换机眼里是两个不相干的小区,哪怕它们在同一栋楼里,快递员也不会跨小区送。

那 PC 是怎么决定"要不要跨小区"的呢?是 PC 自己算的。PC 拿自己的 IP 和掩码一算,发现目标地址不在同一个网段,就把包发给默认网关,而不是直接发给对方。这一步是整个链路的转折点:包的下一跳从"目标主机"变成了"网关所在的 MAC"。

1.2 三层交换机的"分界线"落在 SVI 上

网关是谁?在三层交换机方案里,网关就是每个 VLAN 对应的一个SVI(Switch Virtual Interface,交换机虚拟接口)。你可以把它理解成"这个 VLAN 在设备内部的代言人":一个 VLAN 对应一个 SVI,一个 SVI 配一个 IP,这个 IP 就是该 VLAN 内所有主机的网关。

VLAN 10 的 SVI 是interface vlan 10,地址 192.168.10.1;VLAN 20 的 SVI 是interface vlan 20,地址 192.168.20.1。这两个接口各自看是一个"本地网段"。当 VLAN 10 的 PC 要访问 VLAN 20 的 PC 时,流程是这样的:

  1. PC 发现目标不在本网段,查自己的 ARP 表找网关 MAC,没有就发 ARP 请求问"192.168.10.1 的 MAC 是什么"。
  2. 三层交换机用自己的 SVI 地址回应这个 ARP,PC 把包发给这个 MAC。
  3. 交换机收到帧,看到目的 MAC 是自己 SVI 的 MAC,于是把帧头剥掉,交给三层引擎。
  4. 三层引擎查路由表,发现 192.168.20.0/24 直连在interface vlan 20上,于是重新封装帧头(源 MAC 改成 SVI 20 的 MAC,目的 MAC 是 VLAN 20 那台 PC 的 MAC),从 VLAN 20 的接口发出去。
  5. 回程同理。

这就是一次完整的跨 VLAN 转发,它同时用到了二层(MAC 重写、VLAN 标签处理)和三层(路由查表)。一句话概括:VLAN 间通信不是"打通 VLAN",而是"给每个 VLAN 配一个网关,并让设备愿意帮它们做路由"。

注意:三层交换的前提是设备上路由功能处于开启状态。思科不少三层交换机型号(比如 3560、3750 系列)默认是开的,但有些型号或某些固件版本默认关闭,必须手动敲ip routing。这个命令不敲,SVI 地址配得再漂亮,设备也只当它是个"有 IP 的接口",不会帮你转发跨网段流量。这是新手最常掉进去的坑之一。

2. 动手前的账要算清楚:拓扑、网段与地址规划

配置命令本身并不复杂,复杂的是"想清楚"。我见过太多人一上来就打开模拟器连设备,连完发现地址段规划得乱七八糟,网段互相重叠,或者网关配在了错误的 VLAN 上,最后推倒重来。与其这样,不如花十分钟把拓扑和地址表在纸上(或者文本文件里)列清楚,敲命令的时候就是抄。

2.1 一个够用的最小实验拓扑

验证 VLAN 间通信,最小可用的拓扑其实只需要一台三层交换机和两台主机。但为了接近真实的"接入层 + 汇聚层"结构,我建议用下面这个三设备拓扑,它能把 Trunk、SVI、路由三件事一次性练到位:

  • 三层交换机(核心):作为所有 VLAN 的网关,负责路由。
  • 二层交换机(接入):负责把 PC 接进来,通过 Trunk 上联核心。
  • 两台 PC:分别属于 VLAN 10 和 VLAN 20。

连线方式:

链路一端另一端类型
PC1 - 接入交换机FastEthernet0/1Fa0/10Access,VLAN 10
PC2 - 接入交换机FastEthernet0/1Fa0/20Access,VLAN 20
接入交换机 - 核心Fa0/24Fa0/24Trunk,放行 VLAN 10、20

为什么中间要加一台二层交换机而不是把 PC 直接插在核心上?因为这样才能真正验证Trunk 链路上的 VLAN 标签是否被正确封装和放行。如果 PC 直接插核心,很容易掩盖掉 Trunk 配置的错误,等接到真实环境里再出问题,排查成本成倍上升。

2.2 地址规划表:一张表定乾坤

地址规划这件事,核心就三条原则:网段不重叠、网关落在这个网段里、网关地址统一好记。很多人喜欢把网关设成网段的第一个可用地址(.1)或者最后一个(.254),我觉得 .1 更直观,而且方便记忆——看到 192.168.10.x 就知道网关大概率是 192.168.10.1。

设备/VLANVLAN ID网段网关(SVI)主机地址
VLAN 10 办公10192.168.10.0/24192.168.10.1PC1:192.168.10.10
VLAN 20 财务20192.168.20.0/24192.168.20.1PC2:192.168.20.20
管理网段(可选)99192.168.99.0/24192.168.99.1交换机管理地址

这里我特意把管理 VLAN 单独拆出来,原因后面会讲到——生产环境里把设备管理地址和业务 VLAN 混在一起,是很容易出问题的一种做法,尤其是当业务 VLAN 上跑了 DHCP、广播比较多的时候。

PC 的配置要特别注意两点:一是掩码必须写全(255.255.255.0,不要漏),二是默认网关必须填。很多人测试时只填 IP 和掩码,网关那栏空着,然后奇怪"为什么同 VLAN 能通、跨 VLAN 不通"——因为 PC 根本不知道该把跨网段的包交给谁。

2.3 模拟器环境里那些容易忽略的细节

用模拟器做实验的人多,这里说几个我在使用过程中踩到的点。首先是设备型号选择:不是所有型号都支持三层功能。你要选明确标注支持 Layer 3 的交换机型号,二层交换机的 SVI 只能配一个管理地址,ip routing这类命令根本敲不进去,配上就会提示无效命令。

其次是接口命名:不同型号的接口前缀不一样,有的叫 FastEthernet,有的叫 GigabitEthernet,配置时按实际show ip interface brief里显示的名字来写,不要凭记忆。名字写错的报错通常是 "Invalid interface",一眼能看出来。

第三是启动时间:模拟器里交换机启动后,接口从 down 到 up 需要几秒到几十秒,尤其 Trunk 链路的生成树收敛需要时间。刚配完就 ping,可能因为 STP 还没收敛而失败,等半分钟再测,或者先show spanning-tree看一眼状态是不是 forwarding。

提示:做实验时养成一个习惯——每配完一段就show一下。配 VLAN 看show vlan brief,配 Trunk 看show interfaces trunk,配 SVI 看show ip interface brief。逐段确认,比最后一起 ping 要高效得多。

3. 从建 VLAN 到 SVI 起三层,逐段落地

配置顺序上有个讲究:先二层后三层。也就是先把 VLAN 建好、接口划进去、Trunk 打通,确认二层通了,再配 SVI 和路由。如果反着来,三层配置有问题时,你没法判断是路由没生效还是二层压根没通,排查会变成一团乱麻。

3.1 接入交换机:建 VLAN、划接口

先在三层交换机和二层交换机上分别建 VLAN。名字(name)不是必须的,但强烈建议写上,半年后再看配置,你能一眼知道 VLAN 10 是干什么的。

Switch(config)# vlan 10 Switch(config-vlan)# name Office Switch(config-vlan)# exit Switch(config)# vlan 20 Switch(config-vlan)# name Finance Switch(config-vlan)# exit

然后把接 PC 的接口划进对应 VLAN:

Switch(config)# interface FastEthernet0/10 Switch(config-if)# switchport mode access Switch(config-if)# switchport access vlan 10 Switch(config-if)# exit Switch(config)# interface FastEthernet0/20 Switch(config-if)# switchport mode access Switch(config-if)# switchport access vlan 20 Switch(config-if)# exit

这里switchport mode access一定要显式写。虽然不少接口默认就是 access 模式,但显式声明能避免接口之前被配成别的模式(比如残留的 trunk 配置)导致行为异常。switchport access vlan 10这个命令有个细节:如果 VLAN 10 还没创建,很多型号会自动帮你创建它;但有些型号不会,会直接拒绝。所以先建 VLAN 再划接口,顺序不要颠倒。

配置完用show vlan brief确认一下,应该能看到 VLAN 10 和 VLAN 20 下面的接口归属。如果接口没出现在列表里,多半是switchport mode或者接口状态的问题。

3.2 Trunk 链路:封装、模式与放行列表

Trunk 是二层到三层之间的"高速公路",多个 VLAN 的流量都从这里过,靠的是 802.1Q 标签区分彼此。Trunk 的配置要解决四件事:封装类型、模式、放行哪些 VLAN、native VLAN。

Switch(config)# interface FastEthernet0/24 Switch(config-if)# switchport trunk encapsulation dot1q Switch(config-if)# switchport mode trunk Switch(config-if)# switchport trunk allowed vlan 10,20 Switch(config-if)# switchport trunk native vlan 1 Switch(config-if)# exit

逐条解释一下为什么这么写。switchport trunk encapsulation dot1q指定封装协议为 802.1Q,这是业界标准,跨厂商设备之间也用这个。有些老型号还支持 ISL(思科私有),但那玩意早就淘汰了,统一用 dot1q。需要注意:低端交换机往往只有 dot1q 一种封装,这条命令可能敲不进去,报错说命令不存在,那就不用敲;而中高端型号如果没指定,可能默认用 ISL,两边不一致就通不了。

switchport mode trunk把接口主动设为 Trunk 模式。也可以配成dynamic autodynamic desirable让它自动协商,但我不推荐在生产环境这么干——自动协商的结果取决于两端配置的组合,一端 auto 一端 desirable 能起来,两端都 auto 就起不来,这种"看运气"的配置方式排错时非常痛苦。手动固定成 trunk,行为可预测。

switchport trunk allowed vlan 10,20限制这条 Trunk 上允许通过的 VLAN。这一点很关键:默认情况下所有 VLAN 都允许通过,看起来省事,实际上是安全隐患——一个不该出现的 VLAN 流量可能顺着 Trunk 跑到别的楼层。手动列白名单,既清晰又安全。以后要加 VLAN,记得回来改这一行,"VLAN 建了但 Trunk 没放行"是跨 VLAN 不通的头号原因

switchport trunk native vlan 1指定 native VLAN,默认就是 1。native VLAN 上的帧是不打标签的,如果两端不一致,会引发让你抓狂的诡异问题(后面单独说)。

配完两端之后,用show interfaces trunk检查。重点看三列:Mode 是不是 trunk、Encapsulation 是不是 802.1Q、Vlans allowed and active 里有没有 10 和 20。这三项都对了,二层隧道就通了。

3.3 三层交换机:开启 ip routing,给 SVI 配地址

到了核心环节。先确保路由功能开着:

CoreSwitch(config)# ip routing

然后给每个 VLAN 配 SVI:

CoreSwitch(config)# interface vlan 10 CoreSwitch(config-if)# ip address 192.168.10.1 255.255.255.0 CoreSwitch(config-if)# no shutdown CoreSwitch(config-if)# exit CoreSwitch(config)# interface vlan 20 CoreSwitch(config-if)# ip address 192.168.20.1 255.255.255.0 CoreSwitch(config-if)# no shutdown CoreSwitch(config-if)# exit

关于 SVI 有几个必须说清楚的点。第一,SVI 的 up/down 状态取决于该 VLAN 里有没有活跃的成员端口。如果 VLAN 10 里一个 up 的接口都没有,interface vlan 10会是 down 状态,路由表里也不会出现这条直连路由。新手配完 SVI 发现路由表里啥都没有,八成就是这个原因——不是配置错了,是 VLAN 里没活人。

第二,no shutdown建议显式敲一下。SVI 默认是开启的,但养成习惯没坏处。

第三,一个 VLAN 只配一个 SVI 地址,这个地址就是全 VLAN 的网关,不要想着配多个。

配完用命令验证:

CoreSwitch# show ip interface brief CoreSwitch# show ip route

show ip route里应该能看到两条直连路由:

C 192.168.10.0/24 is directly connected, Vlan10 C 192.168.20.0/24 is directly connected, Vlan20

看到这两行,说明三层侧的准备工作完成了。如果只有一条或者一条都没有,回头检查 SVI 状态和接口 up 情况。

3.4 把两端串起来:确认二层路径完整

三层配完之后,别急着 ping。先做一次二层层的确认:show vlan brief看接入交换机的接口归属对不对,show interfaces trunk看两端 Trunk 是否都起来了、放行的 VLAN 是否一致。任何一端没放行 VLAN 20,VLAN 20 的流量就过不去,表现就是"VLAN 10 能通网关,VLAN 20 连网关都 ping 不通"。

还有一个非常容易被忽略的点:PC 的网关必须指向本 VLAN 的 SVI 地址。VLAN 10 的 PC 网关写 192.168.10.1,VLAN 20 的 PC 网关写 192.168.20.1。如果 VLAN 10 的 PC 手抖写成了 192.168.20.1,它的跨网段流量会先去找 VLAN 20 的网关,经过路由绕一圈再从 VLAN 10 出来,能不能通取决于路由配置,而且路径完全不符合预期。这种"能通但路径诡异"的问题,比不通更难查。

4. SVI 与单臂路由:两条路都能走,怎么选

打通 VLAN 间通信,方案不止一种。除了三层交换机的 SVI,还有用路由器做单臂路由(Router-on-a-Stick)的方案。两种方案都能实现目标,但适用场景差别很大,选错了后面会很难受。

4.1 单臂路由的原理与它的代价

单臂路由的做法是:在路由器的一个物理接口上,为每个 VLAN 配一个子接口(sub-interface),每个子接口通过encapsulation dot1Q <vlan-id>绑定一个 VLAN,再各配一个网关 IP。物理接口本身不配地址,但必须no shutdown

Router(config)# interface GigabitEthernet0/0 Router(config-if)# no ip address Router(config-if)# no shutdown Router(config-if)# exit Router(config)# interface GigabitEthernet0/0.10 Router(config-subif)# encapsulation dot1Q 10 Router(config-subif)# ip address 192.168.10.1 255.255.255.0 Router(config-subif)# exit Router(config)# interface GigabitEthernet0/0.20 Router(config-subif)# encapsulation dot1Q 20 Router(config-subif)# ip address 192.168.20.1 255.255.255.0 Router(config-subif)# exit

流量路径是:PC 发给网关 MAC,帧从接入交换机经 Trunk 上到路由器,路由器在子接口上解封装、查路由、再封装回同一个物理接口,从对应子接口发回去。整个过程所有 VLAN 的流量都挤在一条物理链路上,这就是"单臂"这个叫法的由来。

它的代价很直白:带宽成为瓶颈。所有跨 VLAN 流量共享那一条链路,VLAN 一多、流量一大,这条路立刻堵。而且每一次跨 VLAN 转发都要经过路由器,路由器是软件转发为主,吞吐量和延迟都不如三层交换机的硬件转发。另外,子接口的配置量随 VLAN 数量线性增长,管理几十个 VLAN 的时候配置文件会变得非常臃肿。

4.2 三层交换机 SVI 为什么是现在的主流

三层交换机的优势在于转发靠硬件。它内部有一个专门做三层转发的 ASIC 芯片,配合 CEF(Cisco Express Forwarding)机制,能做到"第一个包走软件慢路径建立转发表,后续包全部走硬件快路径"。社区里常说的"一次路由,多次交换"就是这个意思。

对比一下两种方案:

对比项单臂路由三层交换机 SVI
转发方式路由器软件转发为主硬件 ASIC 转发
带宽瓶颈所有 VLAN 挤一条链路VLAN 间转发在设备内部完成
配置复杂度每 VLAN 一个子接口每 VLAN 一个 SVI
扩展性VLAN 多时配置臃肿支持大量 VLAN
成本需额外路由器一台设备搞定
适用场景小型网络、过渡方案中大型网络的常规做法

所以只要预算允许,三层交换机是 VLAN 间通信的标准答案。单臂路由更适合教学演示、或者手上只有二层交换机加一台路由器时的临时方案。

4.3 有时候反而该用路由口:no switchport的场合

SVI 不是唯一选择。三层交换机的物理接口可以用no switchport命令从二层模式切换成三层路由口,直接配 IP 地址。这在设备之间做互联时特别有用。

举个典型场景:两台三层交换机之间做互联,你可以划分一个专门的互联 VLAN,各配一个 SVI;也可以把互联接口直接no switchport,各配一个 /30 或 /31 的地址。后者更省地址,而且不会在生成树里掺和进来。

CoreSwitch(config)# interface GigabitEthernet0/1 CoreSwitch(config-if)# no switchport CoreSwitch(config-if)# ip address 10.0.0.1 255.255.255.252 CoreSwitch(config-if)# no shutdown

注意no switchport这条命令只在中高端三层交换机上支持,二层交换机上敲不进去。另外,一旦接口变成路由口,它就不再属于任何 VLAN,switchport相关的命令全部失效——要切回去得用switchport命令恢复。

提示:做设备互联的时候,我个人的偏好是"互联用路由口,业务用 SVI"。这样职责清晰:路由口负责设备之间跑路由协议,SVI 负责接入终端的网关。混着用容易在排查时绕晕自己。

5. 验证与排错:ping 通了不代表配置就对了

配置完成之后的验证环节,很多人只做一件事:ping。ping 通就收工,ping 不通就瞎改。这两种做法都不可取。ping 通只能说明"这条路能走",说明不了走的是不是你想的那条路,也说明不了配置有没有冗余或隐患。

5.1 分层验证的顺序不能乱

我习惯按"从下往上、从近到远"的顺序验证:

  1. 同 VLAN 内互通:PC1 ping 同 VLAN 的另一台设备。通了说明接入层没问题。
  2. PC ping 本 VLAN 网关:比如 PC1 ping 192.168.10.1。通了说明 SVI 和二层路径到核心都正常。
  3. PC ping 对端 VLAN 网关:PC1 ping 192.168.20.1。通了说明三层转发生效了。
  4. PC ping 对端 PC:PC1 ping 192.168.20.20。通了说明整条链路闭环。

四步走下来,哪一步断的,问题范围立刻缩小到那一层。比直接跨 VLAN ping 然后盯着"Request timed out"发呆高效太多。

5.2 排错时值得反复看的几条 show 命令

命令看什么常见异常
show vlan briefVLAN 是否存在、接口归属接口没划进 VLAN,或 VLAN 未创建
show interfaces trunkTrunk 状态、封装、放行列表放行列表缺 VLAN,模式不是 trunk
show interfaces switchport接口的 access/trunk 属性模式残留,native vlan 不一致
show ip interface briefSVI 是否 up、地址是否正确SVI down,地址掩码写错
show ip route直连路由是否存在缺路由,说明 SVI 没起来
show arp网关是否学到主机 MACARP 表空,说明二层不通
show mac address-tableMAC 从哪个口学到MAC 学习不到,或学到错误接口
show ip protocols动态路由协议状态(如果用了)邻居没起来

这里面show arp特别值得说。ARP 表是二层和三层之间的桥梁,如果 PC ping 网关不通,先在核心上看show arp,能不能看到 PC 的 IP 和 MAC 映射。看不到,说明 ARP 请求根本没到达 SVI,问题在二层;能看到但 ping 不通,问题可能在三层(比如 ACL、路由)。这一条命令能把问题范围一刀切成两半。

5.3 抓包看 ARP 与 ICMP 的实际走向

如果条件允许(模拟器一般支持抓包),在关键链路上抓一次包,看到的会比想象中直观。你会看到这样一串交互:

  • PC1 发出ARP 请求,广播,问 192.168.10.1 的 MAC。注意这个包不带 VLAN 标签,因为是从 access 口进来的。
  • Trunk 链路上这个 ARP 请求被打上 VLAN 10 的标签
  • 核心交换机回应 ARP,回包打 VLAN 10 标签从 Trunk 下去,到接入交换机解标签发给 PC1。
  • PC1 拿到网关 MAC,发出ICMP Echo Request,目的 MAC 是网关。
  • 核心交换机路由之后,把包从 VLAN 20 侧发出,此时目的 MAC 已经变成 PC2 的 MAC,源 MAC 变成 SVI 20 的 MAC
  • PC2 回 ICMP Echo Reply,同样要经一次跨网段路由。

看懂这串交互,你对"VLAN 间通信"的理解就不再停留在命令层面了,而是能画出每一个包在设备内部的完整轨迹。这种理解在排查复杂问题时特别值钱。

6. 翻车现场复盘:几个我实际踩过的坑

前面讲的是"应该怎么做",这一段讲"实际会怎么错"。这些坑有的我踩过,有的是看别人踩的,共同点是:配置看起来都对,就是不通

6.1ip routing忘了开,SVI 成了摆设

这是排第一的坑。三层交换机上 SVI 配得好好的,地址、掩码全对,show ip interface brief显示 up,但 PC 就是 ping 不通对端 VLAN。show ip route一看,直连路由都在,但跨网段的包就是不动。

问题就在ip routing设备处于纯二层模式时,SVI 上的 IP 只是"给自己用的",用于管理访问,不会参与转发。只有开了ip routing,设备才会把这些直连网段当作可路由的网段,才会在收到目的 MAC 是自己时把包交给三层引擎。

排查动作很简单:show running-config | include ip routing。如果什么都没输出,那就是没开。敲上ip routing,立刻就通。

6.2 Trunk 放行列表少写了一个 VLAN

switchport trunk allowed vlan 10,20这行,写的时候很容易漏。比如后来加了个 VLAN 30,VLAN 建了,SVI 也配了,但 Trunk 上忘了加 30,结果 VLAN 30 的所有流量在 Trunk 上直接被丢弃。表现就是:VLAN 30 内部互通正常,但 ping 不了网关,也访问不了其他 VLAN。

排查看show interfaces trunk,在 "Vlans allowed and active in management domain" 那一行找你的 VLAN 号。不在里面,就是被挡了。改的时候用:

Switch(config-if)# switchport trunk allowed vlan add 30

注意这里必须用add关键字,直接写switchport trunk allowed vlan 30把原来的 10 和 20 覆盖掉,变成一个只放行 30 的 Trunk,然后 VLAN 10 和 20 立刻全断。这个操作是典型的"改一个坏一片",我见过不止一次有人因此半夜被叫起来处理。

6.3 ACL 悄悄把包拦了

跨 VLAN 不通还有一种情况:ACL(访问控制列表)在起作用。VLAN 间通信一旦上了规模,运维往往会配 ACL 做访问控制,比如"财务 VLAN 不允许被办公 VLAN 访问"。这种 ACL 通常应用在 SVI 上(ip access-group)。

如果网络是接手别人的,配置里可能藏着你不知道的 ACL。排查方法:show ip interface vlan 10看有没有Outgoing access listIncoming access list,再看show access-lists看规则内容。注意 ACL 的匹配顺序是从上往下、命中即停,最后如果没命中任何规则,默认是 deny 还是 permit 取决于类型——标准 ACL 和扩展 ACL 的默认行为都是"隐式拒绝",这一点经常被人忽略。

还有一种更隐蔽的是 VACL(VLAN ACL),应用在 VLAN 级别,show vlan access-map能看到。这个在排错时容易被漏掉,因为大家习惯只查接口上的 ACL。

6.4 native VLAN 不一致引发的诡异现象

native VLAN 的坑很典型:两端 native VLAN 不一致时,Trunk 依然能起来,但流量会出现难以解释的错乱

原理是这样的:VLAN 1 的帧通过 Trunk 时不打标签(因为默认 native VLAN 是 1)。如果一端 native VLAN 是 1,另一端是 99,那么从 A 端发出的 VLAN 1 无标签帧,到了 B 端会被 B 当成 VLAN 99 的帧收下。于是 VLAN 1 的流量莫名其妙跑到了 VLAN 99 里,VLAN 99 的 PC 收到不该收的广播。

更糟的是,这种问题不会影响 Trunk 的 up 状态show interfaces trunk上大部分时候也不会直接报错,只有部分新型号会提示 native VLAN mismatch。所以很多人查了半天查不出来。养成习惯:Trunk 两端 native VLAN 保持一致show interfaces switchport里对比两端的 Native VLAN 那一行。

6.5 PC 侧的低级错误往往最容易被忽略

排了半天设备配置,最后发现是 PC 自己的问题,这种经历人人都有。常见的几个:

  • 网关没填或填错:跨网段流量压根发不出去。
  • 掩码写错:比如把 /24 写成 /16,PC 会认为对端在同一网段,于是直接发 ARP 找对方 MAC,永远找不到。
  • IP 地址冲突:两台 PC 用了同一个 IP,ARP 表会来回跳。
  • 防火墙软件拦截:尤其是 Windows 自带的防火墙,默认可能拦 ICMP 回显请求。表现是"能 ping 通网关,但对方 ping 不通我"。

排查时,先在 PC 上用ipconfig/ifconfig确认地址、掩码、网关三件套,再在 PC 上ping 网关。这一步能排除掉一大半"其实是 PC 的问题"。

7. 通了之后还要做什么:管控、自动化与扩展

VLAN 间通信配通只是起点。真实的网络里,通了之后紧接着要来的是三件事:管住谁能访问谁、让主机自动拿到地址、以及设备数量上来之后的路由打通

7.1 用 ACL 管住 VLAN 之间的访问关系

默认情况下,VLAN 间通信打通之后是全互通的。这在安全上通常不可接受——财务 VLAN 和访客 VLAN 显然不该随便互访。做法是在 SVI 上挂 ACL。

一个常见的需求是"只允许办公 VLAN 访问财务 VLAN 的某个服务器,其他一律拒绝"。用扩展 ACL 实现:

CoreSwitch(config)# ip access-list extended OFFICE_TO_FIN CoreSwitch(config-ext-nacl)# permit ip 192.168.10.0 0.0.0.255 host 192.168.20.100 CoreSwitch(config-ext-nacl)# deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 CoreSwitch(config-ext-nacl)# permit ip any any CoreSwitch(config-ext-nacl)# exit CoreSwitch(config)# interface vlan 10 CoreSwitch(config-if)# ip access-group OFFICE_TO_FIN in

这里有几处细节值得注意。通配符掩码是反的:0.0.0.255 表示"前 24 位必须匹配",不是 255.255.255.0,写错就完全不是你想要的效果。最后那条permit ip any any很关键,否则隐式拒绝会把所有其他流量(包括回程)一起干掉,表现就是"配了 ACL 之后整片 VLAN 都上不了网"。挂的方向(in / out)也要想清楚,in表示在进入 SVI 时检查,也就是从该 VLAN 出去的流量。

7.2 用 DHCP 中继让每个 VLAN 自动拿到地址

手动给每台 PC 配 IP 在实验里没问题,生产环境里不现实。通常做法是在某台服务器上跑 DHCP,然后在各 SVI 上用ip helper-address指向它:

CoreSwitch(config)# interface vlan 10 CoreSwitch(config-if)# ip helper-address 192.168.99.10 CoreSwitch(config-if)# exit

DHCP 请求本身是广播,正常情况下广播不会跨网段。ip helper-address的作用就是把这个广播转成单播,转发给指定的 DHCP 服务器,服务器再根据请求来源网段分配对应地址。这样一来,一台 DHCP 服务器就能服务所有 VLAN,不用每个网段都部署一台。

注意:ip helper-address默认会转发好几种 UDP 广播(不只是 DHCP),如果不希望其他广播被转发,可以用no ip forward-protocol udp之类的命令关掉不需要的类型。这个细节在小网络里影响不大,但网络一大就值得关注。

7.3 多台三层交换机之间怎么打通

单台三层交换机能覆盖的网络规模有限。当网络扩展到多台三层交换机时,VLAN 间通信的问题就变成"跨设备的路由"问题。常见做法有两种。

一种是每台设备都作为自己所辖 VLAN 的网关,然后设备之间跑动态路由协议(比如 OSPF)把各自网段宣告出去。这样每个 VLAN 的流量就近上到本地的三层交换机,转发效率高,也不会有单点故障。设备互联用的接口建议用前面提到的no switchport路由口。

另一种是所有 VLAN 的网关集中在核心,接入层只做二层。这种做法的好处是网关统一、策略集中,坏处是故障域集中——核心挂了整网受影响,而且跨设备的二层链路要靠生成树管理,规模大了容易出问题。

选择哪种,取决于网络规模和运维能力。我个人的看法是:中小规模用集中网关更简单,规模上去之后,网关必须下沉,否则核心会成为永远绕不过去的瓶颈和风险点。

7.4 配置留痕:show run之外你还需要一份文档

最后说一个容易忽略的事。配置跑通之后,把show running-config保存下来(write memory或者copy running-config startup-config),同时在外部维护一份地址规划文档:哪个 VLAN 对应哪个网段、哪台设备是网关、Trunk 上都放行了哪些 VLAN、ACL 的策略意图是什么。

终端的网络配置里,最贵的成本不是敲命令的时间,是半年后接手的人(很可能就是你自己)面对一堆配置猜不出意图。我自己的习惯是,配置里的 VLAN name 写清楚用途,SVI 上如果挂了 ACL,就在描述或注释里写一句为什么。这些额外花费的两分钟,将来能省下几个小时。

真正把 VLAN 间通信做扎实,靠的不是记住那几条命令——命令网上到处都是。靠的是理解"二层隔离、三层转发"这条主线,然后顺着它把每一段链路、每一个包的去向都想明白。这个思路理顺了,换成别的厂商设备,逻辑也是一样的,无非命令名字变了而已。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 0:58:03

n8n 里的 MCP 调用,改走 TaoToken 通道行不行?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 0:57:42

opencodex 代理 Codex 时 404?TaoToken 的 Base URL 别多加 /v1。

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 0:57:30

AI前沿资讯日报:内容架构与技术实现全解析

1. 项目概述"2026年03月09日 AI前沿资讯日报"是一个典型的科技资讯聚合项目&#xff0c;旨在为AI从业者、研究人员和技术爱好者提供当日最新的人工智能领域动态。这类日报通常包含前沿论文解读、行业新闻、技术突破、企业动态等内容&#xff0c;帮助读者快速掌握AI领…

作者头像 李华
网站建设 2026/9/17 0:56:34

分布式能源并网多目标优化控制方案解析

1. 项目概述在分布式能源系统并网运行过程中&#xff0c;电网故障是最具挑战性的工况之一。当电网出现电压跌落、频率波动等异常情况时&#xff0c;传统的并网转换器&#xff08;GCC&#xff09;控制策略往往难以同时满足多种性能指标要求。这个项目通过Matlab/Simulink平台&am…

作者头像 李华
网站建设 2026/9/17 0:55:51

Vue3+Vite中xlsx-style导出Excel报错解决:配置与替代方案

这段时间在做 vue3 vite 后台管理系统&#xff0c;到了一个绕不开的场景&#xff1a;把表格导出成 Excel。光导出数据还不算完&#xff0c;客户指着样表说&#xff0c;没有边框、没有底色、没有合并单元格&#xff0c;这能用&#xff1f;于是我把目光瞄向了 xlsx-style 这个库…

作者头像 李华
网站建设 2026/9/17 0:53:56

STM32 ADC-DMA协同:电压采样系统稳定性的底层协议

1. 为什么“ADC-DMA协同”不是锦上添花&#xff0c;而是电压采样系统的生死线在STM32F411CEU6这类中高端MCU上做电压采样&#xff0c;很多人第一反应是&#xff1a;开个ADC&#xff0c;配个定时器触发&#xff0c;进中断读寄存器——代码三分钟写完&#xff0c;烧进去一跑&…

作者头像 李华