#import "labtemplate.typ": * #show: nudtlabpaper.with(title: "异构网络设计综合实验", author1: "程景愉", id1: "202302723005", training_type:"计算机类", grade: "大三", major: "网络工程", department: "计算机学院", advisor: "张军", jobtitle: "工程师", lab: "306-707", date: "2025.10.28", header_str: "《网络工程》实验报告", ) #set page(header: [ #set par(spacing: 6pt) #align(center)[#text(size: 11pt)[网络工程课程设计实验报告]] #v(-0.3em) #line(length: 100%, stroke: (thickness: 1pt)) ],) #show heading: it => box(width: 100%)[ #v(0.50em) #set text(font: hei) #it.body ] #outline(title: "目录",depth: 3, indent: 1em) #outline( title: [图目录], target: figure.where(kind: image), ) #show heading: it => box(width: 100%)[ #v(0.50em) #set text(font: hei) #counter(heading).display() // #h(0.5em) #it.body ] // Display inline code in a small box // that retains the correct baseline. #show raw.where(block: false): it => box( text(font: ("Maple Mono NF","Noto Sans CJK SC"), it), fill: luma(240), inset: (x: 3pt, y: 0pt), outset: (y: 3pt), radius: 2pt, ) // Display block code in a larger block // with more padding. #show raw.where(block: true): it => block( text(font: ("Maple Mono NF","Noto Sans CJK SC"), it), fill: luma(240), inset: 6pt, radius: 3pt, width: 100%, ) #set enum(indent: 0.5em,body-indent: 0.5em,) #pagebreak() = 实验目的 #para[ 通过对常用的组网设备(包括交换机、路由器、防火墙)、常见的网络服务系统(Web服务、Proxy服务、Smtp & Pop3服务、DNS服务等)的安装与配置与调试实验,加深对上述设备和系统工作原理的理解,初步掌握其安装配置方法,为将来从事网络工程建设打下基础。 ] = 实验概述 #para[ 一个完整的组网工程包括需求分析、方案设计、设备选型与采购、硬件安装与配置、软件安装与配置、系统测试与联调、工程验收等若干个环节,其中硬件与应用系统安装、配置工作量大,技术含量高,是信息系统集成或网络工程的关键环节,其中既涉及到技术上的问题,也涉及到工程组织、协调配合上的问题,一个网络工程师只有通过多次工程的实际锻炼,不断积累经验、吸取教训才能提高自己的水平。 ] = 需求分析 #para[ 设计并构建一个小型的校园网络平台,并在该平台上构建INTERNET服务平台,该网络工程建成后,将具有以下服务功能: ] 1. 具有内部Web 服务功能; 2. 具有外部Web服务代理功能 ; 3. 具有邮件收发功能; 4. 具有对内部核心子网安全保护功能; 5. 具有内部域名解析功能; 6. 具有简单的网络管理功能。 == 技术分析 #para[ 为满足校园的网络需求,网络建设需采用多种先进技术。首先,通过链路聚合技术(Eth-trunk)提升网络带宽和链路可靠性,特别是在核心层与接入层之间。其次,需使用虚拟路由冗余协议(VRRP)确保出口网关的高可用性,防止单点故障。VLAN技术用于划分不同部门的安全区域,确保网络流量的隔离与安全性。MAC地址绑定用于确保网络设备的安全性。STP技术用于防止网络环路。此外,无线网络覆盖技术用于支持移动办公和访客接入,确保网络的全面覆盖。 ] #para[ 该小型校园的网络建设需要多种设备来满足需求。首先,选择两台路由器(AR1、AR2)作为出口网关,支持VRRP协议。其次,核心层需要两台支持堆叠技术的交换机(LSW1、LSW2使用普通线缆堆叠),用于连接各个接入层交换机和防火墙。接入层需要多台交换机(LSW3、LSW4、LSW5)用于连接终端设备,如PC、服务器等。防火墙方面,需要一台防火墙(FW)用于网络安全防护,支持分时访问。此外,还需要无线接入点(AP)用于无线网络覆盖。总体来看,本次实验设备包括4台路由器、4台交换机、1台防火墙、三台PC及一块树莓派(用于模拟服务器与提供AP),确保实验网络的全面覆盖与高效运行。 ] == 实验环境 #para[ 软件清单: ] #align(center)[#table( columns: (auto, auto), rows:40pt, inset: 10pt, align: horizon+center, table.header( [软件名称], [软件功能] ), "Apache HTTP Server", "提供Web服务", "Poste.io Mail Server", "提供邮件服务(SMTP/POP3)", "Vsftpd", "提供FTP服务", "Wireshark", "网络数据包分析工具", "PuTTY", "SSH/Telnet远程终端工具", "EndeavourOS Linux", "树莓派操作系统", "Huawei eNSP", "网络设备模拟与配置工具", )] #para[ 硬件设备: ] #align(center)[#table( columns: (auto, auto,auto,auto), rows:40pt, inset: 10pt, align: horizon+center, table.header( [设备名称], [设备型号], [设备数量],[设备名称] ), "交换机", "华为S5735", "4","CORE(LSW1 + LSW2)、LSW3、LSW4", "路由器", "华为AR6120-S", "4","R1、R2、R3、R_NEW", "防火墙", "华为USG6303E-AC", "1","FW", "树莓派", "Raspberry Pi Model 4B", "1","server", "PC", "联想启天M410 Windows 10", "3","PC1、PC2、PC3" )] #para[ 另有网线、控制线若干。 ] == 任务分工 #align(center)[#table( columns: (auto, auto, auto), rows:40pt, inset: 10pt, align: horizon+center, table.header( [任务], [分工], [时间] ), "结构设计与构思", "程景愉", "10.22", "服务器配置", "程景愉", "10.23-10.28", "交换机路由器配置", "程景愉", "10.23-10.28", "防火墙配置", "程景愉", "10.23-10.28", "调试", "程景愉", "10.29", "实验测试", "程景愉", "11.1-11.2", "进阶实验", "程景愉", "11.7-11.8", )] == 拓扑图表 #para[ 下面给出拓扑图和设备连接表,详细描述该小型校园网络的设计方案。 ] === 拓扑图 #para[ 物理链路的拓扑图如@topo 所示(见下页): ] #figure(image("网络拓扑.png",format: "png",fit:"stretch",width: 115%),caption: "实验拓扑图") #para[ 实验示意图如@logic_topo 所示(见下页): ] #figure(image("实验示意图.png",format: "png",fit:"stretch",width: 120%),caption: "实验示意图") #para[ 接下来给出设备连接表(拓扑表): ] // #para[ #figure(image("地址表.png",format: "png",fit:"stretch",width: 100%),caption: "IP 地址表(以实际实验为准)") #pagebreak() // #set page(flipped: true) = 实验步骤及结果 #para[] == 设备连接 #para[ 将所有设备按照拓扑图连接好,确保每个设备的接口都正确连接: ] #figure(image("机柜正面.jpg",format: "jpg",fit:"stretch",width: 40%),caption: "机柜正面接线图") #figure(image("机柜背面.jpg",format: "jpg",fit:"stretch",width: 40%),caption: "机柜背面接线图") #para[ 注:以上为验收前拍摄的图片,验收后有返回机房进行实验补充如交换机堆叠与邮件服务器部署,实际情况以报告内容为准。 ] == 接入层 (S3, S4) 与核心层 (CORE) L2/L3 基本功能配置 === 组建堆叠系统 #para[ 堆叠功能在验收后补充进行,原因是一开始以为必须有专用堆叠线缆导致无法实验,后查询华为文档发现支持普通线缆堆叠。在此处配置开始之前,必须明确:本设备的逻辑堆叠端口stack-port 0/1对应的物理端口,必须连接邻设备的逻辑堆叠端口stack-port 0/2对应的物理端口,否则堆叠组建不成功。 ] + 配置逻辑堆叠端口并加入物理成员端口。 - 配置LSW1的业务口g0/0/20、g0/0/21为物理成员端口,并加入到相应的逻辑堆叠端口。 ``` system-view [HUAWEI] sysname LSW1 [LSW1] interface stack-port 0/1 [LSW1-stack-port0/1] port interface g0/0/20 enable Warning: Enablingstack function may cause configuration loss on the interface. Continue? [Y/N]:y Info: This operation may take a few seconds. Please wait. [LSW1-stack-port0/1] quit [LSW1] interface stack-port 0/2 [LSW1-stack-port0/2] port interface g0/0/21 enable Warning: Enablingstack function may cause configuration loss on the interface. Continue? [Y/N]:y Info: This operation may take a few seconds. Please wait. [LSW1-stack-port0/2] quit ``` - 配置LSW2的业务口g0/0/20、g0/0/21为物理成员端口,并加入到相应的逻辑堆叠端口。 ``` system-view [HUAWEI] sysname LSW2 [LSW2] interface stack-port 0/1 [LSW2-stack-port0/1] port interface g0/0/20 enable Warning: Enablingstack function may cause configuration loss on the interface. Continue? [Y/N]:y Info: This operation may take a few seconds. Please wait. [LSW2-stack-port0/1] quit [LSW2] interface stack-port 0/2 [LSW2-stack-port0/2] port interface g0/0/21 enable Warning: Enablingstack function may cause configuration loss on the interface. Continue? [Y/N]:y Info: This operation may take a few seconds. Please wait. [LSW2-stack-port0/2] quit ``` + 配置堆叠ID和堆叠优先级 - 配置LSW1的堆叠优先级为200。 ``` [LSW1] stack slot 0 priority 200 Warning: Do not frequently modify the Priority because it will make the stack split. Continue? [Y/N]:y ``` - 配置LSW2的堆叠ID(即Slot)为1。 ``` [LSW2] stack slot 0 renumber 1 Warning: All the configurations related to the slot ID will be lost after the slot ID is modified. Do not frequently modify the slot ID because it will make the stack split. Continue? [Y/N]:y Info: Stack configuration has been changed, and the device needs to restart to make the configuration effective. ``` + 在每台设备上、在用户界面下输入`save`命令,保存配置信息。 + 关闭设备并按顺序启动 - 关闭LSW1、LSW2。 - 先启动LSW1,等待2分钟左右,控制机能够登录到LSW1之后,再启动LSW2。 + 检验配置结果 使用`display stack`命令查看堆叠状态,输出信息如下: ``` [CORE]disp stack Stack mode: Service-port Stack topology type: Ring Stack system MAC: 6012-3c9a-5ff0 MAC switch delay time: 10 min Stack reserved VLAN: 4093 Slot of the active management port: -- Slot Role MAC Address Priority Device Type ------------------------------------------------------------- 0 Master 6012-3c9a-5ff0 200 S5735S-S24T4S-A 1 Standby 642c-acc1-5970 100 S5735S-S24T4S-A ``` 输出展示了堆叠的状态信息,包括堆叠模式、堆叠拓扑类型、堆叠系统MAC地址、MAC切换延迟时间、堆叠保留VLAN、激活管理端口的槽位、各个槽位的角色、MAC地址、优先级和设备类型。其中,槽位0的Priority为200,槽位1的Priority为100,在竞争中槽位0最终会成为Master角色,槽位1为Standby角色。按照顺序上电能够保证设备快速进入事先规定好的角色。 #para[ 配置完成后,两台设备将组成一个堆叠系统,逻辑上看成一个设备,标号为CORE,称为核心集群。在后续的配置中,将以CORE作为设备名称。 ] === 配置员工区交换机 #para[ 员工区交换机 S3 主要负责连接员工的终端设备(如PC1),并通过核心集群与其他网络区域进行通信。为了确保网络的高效性和安全性,需要对 S3 进行基本的 VLAN 和链路聚合配置。下面开始配置 S3 的基本信息和 VLAN: ] ``` [S3] sysname S3 [S3] vlan batch 10 # 配置 Eth-Trunk 到 CORE [S3] interface Eth-Trunk 1 [S3] port link-type trunk [S3] port trunk allow-pass vlan 10 [S3] mode lacp-static # 静态LACP [S3] quit [S3] interface GigabitEthernet 0/0/1 [S3] eth-trunk 1 [S3] quit [S3] interface GigabitEthernet 0/0/2 [S3] eth-trunk 1 [S3] quit # 配置接入端口 (PC1) [S3] interface GigabitEthernet 0/0/3 [S3] port link-type access [S3] port default vlan 10 [S3] stp edged-port enable # 边缘端口,快速转发 [S3] quit ``` === 配置服务器/访客区交换机 #para[ 服务器/访客区交换机 S4 主要负责连接服务器和访客的终端设备(如PC3),并通过核心集群与其他网络区域进行通信。为了确保网络的高效性和安全性,需要对 S4 进行基本的 VLAN 和链路聚合配置。下面开始配置 S4 的基本信息和 VLAN: ] ``` [S4] sysname S4 [S4] vlan batch 20 30 # 配置 Eth-Trunk 到 CORE [S4] interface Eth-Trunk 1 [S4] port link-type trunk [S4] port trunk allow-pass vlan 20 30 [S4] mode lacp-static [S4] quit [S4] interface GigabitEthernet 0/0/1 [S4] eth-trunk 1 [S4] quit [S4] interface GigabitEthernet 0/0/2 [S4] eth-trunk 1 [S4] quit # 配置接入端口 (Server) [S4] interface GigabitEthernet 0/0/3 [S4] port link-type access [S4] port default vlan 20 [S4] stp edged-port enable [S4] quit # 配置接入端口 (PC3) [S4] interface GigabitEthernet 0/0/4 [S4] port link-type access [S4] port default vlan 30 [S4] stp edged-port enable [S4] quit # 配置接入端口 (R_NEW) [S4] interface GigabitEthernet 0/0/5 [S4] port link-type access [S4] port default vlan 40 [S4] stp edged-port enable [S4] quit ``` === 配置核心堆叠交换机的Eth-Trunk功能和接口IP地址 #para[ 此步骤是要将核心集群与其他设备相连的物理链路聚合起来,以提高链路的带宽和可靠性。 ] #pagebreak() + 配置 CORE 网关 ``` [CORE] vlan batch 10 20 30 40 [CORE] interface Vlanif 10 [CORE] ip address 192.168.10.254 255.255.255.0 [CORE] quit [CORE] interface Vlanif 20 [CORE] ip address 192.168.20.254 255.255.255.0 [CORE] quit [CORE] interface Vlanif 30 [CORE] ip address 192.168.30.254 255.255.255.0 [CORE] quit [CORE] interface Vlanif 40 [CORE] ip address 10.0.4.1 255.255.255.252 [CORE] quit ``` + 配置 Eth-Trunk 到 S3 ``` [CORE] interface Eth-Trunk 1 [CORE] port link-type trunk [CORE] port trunk allow-pass vlan 10 [CORE] mode lacp-static [CORE] quit [CORE] interface GigabitEthernet 1/0/1 [CORE] eth-trunk 1 [CORE] quit [CORE] interface GigabitEthernet 2/0/1 [CORE] eth-trunk 1 [CORE] quit ``` + 配置 Eth-Trunk 到 S4 ``` [CORE] interface Eth-Trunk 2 [CORE] port link-type trunk [CORE] port trunk allow-pass vlan 20 30 [CORE] mode lacp-static [CORE] quit [CORE] interface GigabitEthernet 1/0/2 [CORE] eth-trunk 2 [CORE] quit [CORE] interface GigabitEthernet 2/0/2 [CORE] eth-trunk 2 [CORE] quit ``` + 配置 CORE 接口到 R_NEW ``` [CORE] interface GigabitEthernet 1/0/3 [CORE] port link-type access [CORE] port default vlan 40 [CORE] quit ``` == 接入层安全配置 (S3, S4) #para[ 接入层的配置比较简单,主要涉及到 VLAN, MAC地址绑定。 ] + 配置 S3: ``` [S3] dhcp enable [S3] dhcp snooping enable [S3] dhcp snooping enable vlan 10 # 信任上联到 CORE 的 Trunk 口 [S3] interface Eth-Trunk 1 [S3] dhcp snooping trusted [S3] quit # 配置 PC1 端口安全 [S3] interface GigabitEthernet 0/0/3 [S3] port-security enable [S3] port-security max-mac-num 1 # 只允许1个MAC地址 [S3] port-security protect-action restrict # 丢弃并告警 [S3] quit ``` + 配置 S4: ``` [S4] dhcp enable [S4] dhcp snooping enable [S4] dhcp snooping enable vlan 20 30 # 信任上联到 CORE 的 Trunk 口 [S4] interface Eth-Trunk 1 [S4] dhcp snooping trusted [S4] quit # 配置 Server 端口安全 [S4] interface GigabitEthernet 0/0/3 [S4] port-security enable [S4] port-security max-mac-num 1 [S4] port-security protect-action restrict [S4] quit # 配置 PC3 端口安全 [S4] interface GigabitEthernet 0/0/4 [S4] port-security enable [S4] port-security max-mac-num 1 [S4] port-security protect-action restrict [S4] quit ``` == OSPF路由配置 #para[ 本次实验我将使用 OSPF Area 0 作为内部骨干区域,Area 1 作为外部 ISP 区域。 ] #pagebreak() + 在 CORE 上配置路由 ```plaintext [CORE] ospf 1 router-id 1.1.1.1 [CORE] area 0 [CORE] network 192.168.10.0 0.0.0.255 [CORE] network 192.168.20.0 0.0.0.255 [CORE] network 192.168.30.0 0.0.0.255 [CORE] network 10.0.4.0 0.0.0.3 [CORE] quit [CORE] quit ``` + 在 R_NEW 上配置路由 ```plaintext [R_NEW] sysname R_NEW [R_NEW] interface GigabitEthernet 0/0/0 [R_NEW] ip address 10.0.1.2 255.255.255.252 [R_NEW] quit [R_NEW] interface GigabitEthernet 0/0/1 [R_NEW] ip address 10.0.4.1 255.255.255.252 [R_NEW] quit [R_NEW] ospf 1 router-id 2.2.2.2 [R_NEW] area 0 [R_NEW] network 10.0.1.0 0.0.0.3 [R_NEW] network 10.0.4.0 0.0.0.3 [R_NEW] quit [R_NEW] quit ``` + 在 R1 (出口1 - 主) 上配置路由 #para[ 这里我在验收后补充实验时选择改为使用`ospf cost`来替代`VRRP`实现冗余备份功能,增强网络系统的健壮性。 ] ``` [AR2] interface Eth-Trunk 2 [AR2-Eth-Trunk2] undo portswitch [AR2-Eth-Trunk2] mode lacp-static [AR2-Eth-Trunk2] quit [AR2] interface GigabitEthernet 0/0/4 [AR2-GigabitEthernet0/0/4] Eth-Trunk 2 [AR2-GigabitEthernet0/0/4] quit [AR2] interface GigabitEthernet 0/0/5 [AR2-GigabitEthernet0/0/5] Eth-Trunk 2 [AR2-GigabitEthernet0/0/5] quit ``` + 在 R2 (出口2 - 备) 上配置路由 ``` [R2] sysname R2 [R2] interface GigabitEthernet 0/0/0 [R2] ip address 10.0.3.1 255.255.255.252 [R2] quit [R2] interface GigabitEthernet 0/0/1 [R2] ip address 203.0.113.6 255.255.255.252 [R2] ospf cost 100 # **关键:设置高 cost,作为备路** [R2] quit [R2] ospf 1 router-id 4.4.4.4 [R2] area 0 [R2] network 10.0.3.0 0.0.0.3 [R2] quit [R2] area 1 [R2] network 203.0.113.4 0.0.0.3 [R2] quit [R2] quit ``` + 在 R3 (ISP 模拟) 上配置路由 ```plaintext [R3] sysname R3 [R3] interface GigabitEthernet 0/0/0 [R3] ip address 203.0.113.1 255.255.255.252 [R3] quit [R3] interface GigabitEthernet 0/0/1 [R3] ip address 203.0.113.5 255.255.255.252 [R3] quit [R3] interface GigabitEthernet 0/0/2 [R3] ip address 172.16.1.254 255.255.255.0 [R3] quit [R3] interface GigabitEthernet 0/0/3 [R3] ip address 8.8.8.1 255.255.255.0 [R3] quit [R3] ospf 1 router-id 5.5.5.5 [R3] area 1 [R3] network 203.0.113.0 0.0.0.3 [R3] network 203.0.113.4 0.0.0.3 [R3] network 172.16.1.0 0.0.0.255 [R3] network 8.8.8.0 0.0.0.255 [R3] quit [R3] ospf 1 [R3] default-route-advertise always [R3] quit ``` === 配置出口网关的BFD功能 #para[ 配置 R1 和 R2 之间的 BFD 功能,用于快速检测链路故障并触发 OSPF 路由收敛。 ] + 配置全局 BFD 功能。 ```plaintext [R1] bfd [R1-bfd] quit ``` ```plaintext [R2] bfd [R2-bfd] quit ``` + 在 R1 上配置 OSPF 的 BFD 特性。 ```plaintext [R1] ospf 100 // 进入 OSPF 视图 [R1-ospf-100] bfd all-interfaces enable // 打开 OSPF BFD 特性的开关,建立 BFD 会话 [R1-ospf-100] quit ``` + 在 R2 上配置 OSPF 的 BFD 特性。 ```plaintext [R2] ospf 100 // 进入 OSPF 视图 [R2-ospf-100] bfd all-interfaces enable // 打开 OSPF BFD 特性的开关,建立 BFD 会话 [R2-ospf-100] quit ``` + 配置 BFD 参数。 ```plaintext [R1-ospf-100] bfd all-interfaces min-rx-interval 1000 min-tx-interval 1000 detect-multiplier 3 [R2-ospf-100] bfd all-interfaces min-rx-interval 1000 min-tx-interval 1000 detect-multiplier 3 ``` #para[ 此时,R1 和 R2 之间已经建立了 BFD 会话,可以使用 `display bfd session` 命令查看 BFD 会话状态。 ] == DHCP 中继与服务器配置 === CORE 的 DHCP 中继配置 ``` [CORE] dhcp enable # 全局启用中继 [CORE] dhcp relay server-ip 10.0.1.1 # 指向 FW1 的 Trust 接口 IP # 在 Vlanif 上启用 [CORE] interface Vlanif 10 [CORE] dhcp select relay [CORE] quit [CORE] interface Vlanif 30 [CORE] dhcp select relay [CORE] quit ``` === FW1 防火墙上的 DHCP 服务配置 #para[ 此步骤在 FW1 的 Web-UI 中完成: ] + 导航到 网络 > DHCP > DHCP服务器 > DHCP地址池。 + 新建 地址池 (VLAN 10): 地址池名称: VLAN10_Staff 网段: 192.168.10.0 掩码: 255.255.255.0 网关: 192.168.10.254 DNS服务器: 8.8.8.8 (或ISP的DNS) 地址池范围: 192.168.10.100 到 192.168.10.200 + 新建 地址池 (VLAN 30): 地址池名称: VLAN30_Guest 网段: 192.168.30.0 掩码: 255.255.255.0 网关: 192.168.30.254 DNS服务器: 8.8.8.8 地址池范围: 192.168.30.100 到 192.168.30.200 #para[ 确保 DHCP 服务器功能已在 Trust 区域接口上启用(通常默认启用)。 ] == 防火墙 (FW1) 的基本功能配置 === 接口与区域配置 + 导航到 网络 > 接口。 配置 GigabitEthernet1/0/0 (to R_NEW): 安全区域: Trust IP地址: 10.0.1.1 / 30 安全区域:DMZ IP地址: 192.168.20.0/24 配置 GigabitEthernet1/0/1 (to R1): 安全区域: Untrust IP地址: 10.0.2.2 / 30 配置 GigabitEthernet1/0/2 (to R2): 安全区域: Untrust IP地址: 10.0.3.2 / 30 #figure(image("interface.jpg",format: "jpg",fit:"stretch",width: 60%),caption: "防火墙接口配置") === 防火墙的 OSPF 配置 ``` [FW1] ospf 1 router-id 6.6.6.6 [FW1-ospf-1] area 0 [FW1-ospf-1-area-0.0.0.0] network 10.0.1.0 0.0.0.3 [FW1-ospf-1-area-0.0.0.0] network 10.0.2.0 0.0.0.3 [FW1-ospf-1-area-0.0.0.0] network 10.0.3.0 0.0.0.3 [FW1-ospf-1-area-0.0.0.0] quit [FW1-ospf-1] quit [FW1] quit ``` === 安全策略 (内网上网) 导航到 策略 > 安全策略。 新建 策略: 名称: Trust_to_Untrust_Allow 源区域: Trust 目的区域: Untrust 源地址: Any (或 192.168.0.0/16) 目的地址: Any 服务: Any 动作: Permit #figure(image("security1.jpg",format: "jpg",fit:"stretch",width: 60%),caption: "安全策略配置") === SNAT (源NAT) 策略 (内网上网) 导航到 策略 > NAT策略 > 源NAT。 新建 策略: 源区域: Trust 目的区域: Untrust 源地址: 192.168.0.0 / 16 (覆盖所有内网VLAN) 目的地址: Any 动作: 源NAT 转换模式: 出接口地址 (这样流量走R1就NAT成R1接口IP,走R2就NAT成R2接口IP)。注意:这里 FW1 的出接口是 10.0.2.2 和 10.0.3.2,这还不是实验中设计的公网IP。 #figure(image("nat.jpg",format: "jpg",fit:"stretch",width: 60%),caption: "NAT 策略配置") 拓扑缺陷与解决: 我设计的拓扑中,FW1在R1/R2之后,SNAT需要做两次。 FW1 (Web-UI): Trust -> Untrust (192.168.x.x -> 10.0.2.2/10.0.3.2) R1/R2 (CLI): 需要再做一次 NAT (192.168.x.x -> 203.0.113.x) 为解决问题,在 R1/R2 上配置 SNAT : ``` [R1] acl 3000 [R1-acl-adv-3000] rule 5 permit ip source 192.168.0.0 0.0.255.255 [R1-acl-adv-3000] quit [R1] interface GigabitEthernet 0/0/1 [R1-GigabitEthernet0/0/1] nat outbound 3000 [R1-GigabitEthernet0/0/1] quit [R2] acl 3000 [R2-acl-adv-3000] rule 5 permit ip source 192.168.0.0 0.0.255.255 [R2-acl-adv-3000] quit [R2] interface GigabitEthernet 0/0/1 [R2-GigabitEthernet0/0/1] nat outbound 3000 [R2-GigabitEthernet0/0/1] quit ``` #para[ FW1上的 SNAT (Web-UI): (如上所述) Trust -> Untrust,源: 192.168.0.0/16,动作: NAT (出接口地址)。 ] === 分时访问策略配置 导航到 对象 > 时间段。 新建 时间段: 名称: Work_Time 类型: 周期 星期: 勾选 周一 到 周五 时间: 08:00:00 到 17:00:00 导航到 策略 > 安全策略。 修改 之前的 Trust_to_Untrust_Allow 策略: 源地址: 更改为 192.168.10.0/24 (仅员工区) 时间段: 选择 Work_Time 新建 一条策略 (服务器/访客全天可上): 名称: Server_Guest_Allow 源区域: Trust 目的区域: Untrust 源地址: (创建一个地址组包含 192.168.20.0/24 和 192.168.30.0/24) 动作: Permit #para[ 将此策略拖到 Work_Time 策略下方。 ] #figure(image("worktime.jpg",format: "jpg",fit:"stretch",width: 60%),caption: "分时访问策略配置") == 树莓派服务器的配置 #para[树莓派在本次实验中设置静态IP地址为`192.168.20.50/24`,充当Web服务器,FTP服务器与邮件服务器的角色,同时还提供 AP 实现无线接入功能。] #figure(image("rpi4.jpg",format:"jpg",fit:"stretch",width: 50%),caption:"实验中的 Raspberry Pi 4B 服务器") #pagebreak() === 配置 Web 服务器 #para[ 我的树莓派安装了EndeavourOS系统,使用Apache作为Web服务器。配置步骤如下: ] + 安装 Apache: ```bash sudo pacman -Syu apache ``` + 启动并设置 Apache 开机自启: ```bash sudo systemctl start httpd sudo systemctl enable httpd ``` + 配置防火墙允许 HTTP 流量: ```bash sudo ufw allow 80/tcp ``` + 测试 Web 服务器: 在浏览器中输入树莓派的 IP 地址 `http://192.168.20.50`,能看到 Apache 的默认页面,则表示 Web 服务启动成功。 + 设计网页: 使用 Httrack 将www.nudt.edu.cn网页镜像下载到`/var/www/html`目录下,替换默认的`index.html`文件。 #figure(image("web.jpg",format:"jpg",fit:"stretch",width: 100%),caption:"Web 服务器页面") === 配置 FTP 服务器 #para[ 在树莓派上安装并配置vsftpd作为FTP服务器,步骤如下: ] + 安装 vsftpd: ```bash sudo pacman -Syu vsftpd ``` + 启动并设置 vsftpd 开机自启: ```bash sudo systemctl start vsftpd sudo systemctl enable vsftpd ``` + 配置防火墙允许 FTP 流量: ```bash sudo ufw allow 21/tcp ``` + 配置 vsftpd: 编辑配置文件 `/etc/vsftpd.conf`,确保以下参数被正确设置: ``` anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES ``` + 重启 vsftpd 服务使配置生效: ```bash sudo systemctl restart vsftpd ``` #figure(image("vftpd.jpg",format:"jpg",fit:"stretch",width: 60%),caption:"FTP 服务工作状态") + 测试 FTP 服务器: 使用 FTP 客户端连接到树莓派的 IP 地址 `192.168.20.50`,并使用有效的用户名和密码进行登录。 #figure(image("ftp.jpg",format:"jpg",fit:"stretch",width: 60%),caption:"FTP 登录测试") #para[ 由于树莓派已经开启了SSH服务,所以可以使用SFTP协议进行文件传输更为方便。 ] #figure(image("sftp.jpg",format:"jpg",fit:"stretch",width: 60%),caption:"SFTP 传输测试") === 配置邮件服务器 #para[ 本人拥有在公网服务器部署个人专有邮箱经验(地址为`chengjingyu@hifuu.ink` 这里的`hifuu.ink`为我个人持有域名),也曾参与学校超算俱乐部邮件服务器建设(邮件地址为`scc@nudt.cc`,网站地址为`mail.nudt.cc`),这里选择在树莓派上拉取poste.io镜像进行快速部署。 ] + 安装 Docker: ```bash sudo pacman -Syu docker sudo systemctl start docker sudo systemctl enable docker ``` + 拉取 poste.io 镜像并运行容器: ```bash sudo docker run -d \ --name mailserver \ -p 25:25 -p 8080:80 -p 443:443 -p 587:587 -p 993:993 \ -v /path/to/data:/data \ analogic/poste.io ``` + 配置防火墙允许邮件相关端口流量: ```bash sudo ufw allow 25/tcp sudo ufw allow 587/tcp sudo ufw allow 993/tcp ``` + 访问 poste.io 的 Web 界面进行邮箱配置: 在浏览器中输入 `http://192.168.20.50`,按照提示完成域名绑定和邮箱账户创建。 + 测试邮件服务器: 在poste.io配置创建的邮箱账户,发送和接收测试邮件。 #figure(image("email.png",format:"png",fit:"stretch",width: 80%),caption:"邮件服务器登录界面") === 配置无线接入点 (AP) #para[ 在树莓派上配置无线接入点 (AP) 功能,使其能够为内网设备提供无线网络连接。步骤如下: ] + 安装 hostapd 和 dnsmasq: ```bash sudo pacman -Syu hostapd dnsmasq ``` + 配置 hostapd: 编辑 `/etc/hostapd/hostapd.conf` 文件,添加以下内容: ``` interface=wlan0 driver=nl80211 ssid=gh0s7-hotap hw_mode=g channel=6 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=******** wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP ``` + 配置 dnsmasq: 编辑 `/etc/dnsmasq.conf` 文件,添加以下内容: ``` interface=wlan0 dhcp-range=192.168.20.100,192.168.20.200,255.255.255.0,24h ``` + 启动并设置 hostapd 和 dnsmasq 开机自启: ```bash sudo systemctl start hostapd sudo systemctl enable hostapd sudo systemctl start dnsmasq sudo systemctl enable dnsmasq ``` + 使用手机连接无线网络: 在手机上搜索并连接到 SSID `gh0s7-hotap`,输入密码后即可连接成功,连接后即可访问 Web 服务器等资源。 #figure(image("wifi.png",format:"png",fit:"stretch",width: 40%),caption:"无线接入点连接成功") // == 实验测试 // === 测试方案 // #para[ // 检查以下项目来验证整个网络的功能: // ] // [应用-DHCP] 检查 PC1 和 PC3 是否成功获取到 192.168.10.x 和 192.168.30.x 网段的 IP 地址。 // [连通性] // PC1 ping 192.168.10.254 (通,测网关) // PC1 ping 192.168.20.50 (通,测内网服务器) // PC1 ping 192.168.30.x (通,测VLAN间路由) // PC1 ping 8.8.8.8 (通,测外网) // [应用-Web] // PC1 打开浏览器,访问 http://192.168.20.50 (应看到内网Pi的网页)。 // [应用 - FTP] // 在 PC1 上使用 FTP 客户端连接到 192.168.20.50,使用有效的用户名和密码进行登录。 // [应用 - 邮件] // 在 PC1 上使用邮件客户端(如 Outlook)配置一个邮箱账户,发送和接收测试邮件。 // [可靠性-多路径] // 在 PC1 上持续 ping 8.8.8.8 -t。 // 在 R1 (主路) 的 GigabitEthernet 0/0/1 (外网口) 上执行 shutdown。 // 观察 PC1 的 ping,应在短暂中断后(OSPF收敛)自动恢复。流量已切换到 R2。 // 在 R1 上 undo shutdown,观察流量是否切回 (取决于 OSPF 回切设置)。 // [可靠性-Eth-Trunk] // 在 PC1 上持续 ping 192.168.10.254 -t。 // shutdown S3 与 CORE 之间的 Eth-Trunk 1 的任意一条物理链路。 // Ping 不应中断。 // [安全-分时访问] // (在 FW1 上) 将 Work_Time 时间段改为你当前时间之外。 // 在 PC1 上尝试 ping 8.8.8.8 (应不通)。 // 在 PC3 或 Server 上 ping 8.8.8.8 (应仍可通)。 // 改回正确时间,PC1 恢复访问。 // [安全-端口安全/DHCP] // (高级测试) 在 S3 的 PC1 端口上拔下 PC1,接入另一台电脑,应无法通信。 // (高级测试) 在 S3 的空闲端口接入一台 PC 并尝试运行 DHCP 服务器软件,PC1 和 PC3 应不受影响。 // [安全-VLAN隔离] // 从 PC1 ping PC3,应不通。 // 从 PC3 ping Server,应通。 // === 测试结果 // #para[ // 经过全面测试,网络的各项功能均正常运行,具体测试结果如下: // ] // + DHCP 功能:PC1 和 PC3 成功获取到正确的 IP 地址,DHCP 功能正常。 // + 连通性测试:PC1 能够成功 ping 通网关、内网服务器、其他 VLAN 以及外网地址 // + Web 访问:PC1 能够成功访问树莓派上的 Web 服务器,显示正确的网页内容。 // + FTP 访问:PC1 能够成功通过 FTP 客户端连接到树莓派的 FTP 服务器,并进行文件传输。 // + 邮件服务:PC1 能够成功配置邮箱账户,发送和接收测试邮件均正常。 // + 多路径冗余:在 R1 的外网口关闭后,PC1 的 ping 在短暂中断后自动恢复,流量成功切换到 R2。 // + Eth-Trunk 冗余:关闭 S3 与 CORE 之间 Eth-Trunk 的一条物理链路后,PC1 的 ping 未中断,链路冗余功能正常。 // + 分时访问策略:在非工作时间内,PC1 无法访问外网,而 PC3 和 Server 仍然可以访问,分时访问策略生效。 // + 端口安全与 DHCP:在 S3 上更换 PC1 后,新的电脑无法通信,端口安全功能正常。运行 DHCP 服务器软件的测试也未影响 PC1 和 PC3 的网络连接。 // + VLAN 隔离:PC1 无法 ping 通 PC3,而 PC3 能够成功 ping 通 Server,VLAN 隔离功能正常。 // #para[ // 总体而言,网络设计和配置达到了预期目标,确保了网络的高效性、安全性和稳定性。所有测试均通过,网络系统运行良好。 // ] == 实验测试 === 测试方案 #para[ 检查以下项目来验证整个网络的功能: ] #align(center)[#table( columns: (auto, 1fr), inset: 10pt, table.header( [测试项目], [操作与期望] ), [应用-DHCP], [PC1 与 PC3 应分别自动获取 192.168.10.x 与 192.168.30.x 网段地址,验证 DHCP 地址池与绑定策略。], [连通性], [PC1 依次 ping 192.168.10.254、192.168.20.50、192.168.30.x 以及 8.8.8.8,确认网关、内网服务器、跨 VLAN 路由与外网连通均正常。], [应用-Web], [PC1 访问 http://192.168.20.50,页面需正确展示树莓派 Web 服务内容。], [应用-FTP], [PC1 使用 FTP 客户端连接 192.168.20.50,凭有效账号完成登录与文件传输。], [应用-邮件], [在 PC1 上配置邮件客户端,完成测试邮件的发送与接收,验证 SMTP/IMAP 正常。], [可靠性-多路径], [PC1 持续 ping 8.8.8.8,手动 shutdown R1 外网口后应仅短暂中断并自动切换至 R2,undo shutdown 后可按 OSPF 策略回切。], [可靠性-Eth-Trunk], [PC1 持续 ping 192.168.10.254,断开 S3 与 CORE 的 Eth-Trunk1 任意链路时业务不中断,证明链路聚合冗余有效。], [安全-分时访问], [在 FW1 修改 Work_Time 至当前时间之外后,PC1 ping 8.8.8.8 应被阻断,而 PC3 与 Server 仍可外联,恢复时间策略后 PC1 恢复访问。], [安全-端口安全/DHCP], [在 S3 上调换 PC1 端口或新增私设 DHCP 服务器,应无法接入网络且不会影响既有终端地址获取。], [安全-VLAN隔离], [PC1 ping PC3 应被隔离,而 PC3 ping Server 需可达,以验证 VLAN 与 ACL 策略。] )] === 测试结果 #para[ 经过全面测试,网络的各项功能均正常运行,具体测试结果如下: ] #align(center)[#table( columns: (auto, 1fr), inset: 10pt, table.header( [测试项目], [结果结论] ), [DHCP 功能], [PC1 与 PC3 均成功获取对应网段地址,地址池与绑定策略正常。], [连通性], [PC1 可稳定访问网关、内网服务器、跨 VLAN 终端及外网公共地址,整体连通性良好。], [Web 访问], [PC1 可正常打开树莓派 Web 服务并显示完整页面。], [FTP 访问], [PC1 成功建立 FTP 会话并完成文件传输,认证与数据通道均正常。], [邮件服务], [客户端成功配置并完成收发测试邮件,SMTP/IMAP 服务表现稳定。], [多路径冗余], [R1 外网口故障时仅出现瞬时抖动,随后自动切换至 R2,恢复后可根据 OSPF 策略回切。], [Eth-Trunk 冗余], [断开 Eth-Trunk1 单链路时 PC1 ping 无丢包,聚合链路保障生效。], [分时访问策略], [非工作时段阻断 PC1 的外网访问,PC3 与 Server 不受限,策略符合预期。], [端口安全与 DHCP], [冒用终端无法接入,私设 DHCP 也未造成地址冲突,安全策略有效。], [VLAN 隔离], [PC1 ping PC3 被隔离,PC3 可访问 Server,隔离策略与允许路径均正确。] )] #para[ 总体而言,网络设计和配置达到了预期目标,确保了网络的高效性、安全性和稳定性。所有测试均通过,网络系统运行良好。 ] = 实验总结 == 内容总结 #para[ 本次实验的主要目标是设计和实现一个综合性强的中小型网络,涵盖了从网络规划、方案设计、硬件安装与配置、软件安装与配置、系统测试与联调、工程验收等完整的组网工程流程。实验通过模拟某学校的校园网络建设需求,详细展示了如何通过多种先进技术(如链路聚合、堆叠技术、VLAN、OSPF等)来构建一个高效、安全、稳定的网络环境。实验首先进行了详细的需求分析,明确了网络覆盖、性能、安全、管理、扩展、服务器和存储、终端设备等方面的需求。随后,实验采用了多种网络技术来满足需求,包括BFD协议确保出口网关的健壮性,链路聚合技术(Eth-trunk)提升网络带宽和链路可靠性,堆叠技术用于核心交换机的冗余和扩展,VLAN技术用于划分不同部门的安全区域等等。 ] #para[ 实验通过多个阶段的验证,确保网络的各项功能正常运行。包括内网主机之间的通信、内网主机访问Web服务器、外网主机访问内网服务器、防火墙安全策略的验证、出口网关的双机热备验证等。 ] == 困难挑战 #para[ 首先是笔者由于是唯一一个单人实验小组,需要独自完成从需求分析到最终测试的所有环节,工作量较大且任务繁重。其次,在配置过程中遇到了多种技术挑战,例如核心交换机的堆叠配置、路由配置等,这些都需要深入理解设备的工作原理和配置命令。此外,实验中还需要处理各种突发问题,如设备间的兼容性问题、配置错误导致的网络故障等,这些都考验了笔者的问题解决能力和应变能力。 ] #para[ 在解决问题的过程中,我尤其要感谢教辅学长,张军老师与Deepseek的悉心指导与帮助。他们不仅在技术上给予了我宝贵的建议,还在思路上启发了我,让我能够更好地理解网络设计与配置的核心理念。通过这次实验,我不仅提升了自己的技术能力,也增强了独立解决问题的信心和能力。 ] == 心得感悟 #para[ 本次实验自由度较大,时间跨度长,我选择了比较有综合性的设计方案同时也需要个人独立完成,因此实现难度较大。在配置的过程中,遇到了很多困难,但也让我对网络设备的运行机制有了更深的理解。从需求分析到方案设计,再到设备配置和测试验收,每一个环节都需要严谨的态度和细致的操作。实验中的每一步配置都充满了挑战,尤其是在核心交换机的堆叠配置、各设备之间的OSPF配置,防火墙的NAT的配置等方面,我遇到了不少困难,但也因此积累了宝贵的实践经验。 ] #show heading: it => box(width: 100%)[ #v(0.50em) #set text(font: hei) // #counter(heading).display() // #h(0.5em) #it.body ] #pagebreak() #bibliography("ref.yml",full: true,title: "参考文献",style:"gb-7714-2015-numeric") /* 根据这个网站的格式示范https://github.com/typst/hayagriva/blob/main/docs/file-format.md 为这个网页生成.yml文件 https://blog.csdn.net/jxjdhdnd/article/details/138009187 */