
1. 为什么非要在VLAN之间“架一座桥”很多人第一次接触VLAN间的通信都会卡在同一个地方明明两台PC的网线都插得好好的交换机指示灯也正常交换机上show vlan也都能看到各自的VLAN可两台机器就是ping不通。原因不复杂——VLAN的本质就是把一台交换机切成若干个互不相干的广播域二层上它们完全隔离就像两栋楼之间没有门。VLAN带来的是广播域收敛、故障域隔离、安全性提升这些实打实的好处但代价就是跨VLAN的流量必须经过一个具备路由能力的设备做三层转发否则永远出不去。单臂路由Router-on-a-Stick就是解决这个问题的经典方案之一它的核心价值在于用一台路由器的一个物理接口同时承担多个VLAN的网关角色让VLAN之间的流量在这一个接口上进进出出完成三层转发。它解决的是“设备预算有限、又想实现VLAN间互通”这个非常现实的问题尤其适合中小型办公网络、实验室环境、教学演示和临时组网。读这篇内容的人大概率是刚开始学网络方向的学生、刚接手企业网运维的新人或者手上有一台路由器一台交换机、想弄明白子接口到底怎么回事的技术爱好者。我会把这套东西从设计思路、底层原理、完整配置、参数取舍到排错方法一次讲透能直接照着搭、照着抄。2. 单臂路由的运作机理一条物理线扛起多个广播域2.1 三种打通VLAN的思路为什么最后选了它在动手前先把这个选择题做完否则后面的配置就是死记硬背。让两个VLAN互通业内常见三条路。第一条是多物理接口方案路由器上插多块网卡每个VLAN对应一个物理接口交换机上每个VLAN拉一根线接到路由器。这种方式最直观配置最简单但扩展性极差——8个VLAN就要8个路由器接口接口就是钱而且路由器上每块接口卡都不便宜。VLAN一多接口根本不够用。第二条是三层交换机 SVI方案直接在交换机上为每个VLAN创建一个VLAN虚拟接口SVI配上IP当网关开启ip routing转发由硬件ASIC完成。这是今天生产环境的主流做法性能最好延迟最低。但它要求设备本身支持三层功能成本比纯二层交换机高。第三条就是本文的主角单臂路由交换机用一条Trunk链路接到路由器的一个物理接口上路由器在这个物理接口上划分出多个逻辑子接口每个子接口对应一个VLAN、配一个网关地址。流量在Trunk上以带802.1Q标签的帧形式穿梭路由器负责撕标签、查路由、重新贴标签。注意选型不是看哪个“高级”而是看约束条件。手头只有一台二层交换机和一台路由器单臂路由是唯一可行解如果交换机本身支持三层就没必要绕这么一圈。单臂路由的优势很明确省接口、省成本、配置集中在一台设备上路由策略ACL、NAT、QoS可以统一在路由器上做。劣势同样明确所有VLAN的流量都挤在一条物理链路上命中了单点瓶颈而且每个跨VLAN数据包都要经过路由器的软件转发性能远不如三层交换机的硬件转发。这个取舍必须在设计阶段就想清楚别等网络跑起来才发现卡。2.2 子接口不是新网卡是逻辑上的“分身”初学者最容易误解的一点是把子接口当成“又插了一块网卡”。实际上子接口Subinterface是路由器操作系统内部维护的一个逻辑接口实体它和物理接口共享同一块硬件、同一条链路、同一个MAC地址池但在配置层面拥有独立的IP地址、独立的封装方式、独立的ACL和独立的计数统计。可以这么类比物理接口是一条高速公路子接口就是这条路上划分出的不同车道每条车道跑不同VLAN的车路面只有一条但管理上是分开的。路由器在数据包进入物理接口时会先读802.1Q标签里的VLAN ID然后按这个ID把帧“分拣”给对应的子接口处理出方向则反过来子接口处理完、做好路由决策后由物理接口统一发出去并在出口处按子接口的封装配置打上对应标签。这里有个经常被忽略的细节在绝大多数思科路由器平台上子接口默认继承物理接口的MAC地址所以show interfaces看下去所有子接口的MAC是一样的。这本身没问题因为区分它们的是VLAN标签而不是MAC。但如果你在同一个物理接口上配了两个子接口指向同一个VLAN、或者同一个VLAN被两个子接口抢就会出现转发混乱。部分平台支持给子接口单独指定MACmac-address命令但不是所有型号都能用做实验时不要依赖这个特性。2.3 802.1Q标签的贴与撕一次跨VLAN通信的完整旅程真正理解单臂路由得跟着一个包走一遍。假设VLAN 10里有一台PC-A192.168.10.10/24网关192.168.10.1VLAN 20里有一台PC-B192.168.20.10/24网关192.168.20.1两个网关都配在路由器的同一个物理接口G0/0的子接口上。第一步PC-A判断目的地址。192.168.20.10和192.168.10.10不在同一网段按/24掩码算PC-A知道自己转发不了必须交给默认网关。于是它发起ARP请求“谁是192.168.10.1”这个ARP请求以广播帧形式发出源MAC是PC-A自己目的MAC是全F。第二步交换机在VLAN 10内泛洪。交换机把这个广播帧只在VLAN 10的成员端口里泛洪同时Trunk口也是VLAN 10的成员于是帧被送到Trunk口。因为VLAN 10不是Native VLAN交换机会在帧头插入4字节的802.1Q标签VLAN ID字段填10然后从Trunk口发出。第三步路由器收到带标签的帧。物理接口G0/0收到帧读取标签中的VLAN ID10查表发现G0/0.10这个子接口配置了encapsulation dot1Q 10于是把帧交给子接口G0/0.10处理同时剥掉标签。子接口发现这是一个ARP请求且目标IP正是自己的地址于是回一个ARP应答源MAC填G0/0.10的MAC。应答帧出方向时物理接口按子接口配置重新打上VLAN 10的标签送回交换机交换机再转给PC-A。第四步PC-A正式发包。它把目的MAC填成网关MACIP头里目的IP仍是192.168.20.10封装好后发出去整个路径和ARP应答一样帧被贴上VLAN 10标签送到路由器。第五步路由器做路由决策。子接口G0/0.10剥掉标签后把包交给路由引擎。路由表里有一条直连路由C 192.168.20.0/24 is directly connected, GigabitEthernet0/0.20出接口指向G0/0.20。于是路由器把包的TTL减一、重新封装二层头源MAC变成G0/0.20的MAC目的MAC需要先ARP得到PC-B的MAC然后在出方向打上VLAN 20的标签从物理接口G0/0发出去。第六步交换机按VLAN 20转发。Trunk口收到带VLAN 20标签的帧剥掉标签查VLAN 20的MAC表精准转发到PC-B所在的接入端口。PC-B收到后回包整个过程反向重复一遍。走完这一圈你会发现一个跨VLAN的来回通信路由器要处理四次两次进、两次出每次都要做一次标签的剥离和重打。这就是单臂路由性能不如三层交换机硬件转发的根本原因——它把二层交换的工作交给了三层软件转发来做。2.4 原生VLAN一个必须提前想清楚的问题802.1Q有个特殊设定Native VLAN原生VLAN的帧在Trunk上传输时不打标签。这是为了兼容不支持802.1Q的老设备但也成了单臂路由最容易被绊倒的地方。假设交换机Trunk口的Native VLAN是默认的VLAN 1路由器子接口配置成encapsulation dot1Q 1那么这个子接口收到的帧是不带标签的——路由器怎么知道这属于VLAN 1答案就是native关键字必须在子接口上写encapsulation dot1Q 1 native告诉路由器“这个VLAN的流量是不打标签的你按无标签帧处理”。少了这个关键字VLAN 1的流量就通不了而其它VLAN一切正常这种“只坏一个”的现象最容易让人抓瞎。更隐蔽的情况是两端Native VLAN不一致。交换机认为VLAN 1是Native路由器却把VLAN 10当成Native处理结果就是VLAN 1的无标签帧被路由器当成VLAN 10处理VLAN 10的带标签帧又被丢弃同时CDP会报Native VLAN mismatch告警。实际工程里我的习惯是要么两边Native VLAN统一规划成某个不承载业务的空VLAN要么干脆把所有子接口都配成打标签只保留一个native子接口用于管理。别让Native VLAN承载业务流量这是减少故障面的有效做法。3. 从零搭一套可复现的实验环境3.1 拓扑规划与地址分配配置之前先把表画出来这一步省不得。很多人上来就敲命令敲到一半忘了哪个VLAN对应哪个网段回头翻记录反而更慢。我习惯用一张表把VLAN、网段、网关、子接口、接入端口全部锁死。项目VLAN 10VLAN 20VLAN 99管理网段192.168.10.0/24192.168.20.0/24192.168.99.0/24网关地址192.168.10.1192.168.20.1192.168.99.1路由器子接口G0/0.10G0/0.20G0/0.99交换机接入端口Fa0/1Fa0/2Fa0/24终端地址192.168.10.10192.168.20.10—终端网关192.168.10.1192.168.20.1—物理连接很简单交换机Fa0/1接PC-AFa0/2接PC-B交换机的G0/1或任意一个千兆口用直通线接到路由器的G0/0。这里有个小提醒Trunk链路两端最好是同一速率等级的端口别一头千兆一头百兆虽然能协商成功但排查问题时容易多一层干扰因素。实验环境里我更倾向手工把速率和双工写死speed 1000、duplex full避免自协商带来的不确定性。3.2 交换机侧Access口与Trunk口的分工交换机上有两类端口角色必须分清。接终端的口是Access口只属于一个VLAN收发的都是无标签帧接路由器的口是Trunk口要承载多个VLAN收发的帧带标签。先建VLANSwitch(config)# vlan 10 Switch(config-vlan)# name Sales Switch(config-vlan)# vlan 20 Switch(config-vlan)# name Tech Switch(config-vlan)# vlan 99 Switch(config-vlan)# name Mgmt再配接入端口。这里有个细节值得说配switchport mode access之后再配switchport access vlan 10如果顺序反了某些IOS版本会先把端口从默认VLAN 1挪走再挪回来日志里会多两条无意义的记录虽然不影响功能但排错时看日志容易误判。Switch(config)# interface FastEthernet0/1 Switch(config-if)# switchport mode access Switch(config-if)# switchport access vlan 10 Switch(config-if)# spanning-tree portfast Switch(config)# interface FastEthernet0/2 Switch(config-if)# switchport mode access Switch(config-if)# switchport access vlan 20 Switch(config-if)# spanning-tree portfastspanning-tree portfast这行是给接终端的口用的跳过STP的监听学习阶段插上线立刻能通省掉三十秒等待。只对终端口用Trunk口和对接口千万别加否则可能引入环路风险。接着配Trunk口。老一些的交换机平台在配Trunk前必须显式指定封装类型因为历史上同时支持ISL和802.1Q现在基本只剩dot1Q了但命令还是得敲Switch(config)# interface GigabitEthernet0/1 Switch(config-if)# switchport trunk encapsulation dot1q Switch(config-if)# switchport mode trunk Switch(config-if)# switchport trunk native vlan 99 Switch(config-if)# switchport trunk allowed vlan 10,20,99 Switch(config-if)# switchport nonegotiate这几行里有两行值得单独解释。switchport trunk allowed vlan是白名单机制只放行列出的VLAN这是减少不必要泛洪和提升安全性的有效手段——尤其在生产环境里别让它默认放行全部。switchport nonegotiate关掉DTP协商避免端口被对端“聊”成Trunk或者聊回Access链路两端的模式永远手工定死不给自己留隐患。3.3 路由器侧子接口与封装是成败关键路由器这边是整套方案的核心。物理接口只需要no shutdown不要配IP地址这一点必须强调物理接口一旦配了IP它自己就成了一个独立的三层接口会和子接口抢流量路由表里还会多出一条莫名其妙的直连路由非常容易把人带沟里。Router(config)# interface GigabitEthernet0/0 Router(config-if)# no shutdown Router(config-if)# no ip address然后是子接口。子接口编号的写法是物理接口.编号这个编号只是个本地标识和VLAN ID没有任何强制绑定关系但强烈建议保持一致否则三个月后回来看配置没人能一眼看懂G0/0.7对应的是哪个VLAN。真正的绑定发生在encapsulation dot1Q后面那个数字上。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)# no shutdown 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)# no shutdown Router(config)# interface GigabitEthernet0/0.99 Router(config-subif)# encapsulation dot1Q 99 native Router(config-subif)# ip address 192.168.99.1 255.255.255.0 Router(config-subif)# no shutdown注意.99这个子接口带了native关键字因为交换机那边的Native VLAN被我改成了99两边的Native VLAN必须完全一致否则VLAN 99的流量会被错误处理。这也顺便解释了为什么我把管理VLAN单独拎出来当Native它不承载业务即使出问题也不影响用户。命令敲完之后必须验证show ip interface brief应该能看到三个子接口都是up/up状态Router# show ip interface brief Interface IP-Address OK? Method Status Protocol GigabitEthernet0/0 unassigned YES NVRAM up up GigabitEthernet0/0.10 192.168.10.1 YES manual up up GigabitEthernet0/0.20 192.168.20.1 YES manual up up GigabitEthernet0/0.99 192.168.99.1 YES manual up up如果某个子接口的Status是down八成是封装没配、或者封装里的VLAN ID和交换机那边对不上、或者物理接口没起来。这个判断顺序后面排错章节还会细讲。3.4 终端配置与连通性验证终端侧最容易犯的低级错误就是网关没配或者配错。PC-A的IP设192.168.10.10掩码255.255.255.0网关必须填192.168.10.1——注意如果把网关填成192.168.20.1PC-A根本发不出去包因为它连网关的ARP都请求不到跨网段ARP发不出去。这个坑在新手实验里出现频率极高。配好之后按顺序验证别一上来就ping那样出了问题不知道卡在哪一层! 第一步看路由表里有没有直连网段 Router# show ip route C 192.168.10.0/24 is directly connected, GigabitEthernet0/0.10 C 192.168.20.0/24 is directly connected, GigabitEthernet0/0.20 C 192.168.99.0/24 is directly connected, GigabitEthernet0/0.99 ! 第二步看交换机Trunk状态和放行的VLAN Switch# show interfaces trunk Port Mode Encapsulation Status Native vlan Gi0/1 on 802.1q trunking 99 Port Vlans allowed on trunk Gi0/1 10,20,99 Port Vlans allowed and active in management domain Gi0/1 10,20,99 ! 第三步看子接口是否真的收到了流量 Router# show interfaces GigabitEthernet0/0.10 GigabitEthernet0/0.10 is up, line protocol is up Hardware is ... Internet address is 192.168.10.1/24 MTU 1500 bytes, BW 1000000 Kbit/sec 5 minute input rate 0 bits/sec, 5 minute output rate 0 bits/sec确认这些都没问题再从PC-A去ping PC-B。第一次ping丢一两个包是正常的因为路由器要先ARP到PC-B的MAC才能封装帧这叫ARP解析延迟不是故障。后续再ping应该稳定通。如果一直不通看show ip arp有没有学到对方的MAC这一步能快速判断是二层没通还是三层有问题。4. 关键参数与配置细节的取舍4.1 子接口编号、VLAN ID与封装数字到底谁说了算这三个数字经常被混为一谈实际关系是子接口编号只是路由器本地的名字VLAN ID才是真正的标签值封装数字决定用哪个VLAN ID收发帧IP地址决定这个子接口是哪个网段的网关。举个反例如果写成interface G0/0.20配encapsulation dot1Q 10功能上完全正常——它会处理VLAN 10的流量只是名字叫.20看起来别扭。但如果写成interface G0/0.10配encapsulation dot1Q 20而交换机那边VLAN 10的流量发过来路由器收到标签10找不到匹配dot1Q 10的子接口帧被直接丢弃。这就是“配了但不通”最常见的技术原因之一。所以我的习惯是子接口编号 VLAN ID 封装数字 网段第三段四者强绑定。比如VLAN 10用192.168.10.0/24、子接口G0/0.10、encapsulation dot1Q 10。这种“一个数字贯穿到底”的规划方式在几十个VLAN的环境里能省下大量核对时间新人接手也能立刻看懂。4.2 物理接口上到底该不该配IP答案是不该但理由值得说清楚。物理接口本身是一个三层接口一旦配上IP它就具备了自己的封装和转发能力。此时如果子接口也存在而父接口又没被显式关闭可能出现几种混乱物理接口自己响应ARP、路由表里多出一条指向物理口的直连路由、某些IOS版本会提示子接口状态受父接口影响。更麻烦的是如果物理接口配的IP恰好和别人规划的某个VLAN网关重叠就会出现地址冲突查起来极其费劲。所以标准做法就是父接口只做no shutdown不配任何IP接口地址全部落在子接口上。有些平台上父接口必须跟上no ip address显式清除别嫌麻烦敲一行省一小时。4.3 MTU、帧长度和那看不见的4个字节802.1Q标签是4个字节插在源MAC之后、类型字段之前。这意味着一个标准1500字节的IP包在Trunk上实际传输的以太网帧长度会变成151841522字节不含前导码和FCS。普通的以太网接口默认能处理1522字节的帧所以绝大多数场景下不用改MTU。但有两种情况需要注意。第一种是链路上串了非标准设备某些老旧网桥、某些虚拟化环境的内置交换机它们可能把1522当作超长帧丢弃症状是大包不通小包通ping 1472字节能过、ping 1473就丢。第二种是Trunk上叠加了其它封装比如MPLS或隧道444累加起来就超过了默认帧长需要调整system mtu或者路由器的mtu。排查大包不通的问题最直接的方法是用不同长度的ping试探Router# ping 192.168.20.10 size 1472 repeat 5 !!!!! Router# ping 192.168.20.10 size 1473 repeat 5 .....1472能通、1473不通基本可以锁定是MTU问题14728 ICMP头20 IP头1500。这个判据在实际现场非常好用比闷头猜要快得多。4.4 单臂路由的性能天花板在哪必须承认单臂路由是有明确性能边界的它的瓶颈来自三个地方叠加。第一层是物理链路带宽被所有VLAN共享。1000M的TrunkVLAN 10和VLAN 20各跑500M就已经打满了跨VLAN互访的总量不会超过这条线的容量。规划时要把所有VLAN间流量的总和算在这条链路上。第二层是路由器接口的包转发能力。不同型号差异巨大低端型号可能只有几十Kpps每秒千包的转发能力按平均包长500字节算65Kpps大约只能跑260Mbps左右。这个数字必须查设备的规格参数不能想当然。第三层是软件转发带来的时延。每个跨VLAN包都要经历剥标签、查路由、重封装、再打标签的完整流程路径比二层交换长得多延迟通常在几十微秒到毫秒级对普通办公无感但对高频交易、实时音视频就不合适了。下面这张表可以直观看到两条技术路线的差异对比维度单臂路由三层交换机SVI转发方式软件路由硬件ASIC网关数量上限受子接口数量限制受VLAN数量限制带宽瓶颈单条Trunk链路背板带宽时延较高低设备成本低利用现成路由器较高适合规模小型网络、实验环境中大型生产网络策略控制点集中在路由器便于做ACL/NAT分散在各SVI我的实际操作体会是VLAN数量在10个以内、跨VLAN流量不超过百兆、对延迟不敏感的场景单臂路由完全够用而且配置集中、便于管理。一旦超过这个量级就该考虑上三层交换机了硬扛只会让网络成为业务瓶颈。5. 排错实录配了但不通的那些经典场景5.1 先看物理层和Trunk别急着怀疑子接口出问题时的排查顺序非常关键我习惯从下往上走物理层 → 二层 → 三层 → 终端。很多人一上来就看子接口配置结果绕一大圈发现是网线插错了口。第一步确认物理接口状态。show ip interface brief里父接口必须是up/up交换机侧对应端口也必须是connected。如果父接口是down先查线、查速率双工、查光模块别往下走。第二步确认Trunk真的起来了。show interfaces trunk的输出里Status必须是trunkingEncapsulation必须是802.1qNative vlan要和路由器native子接口的VLAN ID一致Vlans allowed on trunk必须包含你要通的所有VLAN。这里最常见的坑是switchport trunk allowed vlan写成了白名单但漏了某个VLAN或者直接配了allowed vlan 10而漏了20症状是VLAN 10通、VLAN 20死活不通。第三步确认VLAN在交换机上是active的。show vlan brief里如果某个VLAN的Status是act/unsup而不是active说明没有活动端口或者VLAN没建全Trunk上这个VLAN的流量会被直接丢。提示交换机和路由器之间的Trunk如果一端配了nonegotiate、另一端还开着DTP某些平台会协商失败端口停在access模式。要么两端都nonegotiate要么都手工mode trunk别混着来。5.2 子接口的坑九成出在封装和状态上Trunk确认无误后问题基本就在子接口了。按这个顺序看。第一子接口有没有配封装。没配encapsulation dot1Q XX的子接口是down状态show ip interface brief里Protocol一栏会是down。这是最常见的原因尤其是一次配多个子接口时漏敲一行。第二封装数字和VLAN ID是否一致。不一致时的现象很典型子接口状态up但收发计数一直是0因为进来的帧按标签找不到匹配的子接口直接被丢弃。这时候show interfaces G0/0.10看input packets如果是0基本可以断定标签没对上。第三Native VLAN有没有配native关键字。交换机Native VLAN是99路由器子接口只写了encapsulation dot1Q 99没写native那么VLAN 99的帧无标签进来后路由器无法识别这个VLAN就通不了而其它VLAN一切正常。这种“只坏一个”的现象是最容易让人怀疑人生的。第四子接口是否被shutdown。某些平台上新建子接口默认继承父接口状态父接口起来了但子接口需要单独no shutdown。虽然多数现代IOS不需要但遇到诡异的down状态敲一下不亏。第五父接口是不是被误配了IP。如果父接口上有一条ip address路由表里会多一条直连路由某些流量可能被错误地送到父接口而不是子接口表现为间歇性不通。查show run interface G0/0就能看到。5.3 三层通了但终端不通问题往往在终端和ARP子接口和路由表都正常、交换机也正常但PC就是ping不通网关这种情况我也遇到过不少次原因五花八门。最基础的是PC网关填错。填成另一个VLAN的网关地址PC会尝试ARP那个地址因为不在同网段ARP根本发不出去现象是“网关ping不通、同VLAN内互ping正常”。其次是PC掩码填错比如VLAN 10是/24网段PC却配了/16掩码那么PC会认为192.168.20.10和自己同网段直接ARP对方而不是找网关结果当然不通。再就是PC防火墙拦ICMP。Windows默认防火墙会拦ping请求从PC-A ping PC-B可能一直超时但从路由器ping两边都通。这时候别急着改网络配置先看终端防火墙状态。还有一种情况是ARP表项残留。换过网关地址或者改过网段之后PC上还留着旧的ARP缓存需要arp -d清一下。这个坑在实验室里特别常见因为大家反复改配置缓存不清就会一直报“目的主机不可达”。最后是ACL误拦。如果子接口上挂了ip access-group规则顺序写错或者反掩码算错会把正常流量拦掉。查show ip access-lists看命中计数如果某条deny的计数在涨问题就找到了。5.4 一张速查表把常见症状和根因对上号现场排错最怕思路发散我整理了一张对照表遇到问题先按症状归类再往根因上靠能省下大量试错时间。症状表现最可能的根因快速验证方法所有VLAN都不通物理链路断、Trunk未建立show interfaces trunk看状态单个VLAN不通其它正常封装数字不匹配、VLAN未放行、Native关键字缺失对比子接口封装与VLAN ID子接口状态down未配封装、父接口shutdownshow ip interface brief子接口up但收包为0标签值对不上、VLAN白名单漏配show interfaces G0/0.x看input计数网关能ping通跨VLAN不通终端掩码或网关配错、PC防火墙路由器上ping两端终端对比小包通、大包丢MTU或帧长限制用1472/1473字节ping对比时通时不通ARP缓存残留、STP收敛、ACL部分命中清ARP缓存、看STP拓扑变化CDP报Native VLAN mismatch两端Native VLAN不一致两端show interfaces trunk对比有了这张表大部分问题能在一两分钟内定位到方向剩下的就是逐条验证。6. 一些不太写进文档的实操心得配置本身其实不难难的是让这套东西长期稳定跑着以及在出问题时能快速定位。分享几条我反复踩坑之后总结的经验。关于子接口的数量规划。路由器子接口理论上是够用的但每条子接口都要占内存和转发表项几十个以上就要评估设备负载了。我的做法是业务VLAN按需创建管理类VLAN合并能不单独开就不单独开。关于Trunk的VLAN白名单。新人图省事喜欢用switchport trunk allowed vlan all实验室里没问题但一旦接进真实网络STP的BPDU、各种广播都会顺着Trunk漫延出故障时排查面立刻放大。养成写白名单的习惯改一次配置多花十秒少排一次故障省一小时。关于配置备份。单臂路由的配置集中在路由器的几个子接口上一旦设备重启或者误操作清空恢复起来不难但很烦。我的习惯是每次改完就show run导出一份命名带上日期和VLAN范围。这个动作在实验环境里显得多余但真出事的时候能救命。关于验证顺序。我坚持“先看路由表、再看Trunk、最后看子接口计数”这个顺序因为它符合数据流的反向路径。路由表说明三层规划对不对Trunk说明二层通道通不通子接口计数说明实际有没有流量进来。三者一致问题基本就能锁定。关于Native VLAN的使用。我现在的习惯是所有业务子接口一律打标签Native VLAN专门留一个不承载业务的管理VLAN。这样做的代价是管理VLAN必须显式配native好处是业务流量永远不会因为“无标签”这个特例而出现意外。这个取舍在小网络里体会不深但在VLAN数量多起来之后能避免掉一大类难以复现的问题。关于和三层交换机的边界。我见过不少网络明明交换机支持三层还硬要用单臂路由理由是“路由器上做ACL方便”。这个理由在流量小的时候成立一旦跨VLAN流量上到几百兆路由器CPU就开始吃力ping的延迟从1ms跳到几十毫秒。判断标准很简单show processes cpu看中断和转发进程的占用如果跨VLAN流量高峰期CPU持续超过60%就该重新考虑架构了。关于文档。单臂路由的配置看起来一目了然但真正难记的是“哪个VLAN对应哪个子接口、哪个网段、哪个接入端口”。我现在的做法是在设备上写description比如interface G0/0.10下面加一行description VLAN10-Sales-192.168.10.0/24配合交换机端口的description几个月后回来看一眼就懂。这个习惯成本极低收益极高。最后再提一句容易被忽略的单臂路由的所有VLAN共用同一个物理接口的带宽和队列如果某个VLAN跑了大流量比如备份、视频监控回传会直接影响到其它VLAN的体验。真要跑就得在子接口上做QoS给关键业务留出带宽别让一条Trunk被一个业务吃干净。