做了这么多年网络实验,说句实话,凡是标题里带“综合实验”三个字的,都不是单一知识点的演示,而是逼你把前面学的东西串起来用。这篇记录的就是我在模拟环境里完整跑通的一套内网配置实验:一台路由器、两台交换机、三个部门网段,从零开始划分VLAN、配Trunk、做单臂路由、开DHCP,最终让整个内网的终端自动获取地址并且跨网段互通。适合的读者很明确——刚学完网络基础、想动手做综合实验的学生,或者刚入行运维、对VLAN间路由还停留在理论层面的朋友。
先说结论:这套实验表面上是敲命令,实际上考的是你对数据帧转发过程的理解。命令总共几十条,真正值钱的是你知道每条命令在干什么、数据走到哪一步会出问题。下面我按“需求分析→地址规划→交换机配置→路由器配置→验证测试→问题排查”的顺序,把整个实验从头到尾拆开讲。
1. 实验想解决什么问题
1.1 需求拆解
这个实验的设计背景非常典型:一家公司内部办公网络,以前所有电脑都在同一个网段里,IP是管理员手工填的,今天这台冲突、明天那台上不了网,广播风暴一来全楼卡死。现在要求把办公区、研发区、财务区分成三个独立的广播域,互相不能随便广播干扰,但是业务上又要允许必要的互访,比如财务要访问办公区的打印服务器。
翻译成网络需求就是三件事:第一,用VLAN把终端分组隔离;第二,用路由器(或三层交换机)实现VLAN间的路由;第三,用DHCP让终端自动获取IP,省去手工配置。这里特别注意,“隔离”和“互通”看起来矛盾,其实对应的是不同层的动作——VLAN划分在数据链路层,VLAN间路由在网络层。两个部门之间默认不通,是因为它们在不同的广播域,必须经过网关做路由转发后才允许通信。
1.2 网络拓扑与设备角色划分
这个实验的物理拓扑不复杂,但每个设备角色都必须掰扯清楚。我用的拓扑是一台出口路由器R1、一台核心交换机SW1、两台接入交换机SW2和SW3。R1的物理接口接SW1,SW1向下分别接SW2和SW3,终端PC挂在接入交换机上。
设备角色的划分逻辑是这样的:路由器的本职工作就是跨网段转发,同时兼任DHCP服务器和终端的网关;核心交换机SW1在这里其实不参与路由,它更像一个透明的转发枢纽,负责把各接入交换机的流量汇聚到路由器上;接入交换机SW2、SW3负责把终端划分进对应的VLAN。
这里有个常见的疑问:既然SW1是核心交换机,为什么不让它做VLAN间路由,非要绕一圈到路由器?答案是这个实验的重点是“路由器交换与配置”,要做的是理解单臂路由这种经典模型。生产环境我当然更推荐三层交换机配SVI,后面专门会讲对比,但实验阶段先把基础模型吃透更重要。
2. 地址规划与VLAN划分,这一步绝对不能省
2.1 为什么必须先规划再动手
很多初学者上来就建VLAN、敲IP配置,结果VLAN建了三个,地址池却互相重叠,最后排查半天发现是规划没做。网络实验和写代码不一样,代码报错会提示你哪行有问题,地址规划错了,表现出来的症状五花八门,可能是一个网段通、另一个网段不通,也可能是DHCP偶尔分配出错的“灵异事件”。
所以动手之前,我强烈建议先把三张表画出来:VLAN与网段对应表、网关地址表、设备接口分配表。这三张表就是整个内网的“施工图纸”,后面所有配置都是照着图纸落地。
2.2 VLAN与网段设计
我的规划是三个部门各占一个C类网段:
| VLAN编号 | 业务用途 | 网段 | 网关地址 | DHCP地址池 |
|---|---|---|---|---|
| VLAN 10 | 办公区 | 192.168.10.0/24 | 192.168.10.1 | 192.168.10.10 - 192.168.10.200 |
| VLAN 20 | 研发区 | 192.168.20.0/24 | 192.168.20.1 | 192.168.20.10 - 192.168.20.200 |
| VLAN 30 | 财务区 | 192.168.30.0/24 | 192.168.30.1 | 192.168.30.10 - 192.168.30.200 |
每个网段都用24位掩码,原因很朴素:部门人数几十人,C类地址绰绰有余,而且网段划分清晰,后续加ACL、做路由汇总都方便。网关地址统一用.1,这是最广泛的习惯,运维排查时一眼就知道网关是谁。DHCP地址池范围刻意从.10开始,把.2到.9保留给服务器、打印机等需要固定IP的设备,这是从生产环境学到的习惯。
2.3 设备接口分配
接口分配遵循一个原则:终端设备接Access口,交换机互联接Trunk口,路由器上联也用Trunk口。
| 设备 | 接口 | 类型 | 归属VLAN | 用途 |
|---|---|---|---|---|
| SW2 | GE0/0/1 | Trunk | VLAN 10 20 | 上联SW1 |
| SW2 | GE0/0/2 | Access | VLAN 10 | 办公区PC-A |
| SW2 | GE0/0/3 | Access | VLAN 20 | 研发区PC-B |
| SW3 | GE0/0/1 | Trunk | VLAN 30 | 上联SW1 |
| SW3 | GE0/0/2 | Access | VLAN 30 | 财务区PC-C |
| SW1 | GE0/0/1 | Trunk | VLAN 10 20 | 下联SW2 |
| SW1 | GE0/0/2 | Trunk | VLAN 30 | 下联SW3 |
| SW1 | GE0/0/3 | Trunk | VLAN 10 20 30 | 上联R1 |
| R1 | GE0/0/0.10 | 子接口 | VLAN 10 | 网关及DHCP |
| R1 | GE0/0/0.20 | 子接口 | VLAN 20 | 网关及DHCP |
| R1 | GE0/0/0.30 | 子接口 | VLAN 30 | 网关及DHCP |
从这张表能看出三层模型:接入层做VLAN划分,汇聚层做链路汇聚和转发,核心层做路由。我们用的设备都是两层的,所以路由功能由路由器承担,但链路逻辑是一样的。
3. 交换机配置:重点在Trunk和Access的理解
3.1 初始化与批量创建VLAN
交换机的配置思路是从全局到接口。先把设备命名,便于后期远程管理和日志定位。然后创建VLAN,如果VLAN多,用批量命令一次搞定。
system-view sysname SW1 vlan batch 10 20 30 quitSW2和SW3上同样先改名加建VLAN,其中SW3只需要建VLAN 30。这里我特别说明一下,核心交换机SW1必须把三个VLAN都创建出来,因为它上联路由器的Trunk口要放行全部VLAN;接入交换机SW2只需要创建自己下联终端所属的VLAN,VLAN 30的存在对SW2没有意义。
3.2 Access接口配置的坑与细节
Access口就是“一根线接一台终端”的接口,它只属于一个VLAN。配置Access口时,端口默认VLAN就是该端口所属的VLAN。
interface GigabitEthernet 0/0/2 port link-type access port default vlan 10这里的关键是理解PVID。交换机从Access口收到不带VLAN标签的帧时,会打上这个端口的PVID。也就是说,接PC的Access口PVID是10,那么PC发来的普通以太网帧进入交换机后,就被贴上VLAN 10的标签,在整个交换网络中按VLAN 10的规则转发。
一个容易踩的坑:如果PC连着Access口,但端口PVID没设对,默认为VLAN 1,那么这台PC实际被划分到了VLAN 1,跟后面的DHCP、网关都不在一个网段,表现就是获取不到IP或者IP网段不对。查这种问题最快的方法是display port vlan看端口实际归属。
3.3 Trunk接口配置:放行VLAN是灵魂
Trunk口用于交换机之间的级联,以及交换机与路由器之间的连接。它允许多个VLAN的帧通过,通过802.1Q标签区分不同VLAN。
interface GigabitEthernet 0/0/1 port link-type trunk port trunk allow-pass vlan 10 20配置Trunk口最容易漏的就是allow-pass vlan这一句。有的设备默认Trunk口只放行VLAN 1,如果你只在Trunk口上设置了link-type trunk,忘了放行对应VLAN,结果就是该VLAN的流量在链路上被丢弃,表现是终端能获取到IP(如果DHCP在别的设备上,通过其他路径通),但跨交换机通信时断时续,或者彻底不通。
我在SW2的上联口放行了VLAN 10和20,SW3的上联口放行了VLAN 30,SW1的下联口分别对应放行,上联R1的口则放行全部三个VLAN。这个放行矩阵只要错一个,跨设备通信就会出问题。
3.4 验证交换机配置的三条关键命令
配置完别急着进行下一步,先用显示命令确认状态。我最常用三条:display vlan查看VLAN和接口对应关系,display port vlan查看端口PVID和允许通过的VLAN,display link-type?不对,应该用display interface trunk或display port trunk。
display vlan display port vlan display port trunk如果发现端口归属不对,或者Trunk放行列表少了VLAN,立即改完再往下走。这一步成本最低,等路由器配完了再回头排查,你会同时面对好几个可变因素,很难定位。
4. 路由器配置:单臂路由打通VLAN间通信
4.1 什么是单臂路由,为什么需要子接口
交换机划分VLAN后,不同VLAN之间的帧是隔离的。要让它们互通,必须经过路由器做三层转发。但路由器一个物理接口只有一条链路,多个VLAN的流量都从这个口进出,怎么区分?答案是给物理接口创建子接口,每个子接口对应一个VLAN,并配置成对应网段的网关IP。
这就是“单臂路由”——路由器只用一条物理线路接入交换机,却同时作为多个VLAN的网关。关键在于子接口要能做802.1Q封装,也就是识别和剥离VLAN标签。数据帧从交换机Trunk口出来时带着VLAN 10的标签,路由器的子接口GE0/0/0.10只接收VLAN 10标签的帧,剥离标签后做三层转发;转发出去时再重新打上目标VLAN的标签。
4.2 子接口配置实操
先确保物理接口是开启状态,然后进入子接口,配置VLAN封装和IP地址。
system-view sysname R1 interface GigabitEthernet0/0/0 undo shutdown quit interface GigabitEthernet0/0/0.10 dot1q termination vid 10 ip address 192.168.10.1 255.255.255.0 arp broadcast enable quit interface GigabitEthernet0/0/0.20 dot1q termination vid 20 ip address 192.168.20.1 255.255.255.0 arp broadcast enable quit interface GigabitEthernet0/0/0.30 dot1q termination vid 30 ip address 192.168.30.1 255.255.255.0 arp broadcast enable quit这里有两个细节必须讲透。第一个是dot1q termination vid命令,它的作用是让子接口只处理指定VLAN的帧,这也是为什么子接口配置必须与交换机上VLAN编号严格对应。第二个是arp broadcast enable,在子接口上必须手动开启,因为子接口默认不处理广播帧,而ARP请求是广播,不开通的话终端通过网关通信时ARP解析会失败,表现就是能获取IP但ping不通网关。
4.3 DHCP服务器配置
我这个实验把DHCP直接做在路由器上,省去单独一台服务器,这样内网规模不大时最省事。先开启DHCP全局开关,然后为三个VLAN分别创建地址池,最后在对应子接口下调用。
dhcp enable ip pool vlan10 network 192.168.10.0 mask 255.255.255.0 gateway-list 192.168.10.1 dns-list 114.114.114.114 excluded-ip-address 192.168.10.1 192.168.10.9 lease day 7 hour 0 minute 0 quit ip pool vlan20 network 192.168.20.0 mask 255.255.255.0 gateway-list 192.168.20.1 dns-list 114.114.114.114 excluded-ip-address 192.168.20.1 192.168.20.9 lease day 7 hour 0 minute 0 quit ip pool vlan30 network 192.168.30.0 mask 255.255.255.0 gateway-list 192.168.30.1 dns-list 114.114.114.114 excluded-ip-address 192.168.30.1 192.168.30.9 lease day 7 hour 0 minute 0 quit interface GigabitEthernet0/0/0.10 dhcp select global quit interface GigabitEthernet0/0/0.20 dhcp select global quit interface GigabitEthernet0/0/0.30 dhcp select global quit配置里有两个容易忽略的点。第一,excluded-ip-address把网关和网段前九个地址排除了。有人会问,DHCP默认不分出自己,但如果网关是.1而你没排除.1,在某些设备实现下会出现地址重叠冲突,所以建议明确排除。第二,dns-list这里我填的是公共DNS,实验环境无所谓,但生产环境建议填公司内部的DNS解析服务器,否则内网域名解析会出问题。
有个很容易犯的错误:地址池network和对应子接口的网段不一致,比如地址池写的是192.168.10.0/24,子接口却是192.168.20.1/24。DHCP报文到达子接口后,路由器查看全局地址池,找不到与接口网段匹配的池子,直接不响应。查这个问题的命令是display ip pool,看地址池是否被接口正确引用。
4.4 拓展知识:三层交换机的SVI方案
单臂路由的优点是把路由功能集中在一台设备上,配置清晰,适合教学和小规模场景。但它有个明显问题:所有跨VLAN流量都要经过路由器的单条物理链路,带宽只有1G(或百兆),流量一大就成了瓶颈。
生产环境更常用的是三层交换机方案:在交换机上创建VLANIF接口(SVI),配置IP后交换机自己就能路由,不用外接路由器。配置思路是VLAN 10、20、30各建一个VLANIF,配对应网段的网关地址,最后一台三层交换机就是所有终端的网关。这个方案下,DHCP可以继续在路由器或单独服务器上做,也可以在三层交换机上做,灵活得多。
所以我的结论是:如果你是为了应付实验、理解原理,单臂路由绝佳;如果你是在真实企业里规划内网,优先上三层交换机。两种方案的转发本质是相同的,都是查路由表、改写MAC、下一跳转发。
5. 连通性测试与验证结果
5.1 测试步骤与预期结果
配置完成后,验证环节必须按层级递进,不要跳着测。我的测试顺序是先验证终端DHCP获取,再验证网关连通性,然后验证同VLAN互通,最后验证跨VLAN互通。
三台PC分别接在SW2和SW3上,全部设为自动获取IP。启动后分别查看获取结果:
ipconfig正常的话,PC-A拿到192.168.10.x、PC-B拿到192.168.20.x、PC-C拿到192.168.30.x,并且网关分别是.1地址。如果哪台获取的地址不在预期网段,先查接入交换机端口PVID,大概率是Access口default VLAN没配对。
接着ping网关,验证上行链路和路由器子接口。从PC-A执行:
ping 192.168.10.1通了,说明PC到路由器VLAN 10子接口的链路OK。然后PC-A ping同VLAN的终端(如果还有第二台PC在同一VLAN),验证接入层的二层转发。最后是重头戏,跨VLAN互通测试:
ping 192.168.20.1 ping 192.168.30.1 ping 192.168.20.2 ping 192.168.30.2前两条通,说明VLAN间路由路径建立;后两条通,说明实际终端之间的数据转发没问题。我测试时全部通过,第一次延时略高,之后稳定在1ms以内,符合预期。
5.2 抓包看数据帧的转发过程
如果你手头有抓包工具,建议在路由器和交换机之间的Trunk链路抓一下。你会发现跨VLAN通信时,数据帧在Trunk链路上是带802.1Q标签的,一共会出现四次MAC地址变化,具体来说就是PC-A发帧给网关MAC,经过交换机Trunk链路到达路由器,路由器剥离标签后将帧转发到目标VLAN,重新封装目的MAC为PC-C的MAC,再通过Trunk链路到达SW3,SW3从Access口剥离标签后交给PC-C。
这个过程看起来复杂,但理解了它,你就真正理解了VLAN间通信的本质:跨网段通信必须经过网关做路由,帧每经过一个三层设备,源和目的MAC都会被改写,而IP地址在整个过程中保持不变。这也是为什么配路由器子接口时IP和MAC两个问题都要处理好。
5.3 抓包常见现象的判断
如果在Trunk链路抓包时只看到某个VLAN的帧频繁出现ARP请求,没有数据帧,说明路由或ARP解析存在问题,重点查子接口是否开启arp broadcast enable。如果看到大量重复的广播帧,说明VLAN划分没生效或者Trunk放行了多余的VLAN,广播域没有被隔离干净。
6. 常见问题与排查实录
6.1 问题速查表
把我在实验过程中遇到过、以及帮别人排查过的问题整理成一张表,你遇到类似情况可以直接对照。
| 症状 | 可能原因 | 排查命令/动作 |
|---|---|---|
| 终端获取不到IP地址 | 全局dhcp enable没开;地址池和子接口网段不匹配;接入交换机端口PVID错误 | display ip pool;display dhcp server statistics;display port vlan |
| 获取的IP网段不对 | PC接错了Access口,端口default vlan没配置或配置错误 | display port vlan |
| 能ping通网关,跨VLAN不通 | 子接口IP配置错误;路由表缺失;子接口没开启arp broadcast enable | display ip routing-table;display interface GigabitEthernet 0/0/0.10 |
| 同VLAN跨交换机不通 | Trunk口未放行该VLAN;两端Trunk配置不一致 | display port trunk |
| 某些VLAN通、某些VLAN不通 | Trunk放行列表遗漏;子接口或地址池存在单个VLAN的配置错误 | 逐VLAN检查配置 |
| ping网关时通时不通 | Trunk链路协商异常;物理接口或网线接触不良;双工模式不匹配 | display interface GigabitEthernet 0/0/1 |
| DNS解析失败但ping IP通 | dns-list配置错误;终端获取的DNS不是内网可用的DNS | ipconfig /all |
6.2 定位问题的一套通用排查顺序
我自己的排查习惯是从底向上、从物理到逻辑,跟你分享这套顺序。第一步看物理接口状态,接口down一切免谈;第二步看VLAN配置,确认终端所属VLAN正确、Trunk放行完整;第三步看三层接口,子接口IP、路由表、ARP表是否正常;第四步看DHCP,地址池和接口是否匹配、租约是否正常。这套顺序能避免你一把梭式地乱试,每次只改动一个变量,定位问题会快得多。
我特别想提醒的是,很多人遇到问题喜欢反复重启服务或重敲配置,这其实不如静下心来看显示命令的输出。设备状态是客观的,display命令的输出会把问题指向清清楚楚地告诉你。有一次我一台PC怎么都拿不到IP,最后查出来是二层交换机上这个端口的PVID被之前实验改成了别的数值,Access口配了default vlan 10,但PVID和default vlan不一致导致DHCP discover报文没进入正确的VLAN,这种情况不改配置根本看不出来。
6.3 两个我亲测有效的技巧
第一个技巧,抓包永远比猜快。我遇到疑难问题,只要在关键链路放一个端口镜像抓包,立刻能定位是二层问题、三层问题还是DHCP问题。第二个技巧,配完一台设备马上验证,不要全部配完再验证。我在交换机上配完VLAN就先display vlan,配完Trunk就先display port trunk,路由器和DHCP配置完也是立刻看状态,分段验证的好处是问题永远在你刚操作过的部分,几乎不可能出现那种需要全盘排查的僵局。
关于实验环境,我是在虚拟网络模拟器里跑通的,软件模拟的逻辑和真实设备基本一致。如果你准备在真实设备上复现,唯一要注意的是设备型号不同,命令细节会有差异——比如有的设备子接口封装命令是encapsulation dot1q,有的是dot1q termination vid,含义相同但写法不同,别死记命令,要理解它做的事情是“让子接口识别第几个VLAN的标签”。
这个实验做完正好卡在整套综合实验的中间节点上,下一步自然是外网部分——出口地址转换、默认路由指向运营商、加上访问控制策略。内网这部分打通,相当于房子的骨架和水电管线都铺好了,后面剩下的就是装门窗和刷墙。但我得说,真正干活的时候,内网配置永远是最花心思的部分,因为所有上层应用都踩在这张网上,地址规划差了,将来扩容和排障都会很难受。希望这篇能帮你少走点弯路。