ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

静态路由+三层交换机VLANIF:跨VLAN通信配置详解

静态路由+三层交换机VLANIF:跨VLAN通信配置详解 静态路由配合三层交换机的 VLANIF是解决 VLAN 间通信最典型的组网方式之一。很多人搜到这个问题时手里往往有两台交换机、几个 VLAN想让不同 VLAN 的 PC 互相 ping 通但又不确定该用单臂路由、VLANIF还是静态路由。这篇文章会把概念边界和命令落地一起讲清楚适合正在用 eNSP 做实验的初学者也适合要在真机上做小规模网络规划的运维。最值得先记住的一点是不是所有 VLAN 间通信都需要静态路由。到底是靠设备直连路由就够还是必须写静态路由取决于目的网段是不是本设备直连网段。这个判断搞清楚了后面配置起来基本不会走弯路。1. 先想清楚VLAN 隔离广播域跨 VLAN 通信为什么必须经过三层1.1 二层交换机转发不了跨 VLAN 的帧VLAN 的本质是把一台交换机从二层逻辑上拆成多台交换机。属于不同 VLAN 的端口默认不会互相转发广播帧也不会转发未知单播帧。二层交换机维护的是 MAC 地址表转发依据是目标 MAC 地址和端口所属 VLAN。同一个 VLAN 内两台 PC 之间可以借助 MAC 表转发但 PC1 在 VLAN 10PC2 在 VLAN 20二层帧到了交换机这里交换机根本没有办法把 VLAN 10 的帧“翻译”成 VLAN 20 的帧。这个隔离是设计上的好处同一广播域里的设备多了广播风暴和大流量同步放大问题都会被控制住。但带来的问题也很直接不同部门的 PC 想互相访问只靠二层不管用。跨 VLAN 通信的本质是路由问题。也就是说需要一个具备三层转发能力的设备把目的 IP 所在网段找出来再把包从正确的三层接口送出去。这个三层设备可以是一台路由器也可以是支持三层功能的三层交换机。1.2 单臂路由、VLANIF、静态路由三者是什么关系跨 VLAN 通信常见三种方式单臂路由路由器只接一根线到交换机交换机的其中一个端口做成 Trunk路由器上配置多个子接口每个子接口封装 Dot1Q 并绑定一个 VLAN。报文进路由器后按子接口对应的网段路由。这种方式适合 VLAN 数量少、流量不大的场景路由器转发能力有限把几路大流量同时塞进去CPU 占用会很高。三层交换机 VLANIF在交换机上为每个 VLAN 创建对应的 VLANIF 接口并配置 IP 地址。交换机内部查路由表后直接在本地完成转发不经过外部路由器性能和集成度都更好。静态路由在三层设备上手工指定“到达某个网段下一跳是谁”。静态路由解决的是非直连网段的路径问题。很多人把 VLANIF 和静态路由当成两个对立方案其实它们是配合关系。VLANIF 负责让交换机对每个 VLAN 拥有一张“直连网段”的接口静态路由负责告诉交换机碰到不属于本地直连网段的目的地址时把包交给谁。一句话判断标准目的网段和本设备的三层接口在同一段里靠 VLANIF 直连路由就能通目的网段在另一台设备后面才需要写静态路由。这个原则后面会反复用到。2. 实操前置准备模拟器、真机、拓扑设计和地址规划2.1 eNSP 模拟器还是真机如果手头没有真机eNSP 是华为设备体验最方便的模拟器网上也有一大批关于 eNSP 静态路由、VLAN 配置的脚本。它最大的好处是可以随便折腾配错了重置重来成本很低。eNSP 里选交换机时要注意型号。模拟器里不同的交换机型号三层能力差别很大。做 VLAN 间路由实验优先选 S5700 这类支持 VLANIF 的三层交换机。如果选了偏二层定位的型号敲interface Vlanif 10时可能会直接识别不了或者提示设备不支持白折腾半天。真机实验要多加一层判断同一厂商不同系列、不同系统版本的命令细节有差异。比如有些老平台用vlan batch可以一次建多个 VLAN有些简化平台一次只能建一个有些交换机端口默认是二层口想当三层口用需要先做端口类型转换。落地之前先display version看一眼软件版本再查对应手册比照着网上命令硬敲更稳妥。2.2 一个典型拓扑两台三层交换机跨设备互联为了把静态路由的作用讲清楚我常用这个拓扑SW1 下挂 PC1PC1 属于 VLAN 10网段 192.168.10.0/24。SW2 下挂 PC2PC2 属于 VLAN 20网段 192.168.20.0/24。SW1 和 SW2 之间用一条物理链路相连这条链路规划为 VLAN 100作为两台交换机之间的三层互联链路。SW1 的 VLANIF 10 是 VLAN 10 的网关SW2 的 VLANIF 20 是 VLAN 20 的网关。两个交换机的 VLANIF 100 分别配置互联地址比如 10.0.100.1/30 和 10.0.100.2/30。2.3 地址规划表先写在纸上很多人上来就敲命令敲到一半才发现 IP 网段冲突、网关地址写错、互联网段和业务网段重叠。建议先花五分钟把规划表列出来。设备接口/角色VLANIP 地址用途PC1普通 PC 网卡VLAN 10192.168.10.10/24业务终端SW1VLANIF 10VLAN 10192.168.10.1/24VLAN 10 网关SW1GE0/0/1 接 PC1AccessVLAN 10无接入端口SW1GE0/0/2 接 SW2Trunk允许 VLAN 100无交换机互联SW1VLANIF 100VLAN 10010.0.100.1/30互联三层地址SW2VLANIF 20VLAN 20192.168.20.1/24VLAN 20 网关SW2GE0/0/1 接 PC2AccessVLAN 20无接入端口SW2GE0/0/2 接 SW1Trunk允许 VLAN 100无交换机互联SW2VLANIF 100VLAN 10010.0.100.2/30互联三层地址互联段用 /30是工程上的常见习惯。点对点链路只需要两个可用地址/30 刚好分配两个主机位不浪费业务地址空间也让路由表里能明确看出哪一段是互联段。学习环境用 /24 也不会出错但最好一开始就养成规划习惯。3. 同一台三层交换机上先跑通 VLANIF 基础场景3.1 创建 VLAN 并划分 Access 端口先用最简单的单台交换机实验把 VLANIF 的“直连路由”能力验证清楚。假设这台 SW1 上同时有 VLAN 10 和 VLAN 20两台 PC 都接在这台交换机上。华为交换机配置流程system-view vlan batch 10 20system-view是进入系统视图华为和大多数国内厂商设备都靠这个命令进入全局配置模式。vlan batch 10 20表示一次性创建 VLAN 10 和 VLAN 20。如果 VLAN 很多可以用vlan batch 10 to 20创建连续 VLAN效率更高。接下来把接 PC 的端口改成 Access并划入对应 VLANinterface GigabitEthernet0/0/1 port link-type access port default vlan 10 interface GigabitEthernet0/0/2 port link-type access port default vlan 20Access 端口的语义很简单进方向把不带 VLAN Tag 的帧打上端口所属 VLAN 的 Tag出方向把 Tag 剥掉后发给 PC。PC 的网卡不识别 Dot1Q Tag所以连接终端设备的端口必须用 Access。3.2 配置 VLANIF 接口地址创建 VLAN 之后交换机还不能在三层转发。需要为每个 VLAN 配置对应的三层接口。interface Vlanif 10 ip address 192.168.10.1 255.255.255.0 interface Vlanif 20 ip address 192.168.20.1 255.255.255.0VLANIF 的 IP 地址就是对应 VLAN 内 PC 的网关。PC1 的网关写 192.168.10.1PC2 的网关写 192.168.20.1。网关必须和 PC 在同一网段这是第一个容易踩的坑。这里有一个重要细节VLANIF 接口并不是配置了 IP 就一定是 Up。VLANIF 的状态依赖于该 VLAN 内是否有物理端口处于 Up 状态。也就是说如果 VLAN 10 里一个物理端口都没划进去或者划进去的端口被 shutdown 了VLANIF 10 会显示 down即使 IP 已配置也不参与转发。3.3 验证为什么这里不需要静态路由配置完成后用命令检查display vlan brief display ip interface brief display ip routing-table路由表里能看到两条直连路由华为设备里显示为 D 标志Destination/Mask Proto Pre Cost Flags NextHop Interface 192.168.10.0/24 Direct 0 0 D 192.168.10.1 Vlanif10 192.168.10.1/32 Direct 0 0 D 127.0.0.1 Vlanif10 192.168.20.0/24 Direct 0 0 D 192.168.20.1 Vlanif20 192.168.20.1/32 Direct 0 0 D 127.0.0.1 Vlanif20Protocol 是 Direct意思是设备自己直连的网段。PC1 ping PC2 时PC1 发现目标 IP 不在本机网段把包发给网关 192.168.10.1。SW1 收到后查路由表发现 192.168.20.0/24 是直连网段就通过本地 Vlanif20 口转发出接口在 VLAN 20 内再通过 ARP 找到 PC2 的 MAC 地址完成交付。回程同理。这种情况下完全没有必要配置静态路由。直连路由是设备自动生成的静态路由只适合用来描述“某个非直连网段从哪里走”。如果在同一台设备上给直连网段写静态路由设备会提示路由冲突因为这属于重复描述没有实际意义。这个基础场景必须亲手跑通因为后面跨交换机组网时所有验证都建立在“每台交换机对自己的业务 VLAN 网关都能通”这个前提下。4. 跨交换机组网静态路由的完整配置流程4.1 从 SW1 的角度分析路由需求现在把拓扑变成两台交换机。SW1 上有 VLAN 10SW2 上有 VLAN 20两台交换机通过链路互联。PC1 想访问 PC2实际访问过程是PC1 发给网关 SW1 的 VLANIF 10SW1 查路由表后发现 192.168.20.0/24 完全不在自己的直连网段里这时候如果没有静态路由SW1 只能丢弃这个包。所以 SW1 上必须写一条静态路由告诉它去 192.168.20.0/24下一跳是 10.0.100.2。这个 10.0.100.2 就是 SW2 的互联地址。同理PC2 回包时SW2 的 VLANIF 20 收到包查表发现 192.168.10.0/24 不是自己的直连网段也必须有一条静态路由去 192.168.10.0/24下一跳是 10.0.100.1。两条路由缺一不可。很多人配了 SW1 就测试发现只有单向通、反向不通原因往往就是返回路径上没有路由。4.2 配置互联链路Trunk 和 PVID两台交换机之间的链路要让 VLAN 100 的帧能通过应该配置成 Trunk 口。华为配置如下SW1 和 SW2 各自的互联端口都做一遍。interface GigabitEthernet0/0/2 port link-type trunk port trunk pvid vlan 100 port trunk allow-pass vlan 100这里三个命令分别代表三层含义port link-type trunk把端口模式改为 Trunk端口不再打某个单一 VLAN 的 Access Tag而是按照 allow-pass 列表决定放行哪些 VLAN。port trunk pvid vlan 100设置端口的 PVID。Trunk 口收到不带 Tag 的帧时会按 PVID 当成 VLAN 100 来处理。port trunk allow-pass vlan 100明确放行 VLAN 100 的帧通过。不写这一条VLAN 100 的帧即使到了这个端口也会被丢弃。初学者容易把 PVID 和 allow-pass 搞混。PVID 只管“没有 Tag 的帧进来时打哪个 VLAN”allow-pass 管的是“哪些 VLAN 的帧允许从这个口进出”。互联链路里如果两边都有数据要发PVID 通常保持两边一致后续排查时不容易混乱。如果只有 VLAN 100 在 Trunk 上承载也可以用默认 PVID 不动只加 allow-pass。但我个人习惯在互联场景里把 PVID 也改成互联 VLAN这样链路行为更明确尤其当链路上混着不同业务 VLAN 时不会因为“未知帧”分类问题出现诡异现象。4.3 配置 VLANIF 和静态路由在 SW1 上把两个 VLANIF 补齐system-view interface Vlanif 10 ip address 192.168.10.1 255.255.255.0 interface Vlanif 100 ip address 10.0.100.1 255.255.255.252SW1 的静态路由ip route-static 192.168.20.0 24 10.0.100.2这条命令的语义是目标网段 192.168.20.0掩码长度 24下一跳 10.0.100.2。SW2 上配置system-view vlan batch 20 100 interface GigabitEthernet0/0/1 port link-type access port default vlan 20 interface GigabitEthernet0/0/2 port link-type trunk port trunk pvid vlan 100 port trunk allow-pass vlan 100 interface Vlanif 20 ip address 192.168.20.1 255.255.255.0 interface Vlanif 100 ip address 10.0.100.2 255.255.255.252 ip route-static 192.168.10.0 24 10.0.100.1需要注意的是SW2 上实际收到的是“去 192.168.10.0/24”的包但它自己也直连 VLAN 20 和 VLAN 100不会产生冲突因为这三段网段完全不相同。为什么下一跳要写对端交换机的互联 IP而不是直接写对端业务网段 IP因为报文要先经过物理链路到达 SW2SW2 收到之后再查路由决定如何送到 VLAN 20。下一跳必须是一个“从本设备出发能直接把包送到的地址”也就是直连互联网段上的地址。4.4 华为、华三、思科、锐捷命令对照实际工作中换一个厂商就换一套语法虽然思路一样但命令差异容易让人卡住。整理一张常用对照表。配置动作华为华三思科锐捷创建 VLANvlan batch 10 20vlan batch 10 20vlan 10/vlan 20vlan 10/vlan 20配置端口划入 Access VLANport default vlan 10port access vlan 10switchport access vlan 10switchport access vlan 10配置三层接口interface Vlanif 10interface Vlan-interface 10interface Vlan 10interface Vlan 10配置静态路由ip route-static 192.168.20.0 24 10.0.100.2ip route-static 192.168.20.0 24 10.0.100.2ip route 192.168.20.0 255.255.255.0 10.0.100.2ip route 192.168.20.0 255.255.255.0 10.0.100.2查看路由表display ip routing-tabledisplay ip routing-tableshow ip routeshow ip route查看端口 VLAN 信息display port vlandisplay port vlanshow vlan briefshow vlan brief思科和锐捷的三层交换机默认不一定开启 IP 路由用在跨 VLAN 路由场景前需要先执行ip routing开启三层路由功能否则 VLANIF 建好了也只能当二层网关用。华为和华三的设备默认三层路由能力是开启的不需要额外执行这个步骤。5. 验证与判断路由表、连通性和数据流向5.1 三步验证法配置完成不代表网络通。推荐按下面的顺序验证每一步都有明确的判断标准。第一步PC 先 ping 自己的网关。PC1 ping 192.168.10.1PC2 ping 192.168.20.1。这一步验证的是接入端口划分是否正确、VLANIF 是否 Up、PC 的 IP 配置是否合理。网关都不通后面不用继续测。第二步在交换机上 ping 对端互联地址。SW1 ping 10.0.100.2SW2 ping 10.0.100.1。这一步验证 Trunk 链路、PVID、allow-pass、VLANIF 100 是否都正常。互联不通说明二层链路没弄对静态路由再怎么写也没有意义。第三步PC1 ping PC2。能通说明静态路由、返回路由、报文双向转发都正常。5.2 路由表里的 D 和 S 怎么看华为设备查看路由表display ip routing-table关键看 Proto 一列。D 代表 Direct 直连路由是设备根据自身接口 IP 自动生成的S 代表 Static 静态路由就是我们手工配置的路由。正常情况下SW1 上应该能看到三条已知路由192.168.10.0/24 Direct Vlanif10 192.168.20.0/24 Static via 10.0.100.2 10.0.100.0/30 Direct Vlanif100如果看不到 192.168.20.0/24说明静态路由没有配置成功或者命令没生效。用display ip routing-table protocol static可以只过滤静态路由排查起来更快。思科设备看show ip route静态路由以S开头。华三设备命令和华为基本一致都能直接对照。5.3 数据包到底怎么走把整条路径拆开你能更清楚每一步依赖什么。PC1 向 PC2 发包源 IP 是 192.168.10.10目的 IP 是 192.168.20.10。PC1 判断目标不在同一个网段于是查找本机 ARP 表把数据链路层的目的 MAC 写成网关 192.168.10.1 的 MAC发送到交换机 SW1。SW1 收到二层帧后剥掉帧头看到目的 IP查路由表命中静态路由知道要去往 192.168.20.0/24 必须先发给 10.0.100.2。SW1 通过 Vlanif100 把包从 Trunk 口送出去二层帧的目的 MAC 改成 SW2 互联口的 MAC。SW2 从 Trunk 口收到帧剥掉 VLAN 100 的 Tag看到目的 IP 是 192.168.20.10查路由表命中直连路由 Vlanif20于是在 VLAN 20 里查 ARP 表找到 PC2 的 MAC把帧交给 PC2。回程是完整镜像PC2 把包交给网关 SW2SW2 查静态路由发给 10.0.100.1SW1 再直连送到 PC1。这里能看出一个重要事实路由是逐跳的每一台三层设备只需要知道下一跳不需要知道整条路径。静态路由写的就是这些“局部决定性条件”。这也是为什么两端都要写路由因为两端各自只负责自己那一段转发决策。6. 常见故障排查与生产化建议6.1 最容易被忽略的返回路由跨交换机 VLAN 间通信排障时“单向通、反向不通”是最典型的症状。PC1 能 ping 通 PC2PC2 却 ping 不通 PC1大多数情况就是 PC1 所在网段的静态路由只写了 PC2 方向或者写反了下一跳。排查时把两张路由表都看一遍重点检查SW1 是否有去 192.168.20.0/24 的静态路由下一跳是不是 10.0.100.2。SW2 是否有去 192.168.10.0/24 的静态路由下一跳是不是 10.0.100.1。两个方向齐全才算完整。不要只盯着单台设备看跨设备问题必须把两端当成一个整体来看。6.2 VLANIF 显示 down、Trunk 不带 VLAN、接口类型不对VLANIF 接口 down 是一个高频坑。前面提过VLANIF 状态依赖该 VLAN 内有 Up 的物理端口。常见原因包括相应 VLAN 里没有任何物理端口或者端口全部被 shutdown。Trunk 口没有allow-pass vlan 100导致 VLAN 100 的帧无法在链路上传递。对端交换机的互联端口模式配成了 Access或者 PVID 不一致。把接 PC 的端口误配成 TrunkPC 网卡不认识 TagPC 直接断网。排查时先display vlan brief看 VLAN 和端口划分再display interface Vlanif 100看接口状态最后在互联两端分别查看端口状态和允许放行的 VLAN 列表。判断标准很直接两端配置必须对称两边 VLANID、Trunk 放行列表、PVID 要一致。6.3 真机环境还要注意这些模拟器里配置成功不等于真机一定成功。真机要额外确认设备软件版本是否支持 VLANIF 和静态路由。低端二层盒式交换机可能根本不支持三层功能配置界面里看不到 Vlanif 命令。端口光模块、电口协商是否正常。光口速率协商失败时接口一直 down查配置会看不出问题。设备是否符合“VLANIF 需要物理端口 Up”的依赖。部分框式设备有 VLANIF 接口层面和业务板状态关联的问题接口 shuwdown 或槽位离线都会导致路由失效。建议真机排障顺序固定下来看物理状态端口是否 Up光功率是否正常。看 VLANVLAN 是否创建端口划分是否正确。看三层接口VLANIF 是否 upIP 是否配置网关和 PC 是否同段。看路由表目标网段有没有路由下一跳是否可 ping 通。看策略ACL、防火墙策略、端口安全是否拦截了流量。这个顺序是从下往上排查每层验证通过后再进入上一层能最大程度避免“路由表看着有但实际环境哪一层断了都不知道”的情况。6.4 生产环境里的几点建议如果这个实验要落到真实办公网络有几点比较实用互联段尽量单独规划一段地址不要占用业务网段。用 /30 或 /31避免把互联地址和终端地址混在一起管理。设备命名、VLAN 编号、IP 网段要做到全网络统一规则。比如所有交换机互联都用 VLAN 100 到 199所有业务 VLAN 从 10 开始每 10 一段。时间久了你就知道这个习惯有多值钱。保存配置。华为save华三save force思科copy running-config startup-config锐捷类似思科。不保存重启后所有静态路由都会消失。静态路由适合 VLAN 数量少、路径固定的组网。如果交换机数量多、路径有冗余和切换需求就应该考虑 OSPF 等动态路由协议而不是手工维护几十条静态路由。在骨干或汇聚设备上可以考虑给非直连网段写一条默认路由ip route-static 0.0.0.0 0 下一跳配合明细路由使用。但默认路由不能滥用否则容易产生路由环路。我自己做小规模组网的时候习惯先把同一台交换机上的 VLANIF 调通再加静态路由。绝大多数所谓“配置不生效”都不是设备不支持而是 VLAN、Trunk、网关和返回路由这四件事里有一件没对上。按这个顺序排查基本都能快速定位。
返回列表