ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

跨交换机VLAN通信:Trunk、Access与PVID配置全解析

跨交换机VLAN通信:Trunk、Access与PVID配置全解析 两台二层交换机各自划分了 VLAN用网线把交换机一接PC 跨交换机居然 ping 不通或者 ping 通了但又和不该通的终端通了。这个问题在刚入门网络配置时几乎必踩。今天我们就把“交换机之间的通信带 VLAN 的情况”整体拆一遍为什么不能直接随手拿根网线互接Access 和 Trunk 到底怎么选不同厂商的命令怎么配PVID 又是怎么影响未打标报文的最后再给一套排障路径。1. 核心信息速览项目说明主题两台交换机互联时带 VLAN 的通信原理与配置适用设备华为 S 系列、思科 Catalyst、华三H3C等二层/三层交换机核心知识点Access 端口、Trunk 端口、PVID、VLAN Tag、Native VLAN解决场景跨交换机同 VLAN 通信、跨交换机 VLAN 间路由、连通性排障配置方式CLI 命令行、Console 线、SSH也可使用 eNSP 模拟器复现常用验证命令display vlan brief、display port vlan、display interface trunk、show vlan brief这篇文章适合刚接触交换配置的网工新人也适合在华为和思科两种 CLI 之间切换时需要快速对照命令的运维同学。读完你可以照着拓扑做实验然后把它迁移到真实设备上。2. 两个交换机都带 VLAN为什么不能直接互接很多人的第一次失败是把两台交换机的普通端口直接用网线连通然后在两台交换机上分别建了 VLAN 10、VLAN 20给 PC 划分了 Access 端口结果发现同一台交换机下的两个同 VLAN 终端能通跨交换机的同 VLAN 终端不通跨交换机的不同 VLAN 终端更不通。原因是交换机之间的互联链路默认并没有被“告知”该放行哪些 VLAN。二层交换机转发数据时依赖端口上记录的 VLAN 信息。Access 口只属于一个 VLAN默认情况下对于其他 VLAN 的帧是“不关心也不转发”的。当两台交换机的互联口都还是 Access 模式并且属于不同 VLAN 的时候从 SwitchA 进入 VLAN 10 的帧在出 SwitchA 互联口时会原样往对端发对端收到后只能按对端端口的 PVID 去理解这个帧属于哪个 VLAN。如果对端互联口的 PVID 是 VLAN 1这个带 VLAN 10 Tag 的帧就根本不会匹配对端 Access 口的预期最终被丢弃或乱分类。即使你把两边互联口划到同一个 VLAN比如都划到 VLAN 10那也只是在两条交换机之间建立了一个“只属于 VLAN 10”的通道VLAN 20 还是过不去。要解决这个问题需要在交换机之间的互联链路上使用 Trunk 口把一个或多个 VLAN 的帧统一从这条链路上放行。3. Access 与 Trunk什么时候必须用 Trunk交换机的端口链路类型简单理解就是“面向谁”的问题。端口类型典型接入对象承载 VLAN 数量报文处理方式Access 口终端 PC、打印机、服务器网卡1 个收到无 Tag 帧时打上 PVID 对应的 VLAN发往终端时剥离 TagTrunk 口交换机之间、交换机与路由器子接口多个根据放行列表转发多个 VLAN 的帧PVID 内的帧在部分场景下不打 TagHybrid 口华为特有多个可配置指定 VLAN 是否打 Tag灵活度最高但容易配乱当两台交换机之间需要同时承载多个 VLAN 的流量时必须使用 Trunk。如果只是把两台交换机上相同 VLAN 的终端接在一起并且交换机之间只跑一个 VLAN也可以使用两端 Access 同 VLAN 的方式但这不具备扩展性后续每新增一个 VLAN 就要再加一条链路所以不建议。这里还要区分一个概念Trunk 不代表“所有 VLAN 都放行”。即使交换机的端口变成了 Trunk 口还要在 Trunk 上显式配置允许通过的 VLAN 列表。默认情况下华为交换机 Trunk 口只放行 VLAN 1思科交换机的 Trunk 口默认放行所有 VLAN。这是跨厂商切换时特别容易踩的坑。4. 实验拓扑与跨交换机 VLAN 通信设计为了让配置过程更具体我们使用一个最简单的双交换机拓扑SwitchA 和 SwitchB 用千兆口互联PC1 接 SwitchA 的 G0/0/1IP 为 192.168.10.1/24PC2 接 SwitchB 的 G0/0/1IP 为 192.168.10.2/24两个设备同属 VLAN 10PC3 接 SwitchA 的 G0/0/2IP 为 192.168.20.1/24PC4 接 SwitchB 的 G0/0/2IP 为 192.168.20.2/24两个设备同属 VLAN 20交换机互联口为 G0/0/24Trunk 放行 VLAN 10 和 VLAN 20。拓扑用文本描述如下VLAN 10: PC1 --- SwitchA G0/0/1 VLAN 20: PC3 --- SwitchA G0/0/2 | G0/0/24 Trunk | VLAN 10: PC2 --- SwitchB G0/0/1 VLAN 20: PC4 --- SwitchB G0/0/2目标PC1 与 PC2 能互通PC3 与 PC4 能互通PC1 与 PC3 默认不能互通因为 VLAN 隔离了广播域如果需要 PC1 访问 PC3需要额外配置 VLAN 间路由。如果使用 eNSP 模拟器做实验建议先按这个拓扑拖出两台交换机再开始配置命令。5. 华为交换机跨交换机 VLAN 配置以华为 S 系列交换机为例。先把 SwitchA 的基础 VLAN 和端口配置好。system-view sysname SwitchA # 创建 VLAN 10 和 VLAN 20 vlan batch 10 20 # 接入 PC1 的端口 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit # 接入 PC3 的端口 interface GigabitEthernet0/0/2 port link-type access port default vlan 20 quitSwitchB 上做同样的操作只是把 PC 接到对应用户侧端口上。system-view sysname SwitchB vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit interface GigabitEthernet0/0/2 port link-type access port default vlan 20 quit接下来是关键SwitchA 和 SwitchB 的互联口 G0/0/24 都要配成 Trunkinterface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 quit在华为设备上如果不写port trunk pvid vlan xTrunk 口的 PVID 默认是 VLAN 1。只要互联口两端的 PVID 保持一致并且allow-pass列表覆盖了需要通信的 VLAN一般就能正常工作。需要注意一个细节华为 Trunk 口默认放行 VLAN 1。如果 VLAN 1 里面没有接终端设备通常不影响实验但如果公司内部把 VLAN 1 当作管理 VLAN跨交换机互联时又不希望 VLAN 1 的广播报文通过 Trunk就需要显式移除interface GigabitEthernet0/0/24 undo port trunk allow-pass vlan 1 quit另外热词里出现过的port trunk pvid vlan 10用来把 Trunk 口的 PVID 改成 VLAN 10这个命令的常见用途是统一管理未打标帧的归属。配置后该端口收到的无 Tag 帧会按照 VLAN 10 处理发送 VLAN 10 的帧时在多数情况下会剥离 Tag。如果两端 Trunk 的 PVID 不一致很可能出现“未知 VLAN 的帧被错误映射”的问题。配置完成后在 SwitchA 和 SwitchB 上分别执行display vlan brief能看到 VLAN 10 和 VLAN 20 都已创建并且对应的端口已经加入。再执行display port vlan可以查看每个端口的链路类型、PVID 和允许通过的 VLAN。这是验证 Trunk 配置是否生效的最快方式。如果局域网里还有华三交换机配置思路类似命令也很接近。华三创建 VLAN 常用vlan 10进入 VLAN 视图再使用port GigabitEthernet1/0/1将端口加入 VLANTrunk 口则使用port link-type trunk和port trunk permit vlan 10 20。需要注意华三的放行命令是permit不是华为的allow-pass。6. 思科交换机跨交换机 VLAN 配置现在换到思科 Catalyst 交换机。同一套拓扑用户侧端口用 Access互联口用 Trunk。configure terminal hostname SwitchA # 创建 VLAN vlan 10 name VLAN10 exit vlan 20 name VLAN20 exit # 接入 PC1 的端口 interface FastEthernet0/1 switchport mode access switchport access vlan 10 exit # 接入 PC3 的端口 interface FastEthernet0/2 switchport mode access switchport access vlan 20 exitSwitchB 同理configure terminal hostname SwitchB vlan 10 name VLAN10 exit vlan 20 name VLAN20 exit interface FastEthernet0/1 switchport mode access switchport access vlan 10 exit interface FastEthernet0/2 switchport mode access switchport access vlan 20 exit两台交换机的互联口配置为 Trunkinterface GigabitEthernet0/1 switchport mode trunk switchport trunk allowed vlan 10,20 exit这里就出现了和华为不一样的地方思科交换机一旦把端口切到 Trunk 模式默认允许所有 VLAN 通过。虽然不改allowed vlan也能通但为了收敛广播域最好显式写switchport trunk allowed vlan 10,20。思科的 Trunk 默认 Native VLAN 是 VLAN 1。如果两台交换机之间跑的是 802.1Q TrunkNative VLAN 不一致会导致未打标帧在两端被划分到不同 VLAN进而形成二层环路或广播串扰。所以跨交换机互联时要么保持两端 Native VLAN 一致要么把 Native VLAN 改成同一个非业务 VLAN。修改 Native VLAN 的命令interface GigabitEthernet0/1 switchport trunk native vlan 100 exit注意如果两端 Native VLAN 都改成 VLAN 100那么互联链路上所有不带 802.1Q Tag 的帧都会归属到 VLAN 100需要保证该 VLAN 在两端都存在。思科上验证 Trunk 状态show interfaces trunk show vlan brief show interfaces statusshow vlan brief的输出里能看到各 VLAN 下有哪些端口show interfaces trunk会显示 Trunk 口处于哪种模式、Native VLAN 是几、允许的 VLAN 列表是什么。排障时先看这两条命令。7. Trunk 上的报文到底怎么走理解了配置再来看报文转发的完整过程。当 PC1 发出一个普通以太网帧时帧本身是不带 VLAN Tag 的。帧到达 SwitchA 的 G0/0/1这个端口是 Access 口PVID 是 VLAN 10交换机内部会先给这个帧打上 VLAN 10 的 Tag然后在 MAC 地址表里查找目的 MAC 对应的出端口。如果目的 MAC 是 PC2PC2 在 SwitchB 下面SwitchA 查表后发现目的地址对应的端口是 G0/0/24于是把帧从 Trunk 口发出去。由于 Trunk 口放行了 VLAN 10这个帧带着 VLAN 10 Tag 穿越两台交换机之间的链路。SwitchB 收到带 VLAN 10 Tag 的帧后在内部查找 MAC 地址表发现 PC2 在 G0/0/1 这个 Access 口。Access 口出方向需要剥离 Tag所以 SwitchB 把 VLAN Tag 去掉再把原始以太网帧交给 PC2。整个流程中Trunk 的作用是“让多个 VLAN 的帧在同一条物理链路上靠 Tag 区分身份”。再看 PVID 的作用Access 口收到不带 Tag 的帧会添加 Access 口 PVID 对应的 TagTrunk 口收到不带 Tag 的帧会添加 Trunk 口 PVID 对应的 TagTrunk 口发送 PVID 对应当前 VLAN 的帧时不同厂商有不同处理常见做法是剥离 Tag 后发出所以对端如果不配置相同 PVID就容易把未打标帧理解成别的 VLAN。理解了这一点就能明白为什么两条交换机互联时两端 Trunk 的 PVID 必须一致否则即使allow-pass列表正确某些帧依然会在进入对端时被“塞进错误 VLAN”。STP BPDU 和部分控制协议报文通常不走普通 VLAN 转发流程而是依赖端口的 PVID 或 Native VLAN 进行处理。如果两台交换机互联口的 Native VLAN/PVID 不一致轻则 STP 收敛异常重则出现广播环路。这也是为什么生产环境里会把 Native VLAN 单独规划而不是随手放在 VLAN 1 上。8. 跨交换机 VLAN 间路由配置前面解决的是“同一个 VLAN 跨交换机通信”。如果 PC1VLAN 10想要访问 PC3VLAN 20二层广播域是隔离的必须经过三层路由。常见的做法有两种三层交换机 VLANIF/SVI或者路由器单臂路由。8.1 三层交换机配置 VLANIF在华为三层交换机上给 VLAN 10 和 VLAN 20 各创建一个 VLANIF 接口并启用 IP 路由。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 quit # 开启三层交换机的路由功能 ip routingPC1 的网关配置为 192.168.10.254PC3 的网关配置为 192.168.20.254。PC1 和 PC3 通信时数据会送到各自的网关再由交换机根据路由表转发。在思科三层交换机上对应命令是ip routing 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三层交换机方案的优势是转发效率高适合大多数园区网场景。但要注意普通二层交换机不支持 VLANIF需要确认设备型号是三层交换机。8.2 路由器单臂路由如果手头只有二层交换机和一台路由器可以使用单臂路由。路由器和交换机之间的链路配成 Trunk路由器上使用子接口终结多个 VLAN。华为路由器子接口配置示例interface GigabitEthernet0/0/1.10 dot1q termination vid 10 ip address 192.168.10.254 255.255.255.0 arp broadcast enable quit interface GigabitEthernet0/0/1.20 dot1q termination vid 20 ip address 192.168.20.254 255.255.255.0 arp broadcast enable quit交换机的互联口需要配成 Trunk放行 VLAN 10 和 VLAN 20interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 quit思科路由器子接口示例interface GigabitEthernet0/0.10 encapsulation dot1Q 10 ip address 192.168.10.254 255.255.255.0 exit interface GigabitEthernet0/0.20 encapsulation dot1Q 20 ip address 192.168.20.254 255.255.255.0 exit单臂路由的缺陷是所有跨 VLAN 流量都要经过一条物理链路和路由器处理带宽和性能受限适合小型实验环境或临时组网。9. 验证方法与检查工具配置完成后不要只看端口灯。先用 CLI 确认 VLAN 和 Trunk 状态。华为侧推荐依次执行display vlan brief display port vlan display interface trunk思科侧推荐依次执行show vlan brief show interfaces trunk show interfaces status输出里重点确认以下几点VLAN 10 和 VLAN 20 是否都创建成功用户侧端口是否处于 Access 模式并且加入了正确 VLAN互联口是否处于 Trunk 模式互联口 Trunk 放行列表里是否包含 10 和 20两端 PVID 是否一致如果有三层配置检查 VLANIF 接口是否 upIP 是否与 PC 网关一致。然后再用 ping 验证ping 192.168.10.2如果 PC1 能 ping 通 PC2说明同 VLAN 跨交换机通信正常。如果 PC1 ping 不通 PC3这是正常现象因为没有配置 VLAN 间路由。配置了 VLANIF 或单臂路由后再 ping PC3 验证三层互通。在 eNSP 里做实验时还可以在交换机上抓包。右键点击交换机互联口选择抓包观察 Trunk 链路上的帧是否带 VLAN 10 和 VLAN 20 的 Tag。如果抓到的帧没有 Tag或者 Tag 的 VLAN ID 和预期不符重点检查 PVID。10. 常见问题与排查思路问题现象可能原因排查方式解决方案跨交换机同 VLAN ping 不通互联口不是 Trunk或 Trunk 未放行该 VLANdisplay vlan brief / show interfaces trunk将互联口改为 Trunk 并放行对应 VLANVLAN 10 能通VLAN 20 不通Trunk 放行列表只加了 VLAN 10查看 allow-pass / allowed vlan将 VLAN 20 加入放行列表ping 能通但抓包看到 Tag 异常两端 PVID 不一致对比两端 display port vlan将两端 PVID 改为相同值配置了 VLANIFPC 还是不通未开启 ip routing或 PC 网关未设置检查路由表、PC 网关开启三层路由确认 PC 网关指向 VLANIF 地址Trunk 口状态 down物理链路或端口 shutdownshow interfaces status检查网线、端口是否被 shutdown交换机重启后配置丢失未保存配置华为 save思科 copy running-config startup-config配置完成后立即保存华为 Trunk 口默认只放行 VLAN 1忘写 allow-passdisplay port vlan补充 port trunk allow-pass vlan 10 20思科 Trunk 口默认放行所有 VLAN未收敛放行列表show interfaces trunk使用 switchport trunk allowed vlan 10,20 收敛同接口既接 PC 又做交换机互联端口类型混用检查端口配置文件用户端口用 Access互联口用 Trunk不要混用配置变更后如果出现大面积不通优先检查是否产生了环路。Trunk 链路配置错误时STP 收敛可能需要几十秒期间终端会临时丢包。不要在大规模现网设备上直接敲不熟悉的命令建议先在 eNSP 等模拟器里验证。11. 最佳实践与安全合规最后给几条工程化建议可以在配置带 VLAN 的交换机互联时直接参考。11.1 明确规划 VLAN ID 和端口类型VLAN ID 的规划要留出扩展空间不要随手使用 VLAN 1 跑业务。管理 VLAN、用户 VLAN、服务器 VLAN 分开规划。互联口使用 Trunk用户口使用 Access不要依赖 Hybrid 口的默认行为。11.2 收敛 Trunk 放行列表虽然思科默认放行所有 VLAN华为默认只放行 VLAN 1但两者都建议显式声明 Trunk 放行哪些 VLAN。这样即使以后有人新建了 VLAN也不会因为 Trunk 自动放行而意外扩大二层广播域。# 华为 interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 quit # 思科 interface GigabitEthernet0/1 switchport mode trunk switchport trunk allowed vlan 10,20 exit11.3 统一两端 PVID跨交换机和跨厂商设备互联时先比对两端 PVID。务必在割接前把两端的 PVID 和允许通行的 VLAN 列表写成表格避免现场凭记忆配置。11.4 配置保存与版本备份华为使用save思科使用copy running-config startup-config华三使用save force。修改配置前建议先备份当前配置再用排障窗口做变更。11.5 关注虚拟化与容器环境中的 VLAN 扩展如果网络环境涉及 VMware vSphere 分布式交换机、K8s Multus 多网卡、或者云平台的 VLAN 网络核心思路和物理交换机一致上行链路要放行对应 VLAN虚拟机端口组或 Pod 网卡的 PVID/Trunk 策略要正确否则跨主机通信一样会失败。11.6 安全与授权边界VLAN 本身是二层隔离手段不是安全边界。跨交换机配置 VLAN 时不要以为“VLAN 不同就一定安全”。防止 VLAN Hopping需要关闭不需要的 Trunk 口并把终端接入端口设置为 Access涉及跨区域网络访问时还需要配合 ACL、防火墙策略做三层过滤。如果是在实验环境使用 eNSP、真实交换机或者采集真实网络中的配置信息建议使用自己的设备或者在授权范围内进行。不要拿着未授权采集到的配置文件做二次发布或绕过安全设备测试。涉及生产网络变更时要遵守企业内部变更流程和数据安全规范。11.7 先小规模验证再逐步推广第一次配置跨交换机 VLAN建议先用两台交换机、两个 VLAN 的最小拓扑验证。跑通后再叠加三层路由、多链路聚合、跨厂商互联等复杂特性。这样一旦出现问题排查范围最小回滚也快。12. 总结与下一步交换机之间带 VLAN 的通信核心就三件事互联口必须配 Trunk、Trunk 必须放行所需 VLAN、两端 PVID 必须一致。跨交换机同 VLAN 通信靠二层 Trunk跨交换机 VLAN 间通信靠三层路由。华为、思科、华三的命令虽然有差异但底层逻辑完全一样。建议你先在 eNSP 里搭一个最小拓扑按照上面的命令敲一遍用display vlan brief和 PC ping 验证结果。最容易踩的坑是忘写allow-pass和两端 PVID 不一致这两个问题在真实设备上出现频率最高。如果你还需要练习 VLAN 间路由就在这个拓扑上继续加上 VLANIF 或单臂路由配置。跑通以后再把同样的思路迁移到生产环境的交换机互联会顺手很多。
返回列表