简介:这份网络技术期末设计压缩包围绕某中学的校园网络拓扑展开,面向计算机网络课程设计、期末实训及eNsp入门至进阶练习者,帮助读者完成从需求分析、拓扑规划到设备配置与验证的完整方案。包内共21个文件,约7.09MB,以14个eNsp设备配置文件(.efz)和1个拓扑文件(.topo)为核心,辅以2份IP规划与模拟说明文本、2个XML配置文件,以及1份设计报告docx和1份答辩展示pptx,覆盖拓扑搭建、地址划分、配置留存与文档成稿等环节。已有305人学习,说明其在课程设计场景中具有较明确的参考价值。读者可据此复现校园网拓扑,查看交换机、路由器及VLAN、路由等配置思路,结合报告与演示文稿理解综合布线、安全性与故障恢复等设计考量,并借助IP规划文本核对网段划分,适合作为课程设计模板、实验对照材料与答辩准备参考。
1. 期末周机房里的那片红:这套 eNsp 网络拓扑到底能帮你交什么
期末前一周的机房,十台电脑有八台开着 eNsp 网络拓扑,满屏红线,谁也不敢先点启动。计算机网络这门课的课程设计,十有八九落在「某中学的网络拓扑设计」上:教学楼、办公楼、图书馆几栋楼,几百个信息点,要划 VLAN、要通外网、还得能无线上网。这个压缩包里就是一套能跑起来的完整答案:eNsp 工程、逐台设备的配置脚本,加上配套的设计说明,从接入交换机到出口路由器一条链路都对得上。适合两类人:刚学完子网划分、要交课程设计却不知道从哪下手的学生,和工作中要接小型园区网、想拿一套现成骨架改吧改吧就用的人。红灯怎么变绿,配置为什么这么写,往下拆。
2. 拆包看骨架:.topo 工程、配置脚本和设计文档怎么对上号
打开压缩包的第一件事别急着双击 .topo 让 eNsp 启动设备,而是先把文件按类型摆开看清楚。这类课程设计资料通常三件套齐活:一个拓扑工程、一组设备配置、一份设计说明。三者不是平行的,而是「设计意图 → 中间产物 → 最终结果」的关系。搞清楚这条链,后面改拓扑、改地址、加设备都不会乱。
2.1 三类文件的分工:谁可以直接改,谁改了会崩
.topo 是 eNsp 的工程文件,本质是一个改了后缀的压缩包,里面是描述设备型号、坐标、连线关系的 XML。直接用文本编辑器去改它风险很高——设备 ID 是内部生成的,连线引用的就是这些 ID,手工删一段或者复制一段设备节点,很容易造成「设备还在、线没了」或者工程打不开。正确姿势是只在 eNsp 图形界面里增删设备、拖线。
配置脚本是逐台设备的 running-config 导出,一般是 .txt 或 .cfg,可以对照着在 eNsp 里粘贴。这类文件是可以改的,但要改完在设备上重新验证一遍,别把别处复制来的片段直接拼进去,接口编号对不上是常事。设计说明文档(Word 或 PDF)是给验收和答辩看的,里面的 VLAN 表、IP 地址表、拓扑图往往比配置本身更能说明你到底想干什么。
| 文件类型 | 典型命名 | 作用 | 直接改的风险 |
|---|---|---|---|
| 拓扑工程 | net_xxx.topo | 设备型号、连线、工程入口 | 高,ID 对不上会丢连线 |
| 设备配置 | Core-A.txt / Acc-1.cfg | 逐台 running-config | 中,接口号和 VLAN 要核对 |
| 设计说明 | 设计文档.docx / .pdf | VLAN 表、地址表、拓扑图 | 低,但改了要同步配置 |
提示:拿到这类资源,先打开设计说明看地址表和拓扑图,再看 .topo 的连线,最后才对着配置一行行核。配置是结果,表格才是设计意图,顺序反了容易越看越乱。
2.2 拓扑分层:双核心、按楼汇聚、到房间接入
一套中学规模的网络,信息点通常在 300 到 800 个之间,这个量级不适合三层到接入的复杂架构,课程设计里最常见也最合理的是「大二层 + 核心做网关」。整个拓扑分四层:出口一台路由器负责地址转换和默认路由;两台核心交换机做 VRRP 双网关、跑 OSPF 和大部分三层策略;每栋楼一台汇聚交换机,只做二层透传和端口密度收敛;再往下是各楼层、各机房的接入交换机,接 PC、AP、打印机和摄像头。
为什么要双核心?不是为了炫技,是为了在答辩时能回答「核心挂了会怎样」。两台核心做 VRRP,虚拟网关地址统一,主机侧完全无感;同时用 MSTP 把两个实例的根桥分别压在两台核心上,让 VLAN 10、20 的流量走 A 核心,VLAN 30、40 走 B 核心,带宽不浪费。这里有个血泪经验:MSTP 的根桥和 VRRP 的 Master 必须是同一台设备,否则会出现「网关在 A、二层路径绕到 B」的情况,跨网段访问延迟莫名其妙变高,抓包看路径还以为自己配错了路由。
无线部分一般是 AC 旁挂核心,AP 管理 VLAN 和业务 VLAN 分开,AP 上线后由 AC 统一下发 SSID 和认证模板。出口如果再讲究一点,可以换成 USG6000V 防火墙,在 eNsp 里也能跑,但对课程设计来说 AR 路由器加 ACL 已经够说明问题。
2.3 地址与 VLAN 规划表:先画表再连线
几乎所有翻车都从规划开始:VLAN 号随便拍、网段随手划,配到后面自己都记不住哪个网段是哪个楼。合格的做法是先定表,再连线,再写配置。这类项目里比较通用的一套规划是这样的:
| VLAN | 用途 | 网段 | 虚拟网关 | 说明 |
|---|---|---|---|---|
| 10 | 教学机房 | 10.0.10.0/24 | 10.0.10.1 | 教学楼各机房,量大 |
| 20 | 办公 | 10.0.20.0/24 | 10.0.20.1 | 办公室、会议室 |
| 30 | 无线业务 | 10.0.30.0/24 | 10.0.30.1 | 访客与学生终端 |
| 40 | 服务器区 | 10.0.40.0/24 | 10.0.40.1 | 教务、文件、DHCP、DNS |
| 99 | 设备管理 | 10.0.99.0/24 | 10.0.99.1 | 交换机、AC 的 Vlanif 地址 |
| 100 | 出口互联 | 10.0.100.0/30 | 无 | 核心到出口路由器 |
规划原则其实就三条:按功能区划分而不是按物理位置划分,因为后面教学区可能扩到别的楼;每个网段前 20 个地址留给静态设备(AP、打印机、网络摄像头),DHCP 池从 .21 开始;设备管理 VLAN 单独划出来,别和业务混在一起,不然改个管理地址可能把整个机房的网关搞挂。互联地址用 /30,只用两个可用地址,省得后面有人把 PC 插上去。
3. 把拓扑跑起来:eNsp 里的开局顺序与分层配置
拿到工程之后,正确的打开方式是从下往上配、从上往下验。先给设备起名字和管理地址,保证自己能远程上去;再配接入和汇聚的 VLAN 与 Trunk;然后核心的 VRRP 和 OSPF;最后才是出口的 NAT 和 DHCP。反过来配也能通,但一旦不通,你很难判断是二层没通还是路由没到。eNsp 有个毛病,配置错了不会报错,只是默默不转发,所以顺序比手速重要。
3.1 开局四件事:设备命名、管理地址、SSH、保存
每台设备上手第一件事不是配业务,而是先让自己能被管到。命名是为了排障时 display 输出里一眼认出是谁,管理地址是为了从核心能 telnet/ssh 到下面所有设备,SSH 是为了不在交付文档里留下 telnet 明文口令的把柄。
<Huawei> system-view [Huawei] sysname Core-A [Core-A] vlan batch 10 20 30 40 99 [Core-A] interface Vlanif 99 [Core-A-Vlanif99] ip address 10.0.99.11 255.255.255.0 [Core-A-Vlanif99] quit [Core-A] stelnet server enable [Core-A] aaa [Core-A-aaa] local-user netadmin password irreversible-cipher Edu@2024 [Core-A-aaa] local-user netadmin privilege level 15 [Core-A-aaa] local-user netadmin service-type ssh [Core-A-aaa] quit [Core-A] user-interface vty 0 4 [Core-A-ui-vty0-4] authentication-mode aaa [Core-A-ui-vty0-4] protocol inbound ssh [Core-A-ui-vty0-4] quit [Core-A] saveirreversible-cipher表示口令以不可逆密文存储,配置文件里看不到明文;privilege level 15是最高权限,课程设计里可以这么图省事,实际交付建议单独建一个低权限账号做巡检;protocol inbound ssh把 telnet 进来的路直接堵死,只留 SSH;vty 0 4是 5 个并发会话,够一个小团队同时登上来查问题。
最后那句save别省。eNsp 关闭工程时不会自动保存 running-config,很多人配了两小时,关掉重开发现全变回默认,那种感觉比配错还难受。我一般还会把每台设备的display current-configuration复制到本地文本里存一份,等于给自己留了后悔药。
3.2 接入层到汇聚层:Access、Trunk 与边缘端口
接入层的配置最能体现「你到底懂不懂二层」。一个机房就是一个 VLAN,接入口全部 access,上联口 trunk 并明确放行哪些 VLAN,没用的 VLAN 一个都不放。
[Acc-A-1] vlan batch 10 99 [Acc-A-1] interface GigabitEthernet 0/0/1 [Acc-A-1-GigabitEthernet0/0/1] port link-type access [Acc-A-1-GigabitEthernet0/0/1] port default vlan 10 [Acc-A-1-GigabitEthernet0/0/1] stp edged-port enable [Acc-A-1-GigabitEthernet0/0/1] port-isolate enable group 1 [Acc-A-1-GigabitEthernet0/0/1] quit [Acc-A-1] interface GigabitEthernet 0/0/24 [Acc-A-1-GigabitEthernet0/0/24] port link-type trunk [Acc-A-1-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 99 [Acc-A-1-GigabitEthernet0/0/24] undo port trunk allow-pass vlan 1port default vlan 10决定了这个口进来没打标签的帧归谁;stp edged-port enable把接入口设成边缘端口,跳过 STP 的监听学习阶段,终端一插上就能通,不然学生机开机要等三十秒才拿到地址,验收时会被当成故障;port-isolate enable group 1是同一个 VLAN 内的端口隔离,机房里的机器互相之间本来就不该通,隔离掉既安全又少广播。上联口那句undo port trunk allow-pass vlan 1是我个人的洁癖,VLAN 1 不放行,管理流量走 VLAN 99,少一条隐患。
汇聚侧如果双上行到两台核心,eNsp 里比较现实的做法是两条链路分别接 A、B 核心,靠 STP 阻塞其中一条,再配 MSTP 实例做负载分担。别指望在 eNsp 里轻松配出跨设备链路聚合,那个要靠堆叠或者更复杂的特性,课程设计阶段容易把自己绕进去。
[Agg-A] stp mode mstp [Agg-A] stp region-configuration [Agg-A-region] region-name campus [Agg-A-region] instance 1 vlan 10 20 [Agg-A-region] instance 2 vlan 30 40 [Agg-A-region] active region-configuration [Agg-A-region] quit [Agg-A] stp instance 1 root primary [Agg-A] stp instance 2 root secondary实例 1 覆盖教学和办公,根桥压在核心 A;实例 2 覆盖无线和服务器,根桥压在核心 B。这样两条上联链路都在转发,不会一条闲死一条累死。
3.3 核心层:VRRP 双网关加 OSPF 单区域
核心是整套拓扑里唯一需要「讲得出道理」的地方。VRRP 提供网关冗余,OSPF 让核心、出口、服务器区之间的路由自动收敛,不用满世界写静态路由。
[Core-A] interface Vlanif 10 [Core-A-Vlanif10] ip address 10.0.10.2 255.255.255.0 [Core-A-Vlanif10] vrrp vrid 10 virtual-ip 10.0.10.1 [Core-A-Vlanif10] vrrp vrid 10 priority 120 [Core-A-Vlanif10] vrrp vrid 10 preempt-mode timer delay 20 [Core-A-Vlanif10] vrrp vrid 10 track interface GigabitEthernet 0/0/1 reduced 30 [Core-A-Vlanif10] quit [Core-A] ospf 1 router-id 10.0.99.11 [Core-A-ospf-1] area 0.0.0.0 [Core-A-ospf-1-area-0.0.0.0] network 10.0.99.0 0.0.0.255 [Core-A-ospf-1-area-0.0.0.0] network 10.0.10.0 0.0.0.255 [Core-A-ospf-1-area-0.0.0.0] quit [Core-A-ospf-1] silent-interface Vlanif 10priority 120让 A 成为 Master,B 保持默认 100 做 Backup;preempt-mode timer delay 20是抢占延迟,避免上行链路抖动时来回切换导致网关来回跳;track interface ... reduced 30是联动,上行口一断,优先级自动降 30,Master 立刻让给 B,比等 VRRP 心跳超时快得多。这个track是整个配置里最值钱的一行,答辩时被问「核心上联断了会怎样」,就靠它回答。
OSPF 部分注意两点:network后面是反掩码,0.0.0.255对应 /24,写成255.255.255.0是新手最常犯的错;silent-interface Vlanif 10让网关接口不发送 Hello 报文,只宣告网段不建邻居,避免把一片终端网段当成广播网去瞎建邻接关系。router-id 用管理地址而不是 loopback,是为了排障时display ospf peer的输出能直接对上设备。
3.4 出口与终端:NAT、默认路由、DHCP 中继
出口这一跳决定「内网能不能上外网」,配置量不大,但错了最难查。
[GW] acl number 2000 [GW-acl-basic-2000] rule 5 permit source 10.0.0.0 0.255.255.255 [GW-acl-basic-2000] quit [GW] interface GigabitEthernet 0/0/1 [GW-GigabitEthernet0/0/1] ip address 200.1.1.2 255.255.255.252 [GW-GigabitEthernet0/0/1] nat outbound 2000 [GW-GigabitEthernet0/0/1] quit [GW] ip route-static 0.0.0.0 0.0.0.0 200.1.1.1 [GW] ip route-static 10.0.0.0 255.0.0.0 10.0.100.1ACL 2000 是基础 ACL,只匹配源地址,0.255.255.255是通配符掩码,表示整个 10.0.0.0/8;nat outbound 2000挂在出接口上,让匹配的流量复用接口地址做端口转换。最后那条回程静态路由是重点:出口路由器不认识 10.0.0.0/8 这个内网大段,不回指就只能单向通,现象是内网能 ping 出去、外面回不来,非常像「NAT 没生效」。也可以用 OSPF 在出口上default-route-advertise把默认路由下发给核心,两种做法都行,课程设计里静态更直观。
终端地址由核心做中继,DHCP 服务器放在服务器区,好处是地址池集中管理,改 DNS 只改一处。
[Core-A] dhcp enable [Core-A] interface Vlanif 10 [Core-A-Vlanif10] dhcp select relay [Core-A-Vlanif10] dhcp relay server-ip 10.0.40.104. 关键配置逐段拆:ACL、NAT 和无线旁挂这三个最容易写错的点
前面那套配置跑通只能算及格,真正拉开差距的是三块:ACL 的匹配顺序、NAT 的几种写法、以及无线 AP 跨三层上线。这三块在 eNsp 里都不会给你报错,只会「看起来通了其实没通」或者「看起来没通其实通了」。
4.1 ACL 的匹配顺序:一条 deny 放错位置就全盘皆输
需求很典型:办公网能访问服务器区,教学网不能访问服务器区但能上外网。很多人第一反应是写两条规则,结果教学网连外网都断了。
[Core-A] acl number 3000 [Core-A-acl-adv-3000] rule 5 permit ip source 10.0.20.0 0.0.0.255 destination 10.0.40.0 0.0.0.255 [Core-A-acl-adv-3000] rule 10 deny ip source 10.0.10.0 0.0.0.255 destination 10.0.40.0 0.0.0.255 [Core-A-acl-adv-3000] rule 1000 permit ip [Core-A-acl-adv-3000] quit [Core-A] interface Vlanif 10 [Core-A-Vlanif10] traffic-filter inbound acl 3000华为设备的 ACL 按 rule 编号从小到大匹配,命中即停,不做「最长匹配」。所以 rule 5 必须先放行办公到服务器,rule 10 再拒绝教学到服务器,顺序调过来,办公的流量会被 deny 吃掉的概率不大但排查起来极其费劲。最后那条rule 1000 permit ip是显式兜底——华为 ACL 在未匹配任何规则时的默认动作是放行,跟很多人从其他厂商带过来的「末尾隐含拒绝」直觉相反,我不赌默认行为,写死一条心里踏实。
traffic-filter inbound挂在 Vlanif 10 上,方向是「从教学网段进入核心」的流量,只影响这个网段出去的方向,不影响别人访问它。方向搞反是另一个高频错误:挂在 outbound 上,你会发现规则完全不生效,因为流量根本不从这个方向走。
4.2 NAT 的两种写法:端口复用和一对一,别混着用
出口地址转换在 eNsp 里有三种常见写法,用途完全不同,混用会出现「部分人能上网、部分人不行」的玄学现象。
[GW] nat address-group 1 [GW-address-group-1] mode pat [GW-address-group-1] section 0 200.1.1.2 200.1.1.2 [GW-address-group-1] quit [GW] interface GigabitEthernet 0/0/1 [GW-GigabitEthernet0/0/1] nat outbound 2000 address-group 1mode pat是端口复用,多个内网地址共用一个公网地址,靠端口号区分会话,适合整个校园网共享一条出口;把mode pat换成no-pat就变成一对一转换,一个内网地址固定映射一个公网地址,适合服务器区对外发布。如果服务器区既想被内网访问又想被外网访问,还得配nat server做端口映射,这跟nat outbound是两套机制,别指望一条命令解决。
参数上唯一要注意的是section的地址范围必须和接口实际地址在同一网段,不然转换能配上但不通,display nat session all里能看到会话建立却没有回包。
4.3 无线旁挂与 DHCP 中继:AP 怎么找到 AC
无线是课程设计里最容易糊弄过去的一块,很多人只配个 SSID 就算完,AP 根本没上线。AP 跨三层上线要解决两件事:AP 自己得有 IP,AP 得知道 AC 在哪。
# 服务器区的 DHCP 池,给 AP 的管理地址 [SRV] ip pool ap [SRV-ip-pool-ap] network 10.0.30.0 mask 255.255.255.0 [SRV-ip-pool-ap] gateway-list 10.0.30.1 [SRV-ip-pool-ap] option 43 sub-option 2 ip-address 10.0.30.2 [SRV-ip-pool-ap] excluded-ip-address 10.0.30.1 10.0.30.20 [SRV-ip-pool-ap] quit # AC 侧指定 CAPWAP 源接口,必须是 AP 能路由到的地址 [AC] vlan batch 30 99 [AC] interface Vlanif 30 [AC-Vlanif30] ip address 10.0.30.2 255.255.255.0 [AC-Vlanif30] quit [AC] capwap source interface Vlanif30option 43 sub-option 2是华为设备的标准写法,把 AC 的 IP 塞进 DHCP 应答里,AP 拿到地址的同时就知道该连谁。capwap source interface指定的地址必须和 option 43 里的一致,两处对不上,AP 会一直卡在「正在获取 AC 地址」。地址池里的excluded-ip-address把 AC 自己的地址和前面留给静态设备的段排除掉,避免地址冲突。
SSID 和认证模板一套配下来大概是这样:
[AC] wlan [AC-wlan-view] ap auth-mode no-auth [AC-wlan-view] security-profile name edu [AC-wlan-sec-prof-edu] security wpa2 psk pass-phrase Edu@2024 aes [AC-wlan-view] ssid-profile name edu [AC-wlan-ssid-prof-edu] ssid Campus-WLAN [AC-wlan-view] vap-profile name edu [AC-wlan-vap-prof-edu] service-vlan vlan-id 30 [AC-wlan-vap-prof-edu] security-profile edu [AC-wlan-vap-prof-edu] ssid-profile edu [AC-wlan-view] ap-group name default [AC-wlan-ap-group-default] vap-profile edu wlan 1 radio allap auth-mode no-auth在实验环境够用,真实项目要换成 MAC 认证或 SN 认证;service-vlan vlan-id 30决定业务流量落在哪个 VLAN,这个 VLAN 必须从 AC 一路 trunk 到 AP 上联口,否则 AP 上线了但终端拿不到地址——这是无线部分最常见的翻车点。
5. 排查与避坑:红灯、通而不达和那些不报错的错
eNsp 最坑的地方在于它很少给你明确的错误提示,配置写错了照样显示绿色,只是包不通。下面这几条是我自己踩过、也在别人工程里反复见到的,按「现象—原因—解决」记下来,出问题的时候直接对。
5.1 链路与二层:线是绿的,包是死的
现象一:两台 PC 在同一台接入交换机上,同 VLAN 却 ping 不通。原因通常是接入口的port default vlan写错,或者上联 Trunk 没放行这个 VLAN,导致跨交换机时标签被丢弃。还有一种可能是 PC 的网关和掩码配错,同网段通信虽然不走网关,但掩码错了会走。 解决:在接入交换机上display port vlan active看每个口的 PVID 和允许通过的 VLAN 列表,在 Trunk 口确认port trunk allow-pass vlan里有目标 VLAN;再display mac-address看两端的 MAC 有没有学到。
现象二:终端插上要等很久才拿到地址,或者 STP 拓扑一变整个机房断几秒。原因是接入口参与了 STP 计算,终端上线触发了生成树收敛;用了默认的 STP 而不是 RSTP/MSTP 时更明显。 解决:接入口统一stp edged-port enable,全局stp mode mstp;如果担心有人把交换机接到接入口造成环路,配上stp bpdu-protection,收到 BPDU 就自动把口关掉。
5.2 路由与出口:内网通、外网不通的三种典型
现象三:内网能 ping 通网关,也能 ping 通出口路由器内网口,就是 ping 不通外网。原因有两个方向:出口没配 NAT,或者配了 NAT 但没有回程路由。前者表现为出口看到大量内网源地址的包往外发,后者表现为出去的包有、回来的没有。 解决:先在出口display nat session all看有没有会话记录,没记录就是 NAT 没挂上或者 ACL 没匹配到;有记录但没回包,就检查出口上有没有ip route-static 10.0.0.0 ...指向核心,或者在出口 OSPF 里default-route-advertise让路由双向自动起来。
现象四:两台核心的 VRRP 都是 Master,或者主备频繁切换。原因是两台设备的priority配成一样且都开了抢占,或者上行口没做track导致一边断了另一边不知道。 解决:display vrrp看状态和优先级,把主设备优先级设成 120、备设备保持默认,抢占延迟设 20 秒以上;上行口一定配vrrp vrid X track interface ... reduced 30,让故障时能快速让位。另外设备的 Vlanif 必须处于 up 状态,Vlanif 没有 up 的端口时 VRRP 会一直 Init,这个现象特别容易误判成配置没生效。
现象五:DHCP 中继配了,终端还是拿不到地址。原因常见三种:中继指向的 DHCP 服务器地址写错,服务器上没有到该网段的路由(中继报文源地址是网关地址,服务器回包必须能路由回来),或者地址池的网关和实际 VRRP 虚拟网关不一致。 解决:先在核心display dhcp relay statistics看请求有没有转发出去,再看服务器侧display ip pool有没有分配记录;重点核对地址池的gateway-list必须是 VRRP 的虚拟地址,写成物理口地址会导致终端能上网但换核心后断。
6. 二次开发:把一份课程设计改成能讲清楚的工程
这套东西交作业绰绰有余,但如果你想拿它去面试或者放进作品集,还差三步改造。
第一步是参数化。把 VLAN 号、网段、设备名抽成一张 Excel 或 YAML,用 Python 的 Jinja2 模板生成每台设备的配置文本,改一个网段全局重出。我在实际项目里就是这么干的,几十台交换机的配置不用手敲,改完模板重新生成,粘回去就行。课程设计里不用做全套,哪怕只做一个「VLAN 表 → 接入交换机配置」的生成脚本,答辩时也足够说明你知道自己在干什么。
第二步是加验证。别用「我看它能 ping 通」当验收,写一张检查清单:核心 VRRP 状态、OSPF 邻居数量、每台接入的 Trunk 放行列表、DHCP 地址池占用率、AP 在线数量。逐条对应命令,跑一遍截图存档。
| 改造点 | 工作量 | 价值 |
|---|---|---|
| 配置模板化生成 | 半天 |
本文还有配套的精品资源,点击获取