ARTICLE DETAIL

资讯详情

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

华为交换机VLAN间通信实战:Trunk+单臂路由配置与排错

华为交换机VLAN间通信实战:Trunk+单臂路由配置与排错 两台交换机之间拉一根线跑 Trunk把 VLAN 100 和 200 放过去PC 接交换机走 Access老老实实划进自己的 VLAN最后再由一台路由器把两个 VLAN 的网关终结掉。这个组网如果你配过华为设备应该一眼就能认出——它几乎是园区网里最经典的一课VLAN 隔离 跨交换机 Trunk 单臂路由或者叫 Router-on-a-stick。我最近正好把这个场景从头到尾在 eNSP 里搭了一遍中间踩了两个不大不小的坑整理出来分享给正在学交换、或者工作中第一次碰华为交换机配置的朋友。这篇文章不废话直接说清楚为什么这么设计、每条命令是什么意思、验证时看什么、以及出了问题怎么一步一步定位。1. 整体设计与思路拆解1.1 为什么用 Trunk 而不是直接两根线很多新手第一次看到两台交换机用 Trunk 互联时会冒出个疑问两台设备各有两个 VLAN直接拉两根线每根线走一个 VLAN 不就行了单从连通性看确实可行但这是典型的用物理数量换逻辑简洁的笨办法。VLAN 的意义就在于把同一台交换机上的端口从逻辑上隔开如果你每多一个 VLAN 就要多拉一条物理链路VLAN 的隔离价值就大打折扣了。Trunk 解决的是一条物理链路上承载多个 VLAN 流量的问题。它的做法是在以太网帧里插入一个 4 字节的 802.1Q 标签里面记录这个帧属于哪个 VLAN。接收端交换机读到标签后就知道该把帧转发到哪个 Access 口、或者继续从哪个 Trunk 口送出去。这样一来两台交换机之间只需要一条链路后续哪怕再增加 VLAN 300、400只要在 Trunk 口上把新 VLAN 加进放行列表物理线路完全不用动。这也是为什么生产环境里交换机之间互联几乎清一色用 Trunk——省纤、省口、好扩展。从数据平面角度看这个场景里的 VLAN 100 和 VLAN 200 是两个互相隔离的广播域。PC 发出的广播帧只会在本 VLAN 内传播不会跨到另一个 VLAN这本身就起到了隔离未知流量、缩小广播风暴范围的作用。接入层划分 VLAN 之后不同业务部门、不同安全等级的终端虽然插在同一台交换机上但二层是完全隔开的这就为后续的三层安全策略比如 ACL打好了底子。1.2 标题里LSW1 和 AR没写完的部分我按最常见的方案补全原始需求里写着LSW1 和 AR后面断了。结合热词里反复出现的单臂路由vlan间通信我判断这里最常见的做法是AR 路由器只用一个物理接口连接 LSW1然后在这个物理接口上划分子接口用子接口分别终结 VLAN 100 和 VLAN 200 的网关。为什么不是给交换机配 VLANIF如果你用的是 S5700 这类三层交换机确实可以直接在交换机上配 VLANIF 接口做网关根本不需要外挂路由器。但标题里明确提到了 AR 路由器而且接口连接方式是LSW1 和 AR说明手头大概率是二层交换机 路由器的组合。二层交换机没有路由能力VLAN 间通信这件事必须交给路由器而在只有一根物理链路的情况下路由器要么用子接口终结多个 VLAN要么就只能废掉一个 VLAN 的网段。子接口方案显然更合理。这里有一个理解关键路由器物理接口本身是不认识 802.1Q 标签的。它收到一个带 VLAN 标签的帧时要么丢弃要么不知所措。子接口的作用就是让路由器把一个物理接口拆成多个逻辑接口每个子接口绑定一个 VLAN ID只处理带这个 ID 的帧。这是单臂路由的典型实现也是这个拓扑里 AR 路由器的核心戏份。2. 核心细节解析与实操要点2.1 Access 口的三个关键行为搞不清楚必踩坑Access 口是连接终端最常用的接口类型。它只属于一个 VLAN也就是你配置的port default vlan。这个口的行为可以概括为三句话从 Access 口收到的无标签帧会打上 default VLAN 的标签从 Access 口发出去的帧一定去掉标签如果 Access 口收到了带标签的帧并且标签不是 default VLAN华为交换机默认会直接丢弃。第三句话很多人会忽略。比如你把 PC 接在一个划入 VLAN 100 的 Access 口上但这个口同时收到一个带 VLAN 200 标签的帧这个帧会被丢掉。这其实是好事因为它保证了 Access 口不会意外把另一个 VLAN 的流量泄漏给终端。你在排查问题时如果发现 PC 网卡收到的帧不正常可以先看看是不是接口类型搞错了——比如把接 PC 的口配成了 Trunk而且 PVID 又设得不对那无标签的 PC 流量就可能被错误地打上某个 VLAN 标签导致 PC 一直拿不到正确的网关 ARP 应答。给 PC 用的接口选 Access 模式的另一个原因是简单。PC 的网卡不参与 VLAN 标签的封装除非专门配了 VLAN 虚拟网卡或驱动支持它发出的就是普通以太网帧进来之后交换机给它打上 default VLAN 的标签之后整个交换网络内部都在带标签地转发。这个进来打标签、出去剥标签的机制就是 Access 口存在的全部意义。2.2 Trunk 口的 PVID 与 allow-pass这是华为配置里最容易出错的点Trunk 口比 Access 口复杂因为它要同时承载多个 VLAN。配置 Trunk 口时有两个东西要分清一个是 PVIDPort VLAN ID另一个是允许通过的 VLAN 列表。华为交换机默认情况下 Trunk 口的 PVID 是 1允许通过的 VLAN 列表里默认只有一个 VLAN 1。换句话说新创建一个 Trunk 口如果不做任何额外配置它只能转发 VLAN 1 的流量VLAN 100 和 200 的帧在这个口上会被直接丢弃。所以配置 Trunk 时最关键的一条命令是port trunk allow-pass vlan 100 200。这条命令把 VLAN 100 和 200 加入放行列表。注意这里不是PVID 改成了 100 和 200而是允许带 VLAN 100 和 200 标签的帧通过。PVID 和放行列表是两个独立的概念PVID 决定的是从该口收到的无标签帧被打上哪个标签放行列表决定的是带哪些标签的帧能从这个口出去。实际操作中我习惯先把 PVID 保持默认的 1 不动专注于设置放行列表。除非这台交换机上有明确的 VLAN 1 流量需要特殊处理否则不要轻易改 PVID。改 PVID 会引入新的问题比如你把两端 Trunk 的 PVID 都改成了 100那么两端互相发送的无标签帧比如某些管理协议报文、或者 VLAN 1 的管理流量就都会被标记成 VLAN 100一旦放行列表里没有 100帧又会被丢掉最后表现就是设备之间能 ping 通但管理 VLAN 失效排查起来特别抓狂。还需要留意一点Trunk 口收到的带标签帧如果标签不在放行列表里会被丢弃但如果收到的帧不带标签则会被打上 PVID 后再处理。所以两个交换机 Trunk 互联时两端 PVID 要一致放行列表要一致这是最基本的对称性要求。2.3 AR 子接口的三个必配项少一个都ping不通AR 路由器侧我强烈建议把所有三层配置放在子接口上而不是物理接口上。物理接口只负责 up 和收发光不配 IP。子接口上三个东西缺一不可dot1q termination vid、ip address、arp broadcast enable。dot1q termination vid 100是让这个子接口只处理带 VLAN 100 标签的帧。物理接口收到帧后会按子接口绑定的 VLAN ID 把帧分发到对应子接口。ip address不用说是这个 VLAN 的网关地址。arp broadcast enable是最容易被忽略的默认情况下华为路由器的子接口不会主动响应 VLAN 内主机的 ARP 广播请求。PC 要上网必须先解析网关的 MAC 地址如果你没开这条命令PC 的 ARP 请求到了路由器之后子接口不会回应结果就是 PC 一直显示无法获得网关 MAC或者 ping 网关超时。子接口还有一个细节物理接口必须处于 up 状态。很多模拟器或者真实设备上物理接口默认是 up 的但也有不少设备或版本默认shutdown或者因为线缆问题没起来。我在 eNSP 里见过不少次子接口配置得再完美物理口 down 着一切都是白搭。所以调试第一步永远是看物理接口状态。3. 实操过程与核心环节实现3.1 实验拓扑与地址规划这次我用的拓扑是这样的LSW1 和 LSW2 用 GE0/0/24 端口互联链路类型 Trunk放行 VLAN 100 和 200。LSW1 的 GE0/0/1 接 AR 路由器的 GE0/0/0链路类型也设为 Trunk因为这条链路同样要承载两个 VLAN 的流量实际上它也是 Trunk 的角色。PC 分别接在 LSW1、LSW2 的 Access 口上。地址规划如下表网关统一放在 AR 路由器子接口上设备接口/子接口VLANIP 地址用途PC1eth0VLAN 100192.168.100.10/24业务 A 终端PC3eth0VLAN 100192.168.100.20/24业务 A 终端PC2eth0VLAN 200192.168.200.10/24业务 B 终端PC4eth0VLAN 200192.168.200.20/24业务 B 终端ARGE0/0/0.100VLAN 100192.168.100.1/24VLAN 100 网关ARGE0/0/0.200VLAN 200192.168.200.1/24VLAN 200 网关PC1 和 PC3 同属 VLAN 100但接在不同的交换机上用来验证 Trunk 透传 VLAN 100PC2 和 PC4 同属 VLAN 200用来验证 Trunk 透传 VLAN 200PC1 ping PC2 用来验证 AR 路由器跨 VLAN 路由。3.2 LSW1 的完整配置过程进入系统视图后第一步创建 VLANsystem-view sysname LSW1 vlan batch 100 200vlan batch可以一次性创建多个不连续的 VLAN比一条一条vlan 100、vlan 200省事很多。接下来配置连接 AR 路由器的上联口 GE0/0/1。这里必须是 Trunk因为 AR 子接口要终结两个 VLANAR 发出来的帧是带标签的交换机侧必须用 Trunk 口接interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 100 200注意我没有改 PVID让它保持默认的 1。这条链路只承载 VLAN 100 和 200不需要也不应该让 VLAN 1 的流量在里面捣乱。当然默认放行的 VLAN 1 还在放行列表里如果你介意可以执行port trunk allow-pass vlan 100 200之后再手动从列表里移除 VLAN 1但在测试环境里不影响结果我一般跳过。然后配置与 LSW2 互联的口 GE0/0/24interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 100 200两条 Trunk 链路命令完全一致好处是逻辑对称不容易配混。接下来配置四个 Access 口。我这里把 LSW1 的 GE0/0/2 划入 VLAN 100GE0/0/3 划入 VLAN 200另外两个留给扩展interface GigabitEthernet0/0/2 port link-type access port default vlan 100 interface GigabitEthernet0/0/3 port link-type access port default vlan 200如果端口多可以用port-group批量配置但这里端口少逐个配置更清晰。配置完后用display port vlan看一眼接口和 VLAN 的对应关系确认 Access 口对、Trunk 口也对了。3.3 LSW2 的完整配置过程LSW2 的配置思路和 LSW1 几乎一样区别是没有上联 AR 的那条链路。创建 VLAN 后直接配置与 LSW1 互联的 GE0/0/24 口为 Trunksystem-view sysname LSW2 vlan batch 100 200 interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 100 200然后配置两个 Access 口。我把 GE0/0/2 划入 VLAN 100GE0/0/3 划入 VLAN 200分别接 PC3 和 PC4interface GigabitEthernet0/0/2 port link-type access port default vlan 100 interface GigabitEthernet0/0/3 port link-type access port default vlan 200到这里二层全网应该已经通了。也就是说PC1 应该能 ping 通 PC3同一 VLAN 跨交换机PC2 应该能 ping 通 PC4。如果这两个 ping 不通说明 Trunk 或者 Access 配置有问题先别着急配路由器把二层问题解决干净再往下走。这是我很坚持的调试顺序先二层后三层别把所有问题混在一起查。3.4 AR 路由器的单臂路由配置AR 路由器这边物理接口 GE0/0/0 保持默认配置不配 IP。在它上面创建两个子接口。华为模拟器里子接口编号可以随意只要不重复就行一般习惯用.100、.200这样的后缀和 VLAN 对应方便辨认system-view sysname AR1 interface GigabitEthernet0/0/0.100 dot1q termination vid 100 ip address 192.168.100.1 255.255.255.0 arp broadcast enable interface GigabitEthernet0/0/0.200 dot1q termination vid 200 ip address 192.168.200.1 255.255.255.0 arp broadcast enable interface GigabitEthernet0/0/0 undo shutdown配置完成后别忘了检查物理口状态。用display ip interface brief可以看到子接口是否 up/up。注意子接口的协议状态依赖于物理口也依赖于是否有对应 VLAN 的帧进来。在 eNSP 里子接口显示 up 是正常现象但如果物理口 down子接口也会跟着 down。这里我把undo shutdown放在最后其实是给自己提个醒如果一开始物理接口是 shutdown 的所有子接口都会是 down 状态配置再多也没用。真实设备上很多时候上联口默认就是 up 的但我不赌这个默认行为每次都会主动确认。3.5 全网互通验证配置完所有设备后我习惯按这个顺序测试PC1 ping PC3同 VLAN 100跨交换机PC2 ping PC4同 VLAN 200跨交换机PC1 ping 192.168.100.1网关PC1 ping 192.168.200.1对端 VLAN 网关PC1 ping 192.168.200.10跨 VLAN 访问 PC2前三步验证二层和网关终结是否正常第四步验证路由器子接口是否都能响应第五步才是最终目标VLAN 间通信。如果第五步通了说明整个链路全部正常。在 PC1 上用 ping 命令时注意观察第一条 ICMP 请求的延迟第一次会高一些因为要先做 ARP 解析这是正常现象不代表设备有问题。如果连续 ping 都超时再按第四节的排查方法去定位。4. 常见问题与排查技巧实录4.1 一台 PC 能通网关另一台不通先查这两处这个症状我在实验里遇到过多次。PC1 能 ping 通 192.168.100.1PC3 也能 ping 通 192.168.100.1但 PC3 对面的 PC4 死活不通或者反过来。这种一边通一边不通的情况大概率不是 AR 的问题而是 LSW2 和 LSW1 之间的 Trunk 链路没有完整放行两个 VLAN。比如你把 LSW1 的 GE0/0/24 配了port trunk allow-pass vlan 100 200但 LSW2 的 GE0/0/24 忘了配或者只配了port trunk allow-pass vlan 100。这样 VLAN 200 的帧从 LSW1 出来是带标签的到了 LSW2 的 Trunk 口后因为不在放行列表里直接被丢弃PC4 自然无法和任何设备通信。排查方法很简单在 LSW2 上执行display interface GigabitEthernet0/0/24看 Trunk 口的Allowed VLAN列表是否包含 100 和 200。在 LSW1 上也执行同样命令两边对照。我遇到的绝大多数 Trunk 问题都是只配了一侧另一侧忘了不是协议的问题就是配置不对称的问题。另外如果你用的是真实华为交换机还要确认接口自协商是否成功。物理层不通的表现是两个交换机之间用display interface看到的状态是 down那就要查光模块、网线、协商模式。模拟器里一般不会遇到这个问题但真实项目里这是最基础的检查。4.2 子接口配了 IP 还是不通八成忘了这一条arp broadcast enable这条命令我前面反复强调因为它确实坑过很多人。华为 AR 路由器子接口默认不处理广播报文而 PC 要跟网关通信第一步就是发 ARP 广播请求网关 MAC。你如果不开arp broadcast enable子接口就装聋作哑PC 永远也解析不到网关 MAC表现就是能 ping 通同网段的其他 PC但 ping 不通网关。这个症状特别容易误导人。PC1 能 ping 通 PC3说明二层没问题但 ping 不通 192.168.100.1说明三层网关有问题。新手容易怀疑是不是 IP 配错了、或者子接口没起来。但真正原因可能就是一条命令。我在实际工程里见过有人把这条命令加在物理接口上那是不对的它必须加在子接口视图下。检查方法是在 AR 上用display ip interface brief看子接口 IP 是否正确再用display current-configuration interface GigabitEthernet0/0/0.100确认子接口下确实有arp broadcast enable。如果缺了补上后不用重启任何服务直接再 ping 网关就能通。还有一种情况是子接口和 VLAN 的对应关系搞错了。比如你在 GE0/0/0.100 下配了dot1q termination vid 200那这个子接口处理的其实是 VLAN 200 的帧IP 却是 192.168.100.1。这样一来VLAN 200 的 PC 发的帧会被送到这个子接口但收到的帧都被路由到了 192.168.100.0 网段两边的网关 IP 和实际终端网段对不上整个路由就乱了。排查时仔细看display current-configuration里的每一个子接口确保 vid 和 IP 网段匹配。4.3 排查命令速查表下面这个表格是我调这个拓扑时最常用的命令建议收藏场景命令重点看什么确认 VLAN 是否创建display vlanVLAN ID 是否存在状态是否为 up确认接口 VLAN 关系display port vlan各接口的链路类型、PVID、放行 VLAN确认 Trunk 口放行列表display interface GigabitEthernet0/0/24Allowed VLAN是否包含 100 和 200确认子接口状态display ip interface brief子接口是否 upIP 是否正确确认子接口配置display current-configuration interface GigabitEthernet0/0/0.100dot1q termination vid、IP、arp broadcast enable确认 VRP 路由表display ip routing-table100/200 网段是否有直连路由抓包看标签在交换机 Trunk 口抓包帧是否带 802.1Q 标签VID 是否为 100/200还有一个小技巧eNSP 里可以用报文抓包功能实际工作中对应 Wireshark 接在 Trunk 口镜像抓一下 LSW1 和 LSW2 互联口的报文直接看以太网帧头里的 VLAN ID。如果你看到帧的 VLAN ID 是 0 或者没有 802.1Q 标签说明帧是从 Access 口误发出来的或者 Trunk 口没有正确打标。抓包是解决 VLAN 标签问题最直观的手段比盲猜配置快得多。4.4 别忘了 Trunk PVID 的连带效应虽然我在前面的配置里没有改 PVID但项目里经常有人改。比如有人为了让 Trunk 口能转发 VLAN 100 的无标签流量把 PVID 改成 100同时又把 VLAN 1 从放行列表里删了。这时候会出现一个奇怪现象交换机自己的管理地址VLAN 1可能 ping 不通对端交换机的管理地址但 PC 业务流量一切正常。原因就是管理帧通常不带标签从 Trunk 口出去时会被打上 PVID 100但 VLAN 100 的网段和管理地址的 VLAN 1 网段不在同一个广播域管理帧到了对端之后被归入 VLAN 100对端管理接口在 VLAN 1自然收不到。这种问题特别隐蔽因为业务流量都通谁也不会想到是 PVID 在捣乱。所以我的建议是除非你很清楚 PVID 的作用否则 Trunk 口的 PVID 保持默认 1 不要动。要让某个 VLAN 无标签通过可以通过其他方式实现比如单独的 Access 链路别在 Trunk 口上玩花样。当然有些场景确实需要改 PVID比如对接不支持 802.1Q 的旧设备但在我们这个实验里完全没有这个必要。4.5 为什么交换机口没划对 VLAN也经常发生Access 口划错 VLAN这个错误听起来很低级但真发生的时候往往最让人迷糊。比如 PC1 被接到了 GE0/0/6但你把它划到了 VLAN 200而它的 IP 是 192.168.100.x。结果 PC1 ping 不通网关但 PC1 却能 ping 通同网段的另一台设备——因为对方也被划错到了 VLAN 200。这种乱中出错的情况在配置多台设备时特别容易发生。排查这种问题不要凭记忆判断端口位置直接看display port vlan。这个命令会列出所有接口的 PVID 和放行 VLAN一目了然。还有个小经验给 PC 划分 VLAN 时尽量用贴纸或者命名备注记录 端口-主机-VLAN 的对应关系。真实项目里线缆乱接、端口记录过期都是 Access 口 VLAN 配错的根源。别高估自己的记性也别低估网络运维的混乱程度。收尾前再聊两句这个实验做完之后我最大的一个体会是VLAN 和 Trunk 本身不难难的是脑子里要有一条清晰的帧之旅概念——PC 发出无标签帧Access 口打上标签Trunk 口带着标签在交换机之间传输路由器子接口识别标签、终结 VLAN、做三层转发回来时再一路剥标签。你能够完整地讲清一个帧从这个 PC 到那个 PC 经过哪些接口、哪些操作VLAN 这一块你就真正掌握了。最后再分享一个调试顺序上的心得先看物理层再查 VLAN 配置最后查三层网关。很多人喜欢一上来就怀疑路由、怀疑 ACL实际上这种小规模的实验环境绝大多数问题都出在二层配置不对称上。把display port vlan、display interface trunk、display ip interface brief这三板斧练熟很多所谓诡异现象当场就能破案。别问我为什么知道我当年也是从所有配置都对着呢怎么就是不通的状态里过来的。
返回列表