
老板把需求压缩成一句话财务部门的 VLAN 10 和管理部门的 VLAN 20 要能互通但其他 VLAN 一个都不许放开。这句话听起来简单在华为交换机上却很容易被理解错。新手的第一反应往往是直接配置 VLANIF 三层互联结果把 VLAN 30、40 全部暴露出来或者更简单粗暴把两个部门的 PC 塞进同一个 VLAN等于把 VLAN 隔离本身废掉了。真正合理的做法分两层物理链路上用 Hybrid 端口精确承载 VLAN 10 和 VLAN 20三层转发则交给一个受控的网关设备只给这两个 VLAN 提供路由。这样既满足两个 VLAN 互通又不会出现全通。这篇文章会先讲清楚 VLAN 隔离和互通之间的原理边界再对比 Access、Trunk、Hybrid 三种链路类型最后在 eNSP 上通过一个完整实验把配置、验证、排错一次跑通。适合正在学习 HCIA/HCIP 的网工也适合被类似需求困扰、想找一条可落地方案的在职运维。1. 先理解老板这句话VLAN 隔离和互通到底差在哪1.1 VLAN 隔离的是广播域不是永远不能通VLANVirtual Local Area Network把一个物理交换机分割成多个逻辑广播域。默认情况下VLAN 10 的广播帧不会出现在 VLAN 20 里VLAN 20 的广播帧也不会出现在 VLAN 10 里。这样做的好处是减少广播干扰、缩小故障域并为不同部门或业务建立第一层安全边界。但要注意VLAN 隔离不等于不同 VLAN 之间永远不能通信。隔离是默认状态互通是可以被配置出来的。老板要的两个 VLAN 互通意思是打破默认隔离状态但只打破一次、只打破给这两个 VLAN而不是把默认拒绝策略变成默认放行。1.2 同 VLAN 靠二层交换跨 VLAN 必须三层转发这是整个方案里最核心的一句话同一 VLAN 内的主机通过交换机做二层交换就能通信。源主机发 ARP、交换机查 MAC 表、把帧从目标端口转发出去整个过程不涉及 IP 路由。不同 VLAN 内的主机广播域彼此隔离二层 MAC 表不会把 VLAN 10 的帧转到 VLAN 20 的端口。 跨 VLAN 通信必须经过三层设备由三层设备根据目的 IP 做路由转发再重新封装成目标 VLAN 的帧。所以让 VLAN 10 和 VLAN 20 互通本质上是一个三层需求。Hybrid 端口不管怎么配都改变不了跨 VLAN 必须三层转发这个事实。Hybrid 能做的是在二层链路上精确地告诉交换机哪几个 VLAN 的帧可以走这条物理链路哪个 VLAN 要以 tagged 方式走、哪个要以 untagged 方式走。1.3 不让全通的本质是控制放通面很多新手在做 VLAN 间通信时习惯性地把互通理解成把路由全部打开。最常见的错误配置有两类在交换机上创建所有 VLANIF 接口并开启默认路由转发于是一个三层交换机把所有 VLAN 全打通了。在交换机到路由器或防火墙的上行链路上配置port trunk allow-pass vlan all把 VLAN 30、40 全部送进网关网关如果又建了对应子接口也就全通了。不让全通要求的是放通面可控只有 VLAN 10 和 VLAN 20 之间有路由其他 VLAN 既不参与二层转发也没有三层出口。控制放通面可以从两个层面入手二层层面让关键链路上的端口只属于允许互通的 VLAN。三层层面只有需要互通的 VLAN 才配置网关接口并且加上访问策略。这篇文章的重点方案就是用 Hybrid 端口完成二层层面的精确放通再用一台路由器或防火墙完成三层层面的受控转发。2. Hybrid 端口是什么为什么它比 Access/Trunk 更适合这个需求2.1 三种链路类型对比华为 S 系列交换机上的端口可以配置为 Access、Trunk、Hybrid 三种链路类型。先看一张对比表链路类型允许通过的 VLAN出方向标签处理典型使用场景Access1 个即 PVID全部剥掉 tag发无标签帧连接 PC、打印机等普通终端Trunk多个通过 allow-pass vlan 指定除 PVID 对应的 VLAN 外其他 VLAN 都带 tag交换机之间互联、交换机上联路由器/防火墙Hybrid多个每个 VLAN 可单独设置 tagged/untagged由管理员逐 VLAN 指定是否剥 tag需要混合承载 tagged 和 untagged 流量的场景Access 端口只能属于一个 VLANTrunk 端口虽然允许多个 VLAN 通过但出方向只有 PVID 对应的 VLAN 可以被剥 tag其他 VLAN 一律带 tag。Hybrid 端口的不同之处在于端口可以属于多个 VLAN并且可以针对每个 VLAN 单独设置带 tag 发出还是去掉 tag 发出。华为 S 系列许多型号的交换机端口默认链路类型就是 Hybrid这说明 Hybrid 并不是什么冷门模式而是设备的默认工作状态。许多运维遇到问题时直接改 Trunk其实常常是在绕远路。2.2 Hybrid 端口收到和发出帧时的处理规则理解 Hybrid只需要掌握两条规则收到无标签帧时交换机会给它打上这个端口的 PVID然后当作 PVID 对应 VLAN 的帧处理。发出帧时先看这个帧所属的 VLAN 是否在这个端口的成员列表里。列表分为 tagged 和 untagged 两类帧属于 untagged 列表就剥掉 tag 再发出属于 tagged 列表就保留 tag 发出不在成员列表里帧直接丢弃。举例来说一个 Hybrid 端口配置如下interface GigabitEthernet0/0/3 port link-type hybrid port hybrid pvid vlan 10 port hybrid vlan 10 20 tagged undo port hybrid vlan 1它的行为就是端口接收无标签帧时标记为 VLAN 10端口可以转发 VLAN 10 和 VLAN 20 的帧并且这两种帧发出时都保留 802.1Q tagVLAN 1 因为被undo port hybrid vlan 1移除了所以 VLAN 1 的帧不会从这个端口进出。2.3 常用命令与默认行为配置 Hybrid 端口最常用的命令是这三条命令作用注意事项port link-type hybrid把端口链路类型改为 Hybrid华为 S 系列多数型号默认就是 Hybrid但显式写出更利于维护port hybrid pvid vlan 10设置端口的 PVID收到无标签帧时打上该 VLAN 标签port hybrid vlan 10 20 tagged设置端口允许通过的 VLAN以及发出时是否带 tag参数只能是 tagged 或 untagged 二选一需要注意新建的 Hybrid 端口默认属于 VLAN 1而且是 untagged 成员。如果端口用于隔离场景应显式执行undo port hybrid vlan 1把 VLAN 1 从成员列表移除否则 VLAN 1 的流量仍然可能意外穿过这个端口。2.4 这个场景选择 Hybrid 的三个理由回到两个 VLAN 互通其他 VLAN 不放通的需求选择 Hybrid 并不是为了炫技而是有三个实际理由。第一设备默认就是 Hybrid 链路类型。如果端口之前没有被改成 Access 或 Trunk直接配置 PVID 和 VLAN 成员就可以不用额外改变链路类型配置变更更小。第二Hybrid 可以在同一条物理链路上混合 tagged 和 untagged 流量。比如某些网络设备物理口只能接收无标签帧同时又需要通过子接口区分多个 VLAN这种一个 VLAN 走原始物理口、另一个 VLAN 走子接口的形态用 Trunk 实现起来不如 Hybrid 直观。第三Hybrid 的成员列表是逐 VLAN 精确指定的。它天然把这个端口允许哪些 VLAN表达得很清楚配合undo port hybrid vlan 1可以把默认 VLAN 也关掉真正实现最小放通。3. 方案设计Hybrid 上行 子接口网关只放两个 VLAN3.1 拓扑与地址规划为了把原理讲清楚用一个典型的三部门场景做实验。网络拓扑如下PC1(VLAN 10) --- SW1 GE0/0/1 PC2(VLAN 20) --- SW1 GE0/0/2 PC3(VLAN 30) --- SW1 GE0/0/4 SW1 GE0/0/3 --- R1 GE0/0/0子接口 .10 / .20SW1 是一台华为 S5700R1 是一台华为 AR 路由器PC1、PC2、PC3 用 eNSP 自带的终端模拟即可。地址规划如下对象VLANIP 地址网关PC1财务VLAN 10192.168.10.10/24192.168.10.254PC2行政VLAN 20192.168.20.10/24192.168.20.254PC3访客VLAN 30192.168.30.10/24192.168.30.254故意不配置R1 子接口 .10VLAN 10192.168.10.254/24无R1 子接口 .20VLAN 20192.168.20.254/24无SW1 上创建 VLAN 10、20、30。PC1 和 PC2 分别接入 VLAN 10、20。PC3 属于 VLAN 30按需求保持隔离。3.2 互通矩阵动手配置前先把互通矩阵写清楚。这个实验的放通规则如下源 VLAN目的 VLAN 10目的 VLAN 20目的 VLAN 30VLAN 10财务允许允许禁止VLAN 20行政允许允许禁止VLAN 30访客禁止禁止允许仅同 VLAN 内写矩阵的目的是防止配置过程中凭感觉放通。矩阵里只允许 VLAN 10 和 VLAN 20 双向互通VLAN 30 既不能主动访问别人也不能被别人访问。3.3 为什么不直接开 VLANIF 全路由有人会问SW1 本身是三层交换机直接创建 Vlanif10 和 Vlanif20 不就能让两个 VLAN 互通了吗单纯从连通性角度确实可以。但这样做的风险在于一旦给多个 VLAN 都创建了 VLANIF交换机默认就会在这几个 VLAN 之间做路由VLAN 30 如果没有 VLANIF 还好一旦管理上为了方便也加上就会变成全通。而且在三层交换机上做 VLAN 间路由如果之后要增加只允许财务访问行政的 Web 服务不允许反向访问这类策略就要靠 ACL 和 traffic-filter 控制配置和维护成本都不低。把三层能力放到专门的网关设备上让接入交换机只做二层转发是更符合分层设计的做法。这也是这个方案把互通的实现点放在 R1 子接口上的原因。4. eNSP 实验完整配置与验证4.1 eNSP 环境准备使用华为 eNSP 模拟器拖入一台 S5700 交换机、一台 AR 路由器、三台 PC按编号连线。确认所有设备启动完成、接口状态 UP 后再开始配置。eNSP 中 AR 路由器的子接口命令较旧配置dot1q termination vid后需要手动开启arp broadcast enable这一点后面会用到。4.2 交换机 SW1 配置SW1 上需要完成三件事创建 VLAN、把 PC 接口划入对应 VLAN、把上联 R1 的接口配置为只放行 VLAN 10 和 20 的 Hybrid 口。system-view sysname SW1 vlan batch 10 20 30 quit interface GigabitEthernet0/0/1 port link-type hybrid port hybrid pvid vlan 10 port hybrid vlan 10 untagged undo port hybrid vlan 1 quit interface GigabitEthernet0/0/2 port link-type hybrid port hybrid pvid vlan 20 port hybrid vlan 20 untagged undo port hybrid vlan 1 quit interface GigabitEthernet0/0/4 port link-type hybrid port hybrid pvid vlan 30 port hybrid vlan 30 untagged undo port hybrid vlan 1 quit interface GigabitEthernet0/0/3 port link-type hybrid port hybrid pvid vlan 10 port hybrid vlan 10 20 tagged undo port hybrid vlan 1 quit这段配置的关键点在于 GE0/0/3。它把 VLAN 10 和 VLAN 20 设置为 tagged 成员所以两台 PC 发往网关的帧到 R1 时都带着 VLAN tagR1 才能用子接口区分它们。同时 VLAN 30 没有加入 GE0/0/3 的成员列表也没有加入其他可能与 VLAN 10、20 交汇的链路因此 VLAN 30 的流量根本不会到达 R1。4.3 路由器 R1 配置R1 的物理口 GE0/0/0 创建两个子接口分别处理 VLAN 10 和 VLAN 20。system-view sysname R1 interface GigabitEthernet0/0/0.10 dot1q termination vid 10 ip address 192.168.10.254 255.255.255.0 arp broadcast enable quit interface GigabitEthernet0/0/0.20 dot1q termination vid 20 ip address 192.168.20.254 255.255.255.0 arp broadcast enable quitdot1q termination vid告诉路由器这个子接口只处理带特定 VLAN tag 的帧。arp broadcast enable允许子接口在 VLAN 内广播 ARP 请求如果没有这条命令PC 通过网关发包时可能无法完成 ARP 解析。R1 没有创建 VLAN 30 的子接口这意味着即使 VLAN 30 的帧误打误撞到了 R1也不会被处理。4.4 PC 配置三台 PC 按下面的参数配置PCIP 地址子网掩码网关PC1192.168.10.10255.255.255.0192.168.10.254PC2192.168.20.10255.255.255.0192.168.20.254PC3192.168.30.10255.255.255.0192.168.30.254PC3 的网关 192.168.30.254 在网络上并不存在这是故意为之为了验证 VLAN 30 没有三层出口。4.5 验证该通的通不该通的不通配置完成后按顺序验证。第一步在 SW1 上确认 VLAN 和端口状态display vlan display port vlan预期结果中GE0/0/1 是 hybridPVID 10untagged 成员 10GE0/0/2 是 hybridPVID 20untagged 成员 20GE0/0/3 是 hybridPVID 10tagged 成员 10 和 20。GE0/0/4 属于 VLAN 30。第二步在 R1 上查看路由表display ip routing-table预期能看到 192.168.10.0/24 和 192.168.20.0/24 两条直连路由。路由表中不应该出现 192.168.30.0/24。第三步用 PC1 ping PC2PCping 192.168.20.10预期结果是能 ping 通数据包路径为PC1 发出目标地址 192.168.20.10 的报文命中 PC1 网关 192.168.10.254R1 收到带 VLAN 10 tag 的报文后路由到子接口 .20重新封装成 VLAN 20 的帧发给 SW1SW1 从 GE0/0/2 剥掉 tag 转发给 PC2。第四步用 PC1 ping PC3PCping 192.168.30.10预期结果是超时。原因有两层一是 VLAN 30 的帧无法通过 GE0/0/3 到达 R1二是即使报文到了 R1R1 也没有 192.168.30.0/24 的路由。两层都断通信必然失败。第五步用 PC2 ping PC1验证反向也通。这样就能确认VLAN 10 和 VLAN 20 之间双向互通VLAN 30 完全隔离。5. 常见坑用 Hybrid 实现选择性互通时最容易出错的 5 个地方5.1 Hybrid 不做三层转发配完还通不了是正常的有一种错误理解是既然 Hybrid 能让一个端口同时属于多个 VLAN那是不是配置一个 Hybrid 口两台 PC 插上去就自动互通了不是。如第 1 节所述跨 VLAN 通信必须有三层路由。Hybrid 只是改变了二层链路上允许通过的 VLAN 集合和 tag 处理方式它本身不做路由。如果按照上面实验配置后PC1 和 PC2 仍然不通第一步应该检查三层设备上的路由和子接口配置而不是在二层端口上反复加 VLAN。5.2 单网卡设备同时进两个 VLAN能收不能回的 ARP 陷阱有人想把一台共享服务器或打印机同时放入 VLAN 10 和 VLAN 20于是做了这样的配置interface GigabitEthernet0/0/5 port link-type hybrid port hybrid pvid vlan 10 port hybrid vlan 10 20 untagged表面看这个端口既是 VLAN 10 的 untagged 成员又是 VLAN 20 的 untagged 成员服务器应该能被两个 VLAN 访问。实际测试会发现VLAN 10 的 PC 能访问服务器VLAN 20 的 PC 却不行。原因是服务器的网卡不识别 VLAN tag发出的所有帧都是无标签的交换机收到后只会按 PVID 处理也就是全部标记为 VLAN 10。VLAN 20 的 PC 发 ARP 请求时请求帧能从该端口剥 tag 发给服务器但服务器的 ARP 应答帧从端口进入交换机后被强制归类为 VLAN 10VLAN 20 的 PC 永远收不到应答。这就是典型的能收不能回。解决方法是让服务器做 VLAN 感知例如在 Linux 服务器上用 802.1Q 子接口ip link add link eth0 name eth0.10 type vlan id 10 ip link add link eth0 name eth0.20 type vlan id 20 ip addr add 192.168.10.100/24 dev eth0.10 ip addr add 192.168.20.100/24 dev eth0.20 ip link set eth0.10 up ip link set eth0.20 up此时服务器发出的帧自带 VLAN tag交换机端口应配置为 tagged 成员port hybrid pvid vlan 10 port hybrid vlan 10 20 tagged核心结论是untagged 成员决定发出去的帧要不要剥 tagPVID 决定收进来的无标签帧归到哪个 VLAN。给一台无 VLAN 能力的设备同时配置多个 untagged VLAN只解决了接收方向没有解决回复方向。5.3 默认 VLAN 1 残留导致的意外互通华为 Hybrid 端口新建后默认属于 VLAN 1。如果不做处理VLAN 1 的流量会从这个端口穿过。最直接的后果是一台打印机放在 VLAN 1交换机上各端口本来只想放 VLAN 10、20但因为没有移除 VLAN 1 成员VLAN 1 又被所有 Hybrid 口默认放行最终打印机可能被所有部门访问和不让全通的要求冲突。解决方法是在每个不需要 VLAN 1 的 Hybrid 口上执行undo port hybrid vlan 1。不过要注意如果交换机的管理 VLAN 就是 VLAN 1移除 VLAN 1 可能导致远程管理中断操作前先确认管理面位置。5.4 tagged / untagged 选错导致对端收不到帧这是配置 Hybrid 时最常见的人为错误。对接路由器或交换机的子接口必须使用 tagged。对端设备需要依赖 802.1Q tag 来区分 VLAN如果 switch 侧把 tag 剥掉路由器收到的就是无标签帧子接口无法判断属于哪个 VLAN。对接 PC、打印机、普通服务器的物理网卡必须使用 untagged。大多数终端网卡不处理带 VLAN tag 的帧即使能收到也会因不认识 tag 而丢弃。如果 PC 直连端口错误配置成 taggedPC 基本无法通信如果上联路由器端口错误配置成 untagged路由器子接口全部失效。排错时先用display port vlan确认每个端口的 tagged/untagged 归属比对着配置猜更高效。5.5 三层设备只建接口不配策略照样可能半全通Hybrid 端口只能在二层层面限制哪些 VLAN 能走这条链路。一旦报文到达 R1R1 上有多少个 VLAN 子接口、路由策略如何处理决定最终的三层放通范围。如果只在 SW1 上用 Hybrid 限制链路但 R1 上创建了 VLAN 10、20、30 三个子接口且路由全通那么 VLAN 30 只要找到另一条到达 R1 的路径仍然可能被互通。更常见的情况是VLAN 10 和 VLAN 20 通过后VLAN 10 内主机可以横向访问 VLAN 20 全部主机没有更细粒度的策略隔离。生产环境里三层设备上还要配合防火墙策略或 ACL 做最小授权只放行业务需要的源、目的、端口和协议。二层 Hybrid 负责谁能到网关三层策略负责到了网关之后能去哪。6. 生产环境落地互通矩阵、端口基线、检查清单6.1 先画互通矩阵再动手任何涉及部分 VLAN 互通的需求第一步永远是画出互通矩阵。矩阵要包含所有 VLAN 的双向关系标注允许/禁止/仅同 VLAN 内。矩阵明确了Hybrid 端口放行哪些 VLAN、路由器和防火墙建哪些子接口、配哪些 ACL就都有了依据。没有矩阵直接开配最后极容易出现接口太多、放行范围失控的局面。6.2 端口配置基线模板把上面的经验沉淀成一套基线模板减少重复判断。以一台接入交换机为例vlan batch 10 20 30 interface GigabitEthernet0/0/1 port link-type hybrid port hybrid pvid vlan 10 port hybrid vlan 10 untagged undo port hybrid vlan 1 quit interface GigabitEthernet0/0/3 port link-type hybrid port hybrid pvid vlan 10 port hybrid vlan 10 20 tagged undo port hybrid vlan 1 quit模板思路是所有终端口统一写成 hybrid 明确 PVID 明确 untagged VLAN上联口统一写成 hybrid 只加入需要互通的 tagged VLAN每个口都移除默认 VLAN 1。这样配置在同事接手时一眼能看出端口放通了什么、没放通什么。6.3 上线前检查清单检查项检查方式通过标准VLAN 是否全部创建display vlan出现 10、20、30终端口归属是否正确display port vlanPC1 口 PVID 10PC2 口 PVID 20PC3 口 PVID 30上联口放行范围display port vlanGE0/0/3 只含 VLAN 10、20均为 tagged默认 VLAN 是否清除display port vlan各口不含 VLAN 1网关路由是否完整R1display ip routing-table只有 10、20 两条直连网段正向互通PC1 ping PC2通反向互通PC2 ping PC1通隔离验证PC1 ping PC3、PC2 ping PC3均超时6.4 扩展同一物理口下按 IP 子网划分 VLAN如果需求继续演进比如老板希望一个物理口下的多台 PC按照 IP 子网自动归类到不同 VLAN华为交换机还支持在 Hybrid 端口上绑定 IP 子网与 VLAN 的关联。它的思路是端口收到无标签帧后先根据报文源 IP 所在的子网决定该帧属于哪个 VLAN而不是只看 PVID。这类功能适合终端位置不固定、又不想逐台手动指定 VLAN 的场景但配置前要想清楚广播域和安全边界是否仍然可控。另一个常见扩展是基于 VLAN 的 IPSGIP Source Guard用来防止终端私改 IP 地址建议在核心网络规划时一并考虑。回到最初的问题老板让两个 VLAN 互通又不让全通。真正的答案不是打开某个开关让一切变通而是把问题拆成二层和三层两层来设计。二层用 Hybrid 端口精确控制链路上允许通过的 VLAN三层用独立网关只给需要互通的 VLAN 提供路由。这样配置出来的网络放通范围一目了然排错路径也清晰。对新手来说最值得做的练习就是在 eNSP 里把本文实验完整跑一遍然后故意把 GE0/0/3 改成port hybrid vlan 30 tagged观察 VLAN 30 会不会因此获得访问能力这样远比背配置命令更能理解 Hybrid 的边界。