中小型局域网服务器群架设实验学习文档
——按实验顺序整理的重点知识、操作细节与教师可能提问
第一部分 实验细节
一、实验总体理解
1. 实验目标
本实验是一个综合性 Linux 网络服务器群搭建项目,主要目标是在 VMware 虚拟化环境中,使用 Rocky Linux 8.10 搭建一个模拟校园网或中小型企业网的网络环境。
实验内容包括:
- 虚拟网络规划与配置;
- 多台 Rocky Linux 虚拟机克隆与主机名设置;
- 多网段 IP 地址规划;
- 静态 IP、动态 IP、默认路由、静态路由配置;
- 软路由器与出口网关配置;
- IP 转发配置;
- firewalld 防火墙区域与 SNAT 配置;
- DHCP 服务器搭建;
- DNS 服务器搭建;
- Apache Web 服务器搭建;
- FTP 服务器搭建;
- SELinux、NetworkManager、resolv.conf 等常见 Linux 网络服务细节配置;
- 网络连通性测试与故障排查。
二、实验拓扑与整体网络结构

1. 拓扑角色划分
实验拓扑中一共有多台虚拟机,主要包括:
| 虚拟机编号 | 角色 | 主要作用 |
|---|---|---|
| 1号机 | DHCP 服务器、软路由器 | 给子网2、3、4分配地址,同时负责多个内部子网之间转发 |
| 2号机 | DNS 服务器 | 提供内部域名解析和外部域名转发解析 |
| 3号机 | 防火墙、出口网关 | 负责内网访问互联网,配置 SNAT |
| 4号机 | Web、FTP、MySQL服务器 | 提供 Apache 网站服务和 FTP 服务 |
| 6号机 | NFS、Samba、邮件服务器 | 文件共享和邮件服务,部分内容可作为扩展 |
| 7号机 | 子网2客户端 | DHCP 获取地址,测试服务访问 |
| 8号机 | 子网3客户端 | DHCP 获取地址,测试服务访问 |
| 9号机 | 子网4客户端 | DHCP 获取地址,测试服务访问 |
2. 虚拟网络规划
实验中共涉及 6 块 VMware 虚拟网络:
| 虚拟网络 | 子网地址 | 作用 |
|---|---|---|
| vmnet1 | 192.168.1.0/24 | DMZ 区,服务器区,连接 1、2、3、4、6 号机 |
| vmnet2 | 192.168.2.0/24 | 子网1,客户端 7 号机所在网络 |
| vmnet3 | 192.168.3.0/24 | 子网2,客户端 8 号机所在网络 |
| vmnet4 | 192.168.4.0/24 | 子网3,客户端 9 号机所在网络 |
| vmnet5 | 192.168.182.0/24 或本机默认 | Host-only,用于 Xshell 远程连接 |
| vmnet8 | 192.168.181.0/24 或本机默认 | NAT,用于连接互联网、安装软件 |
注意:
- vmnet1 至 vmnet4 需要手动规划;
- vmnet1 至 vmnet4 的 VMware 自带 DHCP 应关闭,避免与 1 号机 DHCP 服务冲突;
- vmnet5 用于 Xshell 管理,一般所有虚拟机都保留;
- vmnet8 用于访问互联网,通常只有基础模板或 3 号机需要使用;
- 各人电脑上 vmnet5、vmnet8 的默认网段可能不同,实验中应以本机实际情况为准。
三、基础实验环境
1. 安装的软件
需要安装:
- VMware Workstation 16;
- Xshell 8;
- Rocky Linux 8.10。
Rocky Linux 安装时建议选择:
- “服务器”模式,而不是“带 GUI 的服务器”;
- 这样可以节省资源,因为实验需要多台虚拟机同时运行。
2. 为什么要克隆虚拟机?
先安装一台 Rocky Linux 8.10 基础虚拟机,然后克隆多台虚拟机,可以节省安装时间,并保证环境一致。
克隆后需要修改:
- 主机名;
- 网卡连接关系;
- IP 地址;
- 路由;
- 服务角色。
3. 主机名命名规则
示例:
hostnamectl set-hostname stu00a.nkt.com
hostnamectl set-hostname stu00b.nkt.com
hostnamectl set-hostname stu00c.nkt.com其中:
00代表自己学号后两位;a、b、c...代表不同虚拟机;nkt.com为实验域名后缀。
可能被问:
问题:为什么要修改主机名?
答:
为了区分不同服务器角色,便于远程管理、日志查看、DNS 解析、服务部署和故障排查。如果所有克隆机主机名相同,容易造成管理混乱。
四、网卡与 IP 地址规划
1. 各虚拟机保留的网卡
| 虚拟机 | 保留网卡 | 说明 |
|---|---|---|
| 1号机 | 全部保留 | 软路由器,需要连接 vmnet1、2、3、4,同时保留 Xshell |
| 2号机 | ens224、ens225 | ens224 连接服务器区,ens225 用于 Xshell |
| 3号机 | ens160、ens224、ens225 | ens160 连接互联网,ens224 连接内网,ens225 用于 Xshell |
| 4号机 | ens224、ens225 | Web/FTP 服务器 |
| 6号机 | ens224、ens225 | 文件/邮件服务器 |
| 7号机 | ens225、ens256 | 子网2客户端 |
| 8号机 | ens225、ens161 | 子网3客户端 |
| 9号机 | ens225、ens193 | 子网4客户端 |
关闭不需要的网络连接:
nmcli connection down ens161并在对应配置文件中设置:
ONBOOT=no2. 静态 IP 地址规划
| 机器 | 网卡 | IP 地址 | 子网 |
|---|---|---|---|
| 1号机 | ens224 | 192.168.1.1/24 | vmnet1 |
| 1号机 | ens256 | 192.168.2.1/24 | vmnet2 |
| 1号机 | ens161 | 192.168.3.1/24 | vmnet3 |
| 1号机 | ens193 | 192.168.4.1/24 | vmnet4 |
| 2号机 | ens224 | 192.168.1.2/24 | vmnet1 |
| 3号机 | ens224 | 192.168.1.3/24 | vmnet1 |
| 4号机 | ens224 | 192.168.1.4/24 | vmnet1 |
| 6号机 | ens224 | 192.168.1.6/24 | vmnet1 |
| 7号机 | ens256 | 192.168.2.7/24,后期 DHCP | vmnet2 |
| 8号机 | ens161 | 192.168.3.8/24,后期 DHCP | vmnet3 |
| 9号机 | ens193 | 192.168.4.9/24,后期 DHCP | vmnet4 |
配置示例:
nmcli connection modify ens224 ipv4.method manual ipv4.address "192.168.1.4/24"
nmcli connection reload
nmcli connection up ens224可能被问:
问题:为什么服务器使用静态 IP,而客户端后期使用 DHCP?
答:
服务器需要被其他主机稳定访问,例如 DNS 服务器必须固定为 192.168.1.2,Web 服务器必须固定为 192.168.1.4。如果服务器 IP 变化,会导致 DNS、路由、访问地址全部失效。客户端数量多、变动频繁,适合使用 DHCP 自动分配地址。
五、NetworkManager 与 nmcli
1. NetworkManager 的作用
NetworkManager 是 Rocky Linux 中负责网络连接管理的服务。
常用命令:
systemctl status NetworkManager.service
systemctl start NetworkManager.service
systemctl restart NetworkManager.service
systemctl enable NetworkManager.service查看是否由 NetworkManager 管理网络:
nmcli networking开启管理:
nmcli networking on关闭管理:
nmcli networking off2. 查看网络连接
nmcli connection show查看 IP:
ip addr3. 添加网络连接
如果系统中能看到网卡,但没有对应连接配置文件,可以手动添加:
nmcli connection add type ethernet con-name ens225 ifname ens225删除连接:
nmcli connection delete ens225可能被问:
问题:ip addr 能看到网卡,但 nmcli connection show 看不到连接,怎么办?
答:
说明系统识别到了物理网卡,但 NetworkManager 没有对应的连接配置。可以用:
nmcli connection add type ethernet con-name ens225 ifname ens225创建连接配置。
六、Xshell 远程连接
1. Xshell 使用的网络
所有虚拟机保留 vmnet5 对应网卡 ens225,用于 Xshell 远程连接。
vmnet5 是 Host-only 网络,主机和虚拟机之间可以通信,但不用于实验业务流量。
2. Xshell 连接不稳定的排查
如果 Xshell 有时能连上,有时连不上,可以尝试:
nmcli connection down ens225
nmcli connection up ens225也可以:
- 在 VMware 虚拟网络编辑器中断开 vmnet5 与主机连接后重新连接;
- 在 Windows 控制面板中禁用再启用 VMware vmnet5 虚拟网卡。
可能被问:
问题:为什么要单独保留 vmnet5 用于 Xshell?
答:
因为实验中的 vmnet1 至 vmnet4 会频繁修改路由、防火墙、DHCP 和 DNS,如果远程连接也依赖这些业务网络,一旦配置错误就会失去管理入口。vmnet5 作为独立管理网络,可以保证始终能远程维护虚拟机。
七、IP 转发配置
1. 哪些机器需要开启 IP 转发?
需要开启 IP 转发的机器:
- 1号机:软路由器,连接 vmnet1、vmnet2、vmnet3、vmnet4;
- 3号机:出口网关,连接内网和外网。
2. 配置方法
编辑:
vim /etc/sysctl.d/99-sysctl.conf添加:
net.ipv4.ip_forward = 1使配置生效:
sysctl -p查看是否生效:
cat /proc/sys/net/ipv4/ip_forward如果显示:
1说明 IP 转发已开启。
3. 可能被问
问题:什么是 IP 转发?为什么 1 号机和 3 号机必须开启?
答:
IP 转发是指 Linux 主机可以像路由器一样,把从一个网卡收到的数据包转发到另一个网卡。1号机连接多个内部子网,需要在不同子网之间转发数据;3号机连接内网和外网,需要把内网访问互联网的数据转发出去,所以两台机器都必须开启 IP 转发。
八、静态路由与默认路由
1. 路由规划思想
实验中路由分为:
- 直连路由;
- 静态路由;
- 默认路由。
不同机器的路由逻辑如下:
- 1号机知道内部四个子网,并把访问外网的流量交给 3号机;
- 3号机访问内部子网时交给 1号机,访问互联网时走外网网卡;
- 2、4、6号机访问其他内部子网走 1号机,访问外网走 3号机;
- 7、8、9号机默认网关分别是各自子网中的 1号机接口地址。
2. 2、4、6号机路由配置
nmcli connection modify ens224 +ipv4.routes "192.168.2.0/24 192.168.1.1"
nmcli connection modify ens224 +ipv4.routes "192.168.3.0/24 192.168.1.1"
nmcli connection modify ens224 +ipv4.routes "192.168.4.0/24 192.168.1.1"
nmcli connection modify ens224 +ipv4.routes "0.0.0.0/0 192.168.1.3"
nmcli connection reload
nmcli connection up ens224解释:
- 去 192.168.2.0/24、192.168.3.0/24、192.168.4.0/24 的流量交给 1号机;
- 去未知网络或互联网的流量交给 3号机。
3. 3号机路由配置
nmcli connection modify ens224 +ipv4.routes "192.168.2.0/24 192.168.1.1"
nmcli connection modify ens224 +ipv4.routes "192.168.3.0/24 192.168.1.1"
nmcli connection modify ens224 +ipv4.routes "192.168.4.0/24 192.168.1.1"
nmcli connection reload
nmcli connection up ens224解释:
3号机连接的是服务器区 192.168.1.0/24 和外网,如果要访问内部客户端子网,就需要通过 1号机转发。
4. 1号机默认路由
nmcli connection modify ens224 +ipv4.routes "0.0.0.0/0 192.168.1.3"
nmcli connection reload
nmcli connection up ens224解释:
1号机访问互联网时,把流量交给 3号机。
5. 客户端默认路由
7号机:
nmcli connection modify ens256 +ipv4.routes "0.0.0.0/0 192.168.2.1"8号机:
nmcli connection modify ens161 +ipv4.routes "0.0.0.0/0 192.168.3.1"9号机:
nmcli connection modify ens193 +ipv4.routes "0.0.0.0/0 192.168.4.1"6. 查看路由表
route -n需要重点看:
| 字段 | 含义 |
|---|---|
| Destination | 目标网络 |
| Gateway | 下一跳网关 |
| Genmask | 子网掩码 |
| Iface | 出接口 |
可能被问:
问题:默认路由 0.0.0.0/0 的作用是什么?
答:
默认路由用于匹配所有路由表中没有明确记录的目标地址。也就是说,当主机不知道某个目标网络该怎么走时,就把数据包交给默认网关。
九、网络连通性测试
1. 以 7号机为例
ping -c 4 192.168.2.1
ping -c 4 192.168.1.2
ping -c 4 192.168.1.3
ping -c 4 192.168.1.6测试含义:
| 测试对象 | 意义 |
|---|---|
| ping 192.168.2.1 | 测试与本子网网关连通 |
| ping 192.168.1.2 | 测试跨子网访问 DNS 服务器 |
| ping 192.168.1.3 | 测试跨子网访问出口网关 |
| ping 192.168.1.6 | 测试跨子网访问其他服务器 |
2. 测试互联网 IP
ping -c 4 153.3.238.127如果能 ping 通 IP,但不能 ping 通域名,说明:
- IP 路由和 NAT 大概率正常;
- DNS 解析可能有问题。
可能被问:
问题:为什么先 ping IP,再 ping 域名?
答:
因为 ping IP 可以测试网络层连通性和路由/NAT 是否正常;ping 域名还涉及 DNS 解析。先 ping IP 可以把问题范围缩小,如果 IP 通但域名不通,就说明重点检查 DNS。
十、firewalld 与 SNAT 配置
1. 3号机作为出口网关
3号机有两个关键接口:
| 接口 | 作用 | 防火墙区域 |
|---|---|---|
| ens160 | 外网接口 | external |
| ens224 | 内网接口 | internal |
配置:
firewall-cmd --permanent --change-interface=ens160 --zone=external
firewall-cmd --permanent --change-interface=ens224 --zone=internal
firewall-cmd --reload查看:
firewall-cmd --list-all
firewall-cmd --list-all --zone=external
firewall-cmd --list-all --zone=internal2. SNAT 的作用
SNAT,即源地址转换。
内网地址如:
192.168.2.101
192.168.3.101
192.168.4.101属于私有地址,不能直接在互联网中路由。通过 3号机 SNAT,可以把内网主机访问互联网的数据包源地址转换成 3号机外网地址,从而实现共享上网。
3. 1号机防火墙配置
1号机作为内部软路由器,需要允许内部接口之间转发:
firewall-cmd --permanent --set-default-zone=internal
firewall-cmd --permanent --zone=internal --add-forward
firewall-cmd --reload
firewall-cmd --list-all注意:
指导书中有时写成:
firewall-cmd --set-default-zone=internal为了永久生效,应使用:
firewall-cmd --permanent --set-default-zone=internal4. 可能被问
问题:SNAT 和 DNAT 有什么区别?
答:
| 类型 | 修改内容 | 典型用途 |
|---|---|---|
| SNAT | 修改源 IP 地址 | 内网用户共享公网出口访问互联网 |
| DNAT | 修改目标 IP 地址 | 外网用户访问内网服务器,例如发布 Web 服务 |
本实验基础阶段主要配置 SNAT,让内网访问互联网。拓扑图中也提到防火墙支持 DNAT,用于后续发布内网 Web、FTP、DNS 等服务。
十一、DNS 临时解析配置
1. 基础阶段使用阿里 DNS
在 1、2、4、6、7、8、9 号机上编辑:
vim /etc/resolv.conf删除原内容,添加:
nameserver 223.5.5.52. 防止 NetworkManager 覆盖 resolv.conf
编辑:
vim /etc/NetworkManager/NetworkManager.conf在 [main] 中添加:
dns=none然后重启:
systemctl restart NetworkManager.service3. 可能被问
问题:为什么手动改了 /etc/resolv.conf,重启后又被改回去了?
答:
因为 NetworkManager 默认会管理 DNS 配置,并可能根据 DHCP 获取到的 DNS 信息重写 /etc/resolv.conf。解决方法是在 /etc/NetworkManager/NetworkManager.conf 的 [main] 中添加:
dns=none让 NetworkManager 不再管理 DNS。
十二、DHCP 服务器
1. DHCP 服务器安装位置
DHCP 服务器安装在 1号机。
安装命令:
yum install dhcp-server2. DHCP 配置文件
配置文件:
/etc/dhcp/dhcpd.conf配置内容示例:
default-lease-time 1800;
max-lease-time 10800;
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.101 192.168.2.254;
option routers 192.168.2.1;
}
subnet 192.168.3.0 netmask 255.255.255.0 {
range 192.168.3.101 192.168.3.254;
option routers 192.168.3.1;
}
host headmaster {
hardware ethernet 00:50:56:3a:e1:76;
fixed-address 192.168.3.58;
}
subnet 192.168.4.0 netmask 255.255.255.0 {
range 192.168.4.101 192.168.4.254;
option routers 192.168.4.1;
}3. DHCP 关键参数解释
| 参数 | 作用 |
|---|---|
default-lease-time | 默认租约时间 |
max-lease-time | 最大租约时间 |
subnet | 定义服务的子网 |
range | 可分配的 IP 地址范围 |
option routers | 给客户端下发默认网关 |
host | 为指定 MAC 地址绑定固定 IP |
hardware ethernet | 客户端网卡 MAC 地址 |
fixed-address | 分配给指定主机的固定 IP |
4. 检查 DHCP 配置语法
dhcpd -t如果没有错误输出,说明语法基本正确。
5. 启动 DHCP 服务
systemctl start dhcpd.service
systemctl enable dhcpd.service
systemctl status dhcpd.service6. 客户端改为自动获取 IP
7号机:
nmcli connection modify ens256 ipv4.method auto
nmcli connection reload
nmcli connection up ens2568号机:
nmcli connection modify ens161 ipv4.method auto
nmcli connection reload
nmcli connection up ens1619号机:
nmcli connection modify ens193 ipv4.method auto
nmcli connection reload
nmcli connection up ens193查看地址:
ip address show7. DHCP 客户端工具 dhclient
安装:
yum install dhclient释放租约:
dhclient -r ens256重新获取:
dhclient ens2568号机使用 ens161,9号机使用 ens193。
8. 查看租约记录
在 1号机上:
cat /var/lib/dhcpd/dhcpd.leases可以看到客户端获取 IP 的租约记录。
9. DHCP 排错重点
可能原因包括:
- 基础网络不通;
- 1号机 DHCP 服务未启动;
/etc/dhcp/dhcpd.conf语法错误;- VMware 的 vmnet1 至 vmnet4 自带 DHCP 没有关闭;
- 客户端网卡没有设置为 DHCP;
- 客户端配置文件中
BOOTPROTO不是dhcp; - 客户端没有重载网络连接;
/etc/hosts中写了旧的静态 IP,导致解析混乱。
10. DHCP 可能被问的问题
问题1:为什么 vmnet1 至 vmnet4 的 VMware DHCP 要关闭?
答:
因为实验要求使用 1号机作为 DHCP 服务器。如果 VMware 自带 DHCP 也开启,同一网段会有两个 DHCP 服务器,客户端可能随机从不同服务器获取地址,造成地址、网关、DNS 错乱。
问题2:DHCP 四个基本过程是什么?
答:
- Discover:客户端广播寻找 DHCP 服务器;
- Offer:服务器提供可用 IP;
- Request:客户端请求使用该 IP;
- ACK:服务器确认租约。
问题3:为什么 DHCP 配置中没有给 192.168.1.0/24 分配地址?
答:
因为 192.168.1.0/24 是服务器区,服务器通常使用静态 IP,不能频繁变化。DHCP 主要服务客户端子网 192.168.2.0/24、192.168.3.0/24、192.168.4.0/24。
问题4:option routers 的作用是什么?
答:
它用于告诉 DHCP 客户端默认网关地址。例如 7号机在 192.168.2.0/24,它的默认网关应是 192.168.2.1,也就是 1号机连接 vmnet2 的接口地址。
问题5:固定分配 IP 的依据是什么?
答:
依据客户端网卡的 MAC 地址。DHCP 服务器通过 hardware ethernet 匹配客户端 MAC,然后分配 fixed-address 中指定的固定 IP。
十三、DNS 服务器
1. DNS 服务器安装位置
DNS 服务器安装在 2号机。
安装:
yum install unbound启动:
systemctl start unbound.service
systemctl enable unbound.service
systemctl status unbound.service2. unbound 配置文件
主配置文件:
/etc/unbound/unbound.conf需要修改的关键参数:
interface: 0.0.0.0
access-control: 192.168.1.0/24 allow
access-control: 192.168.2.0/24 allow
access-control: 192.168.3.0/24 allow
access-control: 192.168.4.0/24 allow
username: ""
module-config: "iterator"
domain-insecure: "dyzx.edu"
forward-zone:
name: "."
forward-addr: 223.5.5.53. 参数解释
| 参数 | 含义 |
|---|---|
interface: 0.0.0.0 | 监听所有 IPv4 地址,允许其他主机访问 DNS 服务 |
access-control | 指定允许哪些网段使用 DNS 服务 |
username: "" | 设置为空字符串,表示不切换到指定用户 |
module-config: "iterator" | 禁用 DNSSEC 验证相关模块,便于转发解析 |
domain-insecure: "dyzx.edu" | 对内部域名跳过 DNSSEC 验证 |
forward-zone | 定义转发区域 |
name: "." | 表示转发所有域名查询 |
forward-addr: 223.5.5.5 | 将外部域名查询转发到阿里 DNS |
4. 检查配置
unbound-checkconf重启服务:
systemctl restart unbound.service5. 防火墙开放 DNS 服务
firewall-cmd --permanent --add-service=dns
firewall-cmd --reloadDNS 使用:
- UDP 53:主要用于普通查询;
- TCP 53:用于大响应、区域传送等场景。
6. 服务器端 PEERDNS 配置
编辑 2号机的网卡配置,例如:
vim /etc/sysconfig/network-scripts/ifcfg-ens225添加:
PEERDNS=no作用:
不接受 DHCP 服务器下发的 DNS 配置,避免 /etc/resolv.conf 被自动修改。
7. NetworkManager 配置
DNS 服务器端:
vim /etc/NetworkManager/NetworkManager.conf在 [main] 添加:
dns=unbound重启:
systemctl restart NetworkManager.service此时服务器端 /etc/resolv.conf 中理论上不应再有普通 nameserver 条目。
8. 客户端 DNS 配置
客户端包括:
- 1号机;
- 3号机;
- 4号机;
- 6号机;
- 7号机;
- 8号机;
- 9号机。
如果某网卡通过 DHCP 获取地址,需要在网卡配置文件中加入:
PEERDNS=noNetworkManager 配置:
dns=none客户端 /etc/resolv.conf 中写入:
nameserver 192.168.1.2表示使用 2号机作为 DNS 服务器。
9. DNS 测试命令
服务器端测试:
dig dns1.dyzx.edu
dig www.dyzx.edu
dig mail.dyzx.edu
dig www.baidu.com
dig www.google.com
dig www.jit.edu.cn指定 DNS 服务器测试:
dig www.dyzx.edu @192.168.1.2
dig www.baidu.com @192.168.1.2客户端测试同样使用:
dig www.dyzx.edu
dig www.baidu.com10. DNS 排错重点
- 基础网络是否互通;
- 2号机
unbound.service是否 active; unbound-checkconf是否报错;- 防火墙是否开放 DNS;
interface: 0.0.0.0是否配置;access-control是否允许对应子网;- 客户端
/etc/resolv.conf是否只有nameserver 192.168.1.2; - 客户端
NetworkManager.conf是否设置dns=none; - DHCP 网卡是否设置
PEERDNS=no; - 指定服务器解析是否成功。
11. DNS 可能被问的问题
问题1:为什么 interface 要设置成 0.0.0.0?
答:
表示 DNS 服务监听所有 IPv4 接口。如果只监听 127.0.0.1,则只能本机解析,其他客户端无法访问该 DNS 服务。
问题2:access-control 的作用是什么?
答:
用于控制哪些网段可以使用该 DNS 服务器。本实验允许 192.168.1.0/24 至 192.168.4.0/24 四个内部网段访问。
问题3:为什么客户端要写 nameserver 192.168.1.2?
答:
因为 2号机是实验中的 DNS 服务器,IP 为 192.168.1.2。客户端需要把域名解析请求发送给它。
问题4:如果 dig www.baidu.com @192.168.1.2 成功,但 dig www.baidu.com 失败,说明什么?
答:
说明 DNS 服务器本身可以正常解析,但客户端默认 DNS 配置有问题,应检查 /etc/resolv.conf、NetworkManager.conf 和 PEERDNS=no。
问题5:为什么要设置 forward-addr: 223.5.5.5?
答:
内部 DNS 服务器不知道所有互联网域名,因此需要把外部域名查询转发给公网 DNS。223.5.5.5 是阿里公共 DNS。
问题6:domain-insecure: "dyzx.edu" 的作用是什么?
答:
内部实验域名没有完整的 DNSSEC 信任链,如果进行 DNSSEC 验证可能失败。该参数表示对 dyzx.edu 跳过 DNSSEC 验证。
十四、Apache Web 服务器
1. Web 服务器安装位置
Apache 安装在 4号机。
安装:
yum install httpd启动:
systemctl start httpd.service
systemctl enable httpd.service
systemctl status httpd.service2. 检查 httpd 进程和端口
检查进程:
ps -ef | grep httpd检查端口:
netstat -tunlp | grep httpd默认监听端口是:
803. 简单测试
访问默认首页:
curl http://127.0.0.1创建测试首页:
echo "Welcome to www.dyzx.com!" >> /var/www/html/index.html本机测试:
curl http://127.0.0.1IP 测试:
curl http://192.168.1.4域名测试:
curl http://www.dyzx.edu4. 防火墙开放 HTTP
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload如果 4号机接口属于 internal 区域,则也可根据实际区域开放:
firewall-cmd --permanent --zone=internal --add-service=http
firewall-cmd --reload5. httpd 配置文件
主配置文件:
/etc/httpd/conf/httpd.conf关键参数:
ServerRoot "/etc/httpd"
Listen 80
ServerAdmin root@dyzx.edu
ServerName 192.168.1.4:80
DocumentRoot "/var/www/html"
DirectoryIndex index.html参数解释:
| 参数 | 作用 |
|---|---|
ServerRoot | Apache 配置和运行文件根目录 |
Listen | 监听端口 |
ServerAdmin | 管理员邮箱 |
ServerName | Web 服务器名称或 IP |
DocumentRoot | 网站根目录 |
DirectoryIndex | 默认首页文件 |
6. 检查配置语法
apachectl configtest如果显示:
Syntax OK说明语法正确。
重启:
systemctl restart httpd.service7. 修改网站根目录 DocumentRoot
创建新目录:
cd /var/www
mkdir myweb
chown -R apache:apache myweb查看 SELinux 上下文:
ls -dZ /var/www/html /var/www/myweb如果 /var/www/myweb 和 /var/www/html 类型上下文不同,需要修改:
semanage fcontext -a -t httpd_sys_content_t "/var/www/myweb(/.*)?"
restorecon -Rv /var/www/myweb允许 httpd 网络连接:
setsebool -P httpd_can_network_connect on修改配置文件:
DocumentRoot "/var/www/myweb"
<Directory "/var/www/myweb">创建测试页面:
echo "Welcome to德雅职业学校网站2" > /var/www/myweb/index.html检查并重启:
apachectl configtest
systemctl restart httpd.service客户端测试:
curl http://www.dyzx.edu8. Web 可能被问的问题
问题1:Apache 默认网站目录是什么?
答:
默认是:
/var/www/html由配置文件中的 DocumentRoot 指定。
问题2:为什么修改 DocumentRoot 后还要改 <Directory>?
答:DocumentRoot 只指定网页文件存放位置,而 <Directory> 指定该目录的访问权限。如果只改 DocumentRoot 不改 <Directory>,Apache 可能没有正确权限访问新目录。
问题3:为什么要修改 SELinux 上下文?
答:
在 SELinux Enforcing 模式下,Linux 不仅检查传统文件权限,还检查 SELinux 安全上下文。即使目录权限正确,如果类型上下文不符合 httpd 访问要求,Apache 也可能无法读取网页文件。
问题4:apachectl configtest 有什么作用?
答:
用于检查 Apache 配置文件语法是否正确,避免配置错误导致服务重启失败。
问题5:为什么本机 curl 127.0.0.1 成功,但客户端访问失败?
答:
可能原因包括:
- 防火墙未开放 http;
- DNS 解析错误;
- 客户端路由不通;
- Apache 只监听本地地址;
- SELinux 或目录权限问题。
十五、FTP 服务器
1. FTP 服务器安装位置
FTP 安装在 4号机。
安装:
dnf install vsftpd -y2. 匿名 FTP 下载目录
编辑:
vim /etc/vsftpd/vsftpd.conf配置:
anonymous_enable=YES
anon_root=/var/ftp/dyzx_data
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO创建目录:
mkdir -p /var/ftp/dyzx_data
chown ftp:ftp /var/ftp/dyzx_data
chmod 755 /var/ftp/dyzx_data解释:
- 允许匿名用户登录;
- 匿名用户只能下载;
- 不允许匿名上传、创建目录或修改文件。
3. 本地用户 FTP 维护 Web 站点
创建用户:
useradd stu11
passwd stu11配置:
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
user_sub_token=$USER
local_root=/var/www/myweb含义:
| 参数 | 作用 |
|---|---|
local_enable=YES | 允许本地系统用户登录 |
write_enable=YES | 允许写操作 |
chroot_local_user=YES | 将本地用户限制在指定目录 |
allow_writeable_chroot=YES | 允许 chroot 目录可写 |
local_root=/var/www/myweb | 本地用户登录后的根目录 |
4. chroot_list 配置
编辑:
vi /etc/vsftpd/chroot_list添加:
stu11在配置文件中指定:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list注意:
不同 vsftpd 配置下,chroot_list 的含义可能会因 chroot_local_user 设置不同而不同。实验中重点是实现 stu11 被限制在 /var/www/myweb 中,不能访问其他目录。
5. SELinux 配置
允许 FTP 完全访问:
setsebool -P ftpd_full_access on允许被动模式:
setsebool -P ftpd_use_passive_mode on允许连接非保留端口:
setsebool -P ftpd_connect_all_unreserved on6. 修改 Web 目录权限
chown -R stu11:stu11 /var/www/myweb
chmod -R 775 /var/www/myweb7. 启动 FTP 服务并开放防火墙
systemctl start vsftpd
systemctl enable vsftpd
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload8. 客户端测试 FTP
安装客户端:
dnf install ftp -y登录:
ftp 192.168.1.4创建测试文件:
echo "This is a test file" > test.txt上传:
put test.txt9. FTP 可能被问的问题
问题1:匿名用户和本地用户 FTP 有什么区别?
答:
| 类型 | 登录方式 | 权限 |
|---|---|---|
| 匿名用户 | anonymous 或 ftp | 通常只允许下载 |
| 本地用户 | Linux 系统用户,如 stu11 | 可根据配置上传、修改文件 |
问题2:为什么匿名用户不允许上传?
答:
出于安全考虑。如果匿名用户可以上传,可能导致恶意文件上传、磁盘被占满或服务器被利用。
问题3:chroot_local_user=YES 的作用是什么?
答:
把本地用户限制在指定目录中,防止用户登录 FTP 后浏览系统其他目录,提高安全性。
问题4:为什么需要 allow_writeable_chroot=YES?
答:
较新版本 vsftpd 默认不允许 chroot 根目录可写,否则可能拒绝登录。该参数允许被限制目录可写,适合实验中让 stu11 维护 Web 目录。
问题5:FTP 服务为什么还要配置 SELinux?
答:
即使 Linux 普通权限允许写入,SELinux 也可能阻止 FTP 写文件。需要设置相应布尔值,如 ftpd_full_access,才能让 FTP 正常读写指定目录。
十六、SELinux 重点总结
1. 查看 SELinux 模式
getenforce常见结果:
| 状态 | 含义 |
|---|---|
| Enforcing | 强制执行策略 |
| Permissive | 只记录不拦截 |
| Disabled | 关闭 |
2. 查看文件上下文
ls -Z
ls -dZ /var/www/html /var/www/myweb3. 修改上下文规则
semanage fcontext -a -t httpd_sys_content_t "/var/www/myweb(/.*)?"
restorecon -Rv /var/www/myweb解释:
semanage fcontext:添加 SELinux 文件上下文规则;restorecon:根据规则恢复文件上下文;httpd_sys_content_t:允许 Apache 读取的内容类型。
4. 可能被问
问题:普通权限和 SELinux 权限有什么区别?
答:
普通权限基于用户、组、其他人的读写执行权限;SELinux 是额外的强制访问控制机制,基于安全上下文和策略判断进程是否能访问文件。即使普通权限允许,SELinux 也可能阻止访问。
十七、实验常用命令汇总
1. 网络相关
ip addr
nmcli connection show
nmcli connection reload
nmcli connection up ens224
nmcli connection down ens224
route -n
ping -c 4 目标地址2. 服务管理
systemctl start 服务名
systemctl stop 服务名
systemctl restart 服务名
systemctl enable 服务名
systemctl status 服务名3. 防火墙
firewall-cmd --list-all
firewall-cmd --list-all --zone=external
firewall-cmd --list-all --zone=internal
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=dns
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload4. DNS 测试
dig www.dyzx.edu
dig www.baidu.com
dig www.baidu.com @192.168.1.25. Web 测试
curl http://127.0.0.1
curl http://192.168.1.4
curl http://www.dyzx.edu6. DHCP 测试
dhcpd -t
ip address show
dhclient -r ens256
dhclient ens256
cat /var/lib/dhcpd/dhcpd.leases十八、按实验顺序整理的高价值教师提问清单
1. 基础环境阶段
- 为什么 Rocky Linux 安装时选择“服务器”而不是“带 GUI 的服务器”?
- VMware 中 vmnet1、vmnet2、vmnet3、vmnet4、vmnet5、vmnet8 分别有什么作用?
- 为什么 vmnet5 用于 Xshell,而不是用于业务通信?
- 为什么 vmnet8 用于访问互联网?
- 为什么 vmnet1 至 vmnet4 要关闭 VMware 自带 DHCP?
- 克隆虚拟机后为什么要修改主机名?
hostnamectl set-hostname的作用是什么?ip addr和nmcli connection show有什么区别?- 网卡存在但没有连接配置时怎么办?
- 为什么不需要的网卡要关闭并设置
ONBOOT=no?
2. IP 地址与路由阶段
- 为什么服务器区使用
192.168.1.0/24? - 为什么 1号机需要连接多个子网?
- 为什么 2、4、6号机要设置静态 IP?
- 为什么 7、8、9号机后期改为 DHCP?
- 什么是默认路由?
- 什么是静态路由?
0.0.0.0/0表示什么?- 1号机为什么默认路由指向 3号机?
- 3号机为什么访问子网2、3、4要经过 1号机?
- 7号机为什么默认网关是
192.168.2.1? - 如何查看路由表?
route -n中 Destination、Gateway、Genmask、Iface 分别表示什么?- 如果跨网段 ping 不通,应如何排查?
3. IP 转发与防火墙阶段
- 什么是 IP 转发?
- 为什么 1号机和 3号机必须开启 IP 转发?
- 如何永久开启 IP 转发?
sysctl -p的作用是什么?/proc/sys/net/ipv4/ip_forward显示 1 表示什么?- firewalld 中 zone 的作用是什么?
- external 区域和 internal 区域有什么区别?
- 为什么 3号机外网接口放入 external,内网接口放入 internal?
- 什么是 SNAT?
- SNAT 解决了什么问题?
- SNAT 和 DNAT 有什么区别?
- 为什么内网私有地址不能直接访问互联网?
- 为什么 1号机要启用 internal 区域的 forward?
firewall-cmd --reload的作用是什么?--permanent的作用是什么?
4. DNS 临时解析与互联网测试阶段
- 为什么先测试 ping 公网 IP,再测试 ping 域名?
- IP 能 ping 通但域名 ping 不通说明什么?
/etc/resolv.conf的作用是什么?nameserver 223.5.5.5表示什么?- 为什么 NetworkManager 会覆盖
/etc/resolv.conf? dns=none的作用是什么?- 为什么 7、8、9 号机开始时不能 ping 通百度域名?
- 修改 1号机 firewalld 转发后为什么客户端可以解析外网域名?
5. DHCP 阶段
- DHCP 服务器安装在哪台机器?
- 为什么 DHCP 服务器放在 1号机?
- DHCP 的四个交互过程是什么?
dhcpd.conf文件在哪里?default-lease-time和max-lease-time有什么区别?range的作用是什么?option routers的作用是什么?- 为什么不给服务器区
192.168.1.0/24配 DHCP? - 如何给指定 MAC 地址绑定固定 IP?
- DHCP 固定分配和静态 IP 有什么区别?
- 如何检查 DHCP 配置文件语法?
- 如何查看 DHCP 服务状态?
- 如何查看 DHCP 租约记录?
- 客户端如何释放和重新获取 IP?
- 客户端获取不到地址时如何排查?
- 为什么 VMware 自带 DHCP 会影响实验?
- 为什么客户端配置文件中要检查
BOOTPROTO=dhcp?
6. DNS 阶段
- DNS 服务器安装在哪台机器?
- 本实验使用什么 DNS 软件?
unbound是什么类型的 DNS 服务?/etc/unbound/unbound.conf是什么文件?interface: 0.0.0.0的作用是什么?- 如果只监听
127.0.0.1会发生什么? access-control的作用是什么?- 为什么要允许四个内部网段?
forward-zone的作用是什么?name: "."表示什么?forward-addr: 223.5.5.5的作用是什么?- 为什么要配置
domain-insecure: "dyzx.edu"? - 为什么服务器端
NetworkManager.conf使用dns=unbound? - 为什么客户端使用
dns=none? PEERDNS=no的作用是什么?- 客户端
/etc/resolv.conf中应该写什么? - 如何测试 DNS 解析?
dig www.baidu.com @192.168.1.2的意义是什么?- 指定 DNS 能解析,不指定不能解析,问题在哪里?
- 防火墙为什么要开放 DNS 服务?
7. Apache Web 阶段
- Web 服务器安装在哪台机器?
- Apache 软件包名称是什么?
- httpd 服务如何启动和设置开机自启?
- Apache 默认监听哪个端口?
- 如何查看 httpd 是否运行?
- 如何查看 httpd 监听端口?
- Apache 默认网站根目录是什么?
DocumentRoot的作用是什么?DirectoryIndex的作用是什么?ServerName的作用是什么?- 为什么要执行
apachectl configtest? - 防火墙为什么要开放 http 服务?
- 本机访问成功,客户端访问失败可能是什么原因?
- 为什么修改 DocumentRoot 后还要修改
<Directory>? - 为什么修改网站目录后要考虑 SELinux?
httpd_sys_content_t是什么?restorecon的作用是什么?setsebool -P httpd_can_network_connect on的作用是什么?- 域名访问 Web 依赖哪些条件?
curl http://www.dyzx.edu成功说明哪些服务正常?
8. FTP 阶段
- FTP 服务器安装在哪台机器?
- vsftpd 是什么?
- FTP 默认使用哪些端口?
- 匿名用户和本地用户有什么区别?
- 如何允许匿名用户下载?
- 为什么不允许匿名用户上传?
anon_root的作用是什么?- 本地用户
stu11的作用是什么? - 为什么要把
stu11限制在/var/www/myweb? chroot_local_user=YES的作用是什么?allow_writeable_chroot=YES的作用是什么?local_root=/var/www/myweb的作用是什么?- 为什么要修改
/var/www/myweb的属主? - FTP 写入失败可能与哪些因素有关?
- 为什么 FTP 还要设置 SELinux 布尔值?
- 为什么防火墙要开放 ftp 服务?
- 如何测试 FTP 上传和下载?
- 匿名用户和 stu11 用户测试时应该分别验证什么?
十九、综合故障排查思路
1. 网络不通
按顺序检查:
- 网卡是否连接正确 vmnet;
- IP 是否配置正确;
- 网卡是否启用;
- 路由表是否正确;
- IP 转发是否开启;
- 防火墙是否阻止;
- NAT 是否配置;
- 目标服务是否启动。
2. 能 ping IP,不能 ping 域名
重点检查:
/etc/resolv.conf;- NetworkManager 是否覆盖 DNS;
- DNS 服务器是否正常;
- 防火墙是否开放 DNS;
- 客户端是否能访问
192.168.1.2; dig 域名 @192.168.1.2是否成功。
3. DHCP 获取不到地址
重点检查:
- 1号机 DHCP 服务是否 active;
dhcpd -t是否通过;- VMware 自带 DHCP 是否关闭;
- 客户端是否设置
ipv4.method auto; - 网卡配置文件是否
BOOTPROTO=dhcp; - 客户端是否在正确 vmnet;
- 防火墙是否影响 DHCP 广播;
- 租约文件是否有记录。
4. Web 无法访问
重点检查:
- httpd 是否 active;
- 80 端口是否监听;
- 防火墙是否开放 http;
- DNS 是否解析到
192.168.1.4; - DocumentRoot 是否正确;
<Directory>是否同步修改;- 首页文件是否存在;
- 文件权限和 SELinux 上下文是否正确。
5. FTP 无法上传
重点检查:
- vsftpd 是否 active;
- 是否允许本地用户;
write_enable=YES是否配置;- 用户是否被锁定到正确目录;
- 目录属主和权限是否允许写入;
- SELinux 布尔值是否开启;
- 防火墙是否开放 ftp;
- FTP 客户端是否使用正确用户登录。
二十、实验最终应达到的效果
实验完成后,应实现:
- 所有虚拟机可以通过 Xshell 管理;
- 1号机作为软路由器,实现内部多个子网互通;
- 3号机作为出口网关,实现内网共享上网;
- 7、8、9号机可以通过 DHCP 自动获取 IP;
- 2号机 DNS 可以解析内部域名和外部域名;
- 客户端可以通过
www.dyzx.edu访问 4号机 Web 服务; - 4号机 Apache 可以使用自定义网站目录
/var/www/myweb; - FTP 匿名用户可以下载资源;
- FTP 本地用户
stu11可以维护 Web 目录; - 防火墙、SELinux、NetworkManager 配置均能配合服务正常运行。
二十一、答辩时最容易被追问的核心点
建议重点掌握以下问题:
- 整个拓扑中 1号机和 3号机分别承担什么路由角色?
- 为什么需要同时配置 IP 转发、静态路由、防火墙转发和 SNAT?
- 内网客户端访问百度的完整数据路径是什么?
- DHCP 客户端从 1号机获取地址的过程是什么?
- DNS 客户端访问
www.dyzx.edu的解析流程是什么? - Web 域名访问成功依赖哪些组件共同正常?
- 修改 Apache 根目录后,为什么权限和 SELinux 都要处理?
PEERDNS=no、dns=none、resolv.conf三者关系是什么?firewall-cmd --permanent和firewall-cmd --reload分别有什么作用?- 如何系统化排查“客户端访问不了网站”这个问题?
二十二、可用于答辩的完整访问流程示例
例:7号机访问 http://www.dyzx.edu
完整流程如下:
- 7号机通过 DHCP 获取
192.168.2.x地址; - 7号机默认网关是
192.168.2.1,即 1号机; - 7号机查询 DNS,读取
/etc/resolv.conf; - DNS 服务器地址为
192.168.1.2; - 7号机访问
192.168.1.2时,数据先交给网关192.168.2.1; - 1号机开启 IP 转发,把数据转发到 vmnet1;
- 2号机 DNS 返回
www.dyzx.edu对应的 Web 服务器 IP,例如192.168.1.4; - 7号机再访问
192.168.1.4:80; - 数据经过 1号机转发到服务器区;
- 4号机 httpd 接收请求;
- Apache 根据
DocumentRoot找到/var/www/myweb/index.html; - 如果文件权限、SELinux、防火墙均正常,则返回网页内容;
- 7号机通过
curl http://www.dyzx.edu看到网页内容。
这个流程能完整体现:
- DHCP;
- DNS;
- 路由;
- IP 转发;
- 防火墙;
- Apache;
- SELinux;
- 客户端测试。
二十三、总结
本实验的核心不是单独安装某一个服务,而是把网络基础、路由、防火墙、NAT、DHCP、DNS、Web、FTP、SELinux 和 NetworkManager 串联起来。答辩时老师通常不会只问“命令怎么敲”,更可能追问“为什么这么配”“如果失败怎么排查”“某个参数的作用是什么”。
因此复习时应重点掌握三条主线:
- 网络主线:网卡、IP、路由、IP 转发、SNAT、连通性测试;
- 服务主线:DHCP 自动分配、DNS 域名解析、Apache 网站访问、FTP 文件传输;
- 安全与排错主线:firewalld 区域、SELinux 上下文、NetworkManager DNS 覆盖、日志与状态检查。
只要能按照“客户端请求从哪里发出、经过哪台机器、由哪个服务处理、返回路径如何走”的思路解释,就能较好应对本实验的大多数提问。
下面按“实验拓扑图中的网络结构”梳理该实验的数据流转全过程。可以把整个实验理解成:客户端在不同子网中,通过 1号机软路由转发访问服务器区,再通过 3号机防火墙/NAT 网关访问互联网或对外发布服务。
第二部分
一、整体拓扑中的网络分区
实验图中主要分为四类区域:
| 区域 | 网段 | 作用 |
|---|---|---|
| DMZ/服务器区 | 192.168.1.0/24 | 放置 DNS、Web、FTP、NFS、Samba、邮件、防火墙内网口等服务器 |
| 子网1 | 192.168.2.0/24 | 客户端 7号机所在网络 |
| 子网2 | 192.168.3.0/24 | 客户端 8号机所在网络 |
| 子网3 | 192.168.4.0/24 | 客户端 9号机所在网络 |
| 外部网络 | vmnet8 / NAT / Internet | 用于访问互联网 |
| 管理网络 | vmnet5 | 用于 Xshell 远程管理虚拟机 |
二、核心设备的数据转发角色
1. 1号机:内部软路由器 + DHCP 服务器
1号机连接四个内部网络:
| 接口所在网络 | IP |
|---|---|
| 服务器区 vmnet1 | 192.168.1.1 |
| 子网1 vmnet2 | 192.168.2.1 |
| 子网2 vmnet3 | 192.168.3.1 |
| 子网3 vmnet4 | 192.168.4.1 |
它的作用是:
- 给
192.168.2.0/24、192.168.3.0/24、192.168.4.0/24客户端分配 IP; - 作为三个客户端子网的默认网关;
- 在三个客户端子网和服务器区之间转发数据;
- 把需要访问互联网的数据转发给 3号机。
2. 2号机:DNS 服务器
2号机位于服务器区:
192.168.1.2它的作用是:
- 为内部域名提供解析,例如
www.dyzx.edu; - 将公网域名请求转发给外部 DNS,例如
223.5.5.5; - 向所有内部网段提供 DNS 服务。
3. 3号机:防火墙 + 出口网关
3号机连接两个主要方向:
| 接口 | 所在网络 | 作用 |
|---|---|---|
| 内网口 | 192.168.1.3 | 连接服务器区 |
| 外网口 | vmnet8 / NAT | 连接互联网 |
它的作用是:
- 内网访问互联网的出口;
- 负责 SNAT;
- 将私有地址转换成可访问互联网的地址;
- 在需要时可以配置 DNAT,把外部访问转发到内部服务器。
4. 4号机:Web + FTP 服务器
4号机位于服务器区:
192.168.1.4它提供:
- Apache Web 服务;
- FTP 服务;
- 后续可扩展 MySQL 服务。
5. 7、8、9号机:客户端
| 客户端 | 所在网段 | 默认网关 |
|---|---|---|
| 7号机 | 192.168.2.0/24 | 192.168.2.1 |
| 8号机 | 192.168.3.0/24 | 192.168.3.1 |
| 9号机 | 192.168.4.0/24 | 192.168.4.1 |
它们通过 DHCP 获取地址,然后访问 DNS、Web、FTP 和互联网。
三、数据流转全过程一:客户端获取 DHCP 地址
以 7号机为例,7号机位于 192.168.2.0/24 子网。
1. DHCP Discover
7号机刚启动时还没有 IP 地址,会发送广播:
源地址:0.0.0.0
目标地址:255.255.255.255
内容:有没有 DHCP 服务器?该广播只在 192.168.2.0/24 所在的 vmnet2 中传播。
2. 1号机收到 DHCP 请求
因为 1号机有一个接口在 vmnet2 中:
192.168.2.1所以 1号机能收到 DHCP Discover。
3. DHCP Offer
1号机根据 /etc/dhcp/dhcpd.conf 中的配置,给 7号机提供一个地址,例如:
IP 地址:192.168.2.101
子网掩码:255.255.255.0
默认网关:192.168.2.1如果是 8号机,则从:
192.168.3.101 - 192.168.3.254中分配。
如果是 9号机,则从:
192.168.4.101 - 192.168.4.254中分配。
4. DHCP Request
客户端选择这个地址后,再广播确认:
我请求使用这个 IP 地址。5. DHCP ACK
1号机确认租约,客户端正式获得 IP。
最终 7号机获得:
IP:192.168.2.x
网关:192.168.2.1至此,客户端具备了访问其他网络的基础。
四、数据流转全过程二:客户端访问 DNS 服务器
以 7号机访问 DNS 服务器 192.168.1.2 为例。
7号机当前位于:
192.168.2.0/24DNS 服务器位于:
192.168.1.0/24二者不在同一网段,必须经过网关转发。
1. 7号机判断目标地址不在本地网段
7号机想访问:
192.168.1.2但自己的地址是:
192.168.2.x/24所以它判断:
192.168.1.2 不在本地子网于是把数据包交给默认网关:
192.168.2.1也就是 1号机。
2. 数据从 7号机发给 1号机
数据流:
7号机 → 1号机 vmnet2 接口
192.168.2.x → 192.168.2.1此时 IP 数据包的目标仍然是:
192.168.1.2网关只是帮它转发。
3. 1号机进行路由转发
1号机开启了:
net.ipv4.ip_forward = 1因此可以把数据包从 vmnet2 转发到 vmnet1。
数据流:
1号机 vmnet2 接口 → 1号机 vmnet1 接口 → 2号机
192.168.2.1 → 192.168.1.1 → 192.168.1.24. 2号机返回 DNS 响应
2号机收到请求后,返回给 7号机:
源地址:192.168.1.2
目标地址:192.168.2.x2号机发现目标 192.168.2.x 不在本地网段,于是根据静态路由,把数据交给:
192.168.1.1也就是 1号机。
5. 1号机把响应转回 7号机
返回路径:
2号机 → 1号机 → 7号机
192.168.1.2 → 192.168.1.1 / 192.168.2.1 → 192.168.2.x最终 7号机完成对 DNS 服务器的访问。
五、数据流转全过程三:客户端访问内部 Web 网站
以 7号机访问:
http://www.dyzx.edu为例。
这个过程包括两个阶段:
- 先解析域名;
- 再访问 Web 服务器。
第一阶段:DNS 解析
1. 7号机读取 DNS 配置
7号机的 /etc/resolv.conf 中写着:
nameserver 192.168.1.2说明它要向 2号机请求解析。
2. 7号机向 2号机查询域名
请求路径:
7号机 → 1号机 → 2号机
192.168.2.x → 192.168.2.1 / 192.168.1.1 → 192.168.1.2查询内容:
www.dyzx.edu 对应哪个 IP?3. 2号机返回解析结果
DNS 返回:
www.dyzx.edu = 192.168.1.4返回路径:
2号机 → 1号机 → 7号机
192.168.1.2 → 192.168.1.1 / 192.168.2.1 → 192.168.2.x第二阶段:访问 Web 服务器
1. 7号机向 Web 服务器发起 HTTP 请求
7号机现在知道:
www.dyzx.edu = 192.168.1.4于是访问:
192.168.1.4:80由于目标不在 192.168.2.0/24 本地网段,所以先交给默认网关:
192.168.2.12. 1号机转发 HTTP 请求
数据路径:
7号机 → 1号机 → 4号机
192.168.2.x → 192.168.2.1 / 192.168.1.1 → 192.168.1.4:803. 4号机 Apache 处理请求
4号机上的 httpd 服务监听:
80 端口Apache 根据配置文件:
/etc/httpd/conf/httpd.conf找到网站根目录:
/var/www/html或修改后的:
/var/www/myweb然后读取:
index.html4. 4号机返回网页内容
返回路径:
4号机 → 1号机 → 7号机
192.168.1.4 → 192.168.1.1 / 192.168.2.1 → 192.168.2.x最终 7号机执行:
curl http://www.dyzx.edu可以看到网页内容。
六、数据流转全过程四:客户端访问 FTP 服务器
以 7号机访问 4号机 FTP 为例。
FTP 服务器地址:
192.168.1.4客户端地址:
192.168.2.x1. FTP 登录请求
客户端执行:
ftp 192.168.1.4由于目标不在本地子网,数据先交给默认网关:
192.168.2.1路径:
7号机 → 1号机 → 4号机
192.168.2.x → 192.168.2.1 / 192.168.1.1 → 192.168.1.42. 4号机 vsftpd 响应
4号机上的 vsftpd 服务处理 FTP 登录请求。
如果是匿名用户:
anonymous访问目录:
/var/ftp/dyzx_data只允许下载,不允许上传。
如果是本地用户:
stu11访问目录:
/var/www/myweb用于维护 Web 站点内容。
3. FTP 数据返回
返回路径:
4号机 → 1号机 → 7号机
192.168.1.4 → 192.168.1.1 / 192.168.2.1 → 192.168.2.x如果是上传文件,数据方向则是:
7号机 → 1号机 → 4号机的 /var/www/myweb如果是下载文件,数据方向则是:
4号机的 /var/ftp/dyzx_data → 1号机 → 7号机七、数据流转全过程五:客户端访问互联网
以 7号机访问百度 IP 或域名为例。
客户端:
192.168.2.x默认网关:
192.168.2.1出口网关:
192.168.1.31. 7号机访问公网 IP
例如:
ping 153.3.238.1277号机发现目标公网 IP 不属于本地网段,于是发送给默认网关:
192.168.2.1数据路径第一段:
7号机 → 1号机
192.168.2.x → 192.168.2.12. 1号机转发给 3号机
1号机的默认路由指向:
192.168.1.3也就是 3号机。
所以数据路径变成:
7号机 → 1号机 → 3号机
192.168.2.x → 192.168.2.1 / 192.168.1.1 → 192.168.1.33. 3号机进行 SNAT
3号机收到来自内网的流量后,会通过 firewalld external/internal 区域和 NAT 规则进行 SNAT。
SNAT 前:
源地址:192.168.2.x
目标地址:153.3.238.127SNAT 后:
源地址:3号机外网口地址
目标地址:153.3.238.127这样互联网服务器看到的请求来源就是 3号机的外网地址,而不是私有地址 192.168.2.x。
4. 数据进入互联网
路径:
7号机 → 1号机 → 3号机 → Internet具体为:
192.168.2.x
↓
192.168.2.1
↓
192.168.1.1
↓
192.168.1.3
↓
3号机外网口
↓
Internet5. 互联网服务器返回数据
公网服务器返回响应时,目标地址是:
3号机外网口地址返回路径:
Internet → 3号机3号机根据 NAT 会话表,把目标地址还原成:
192.168.2.x然后转发给 1号机。
6. 1号机转发回客户端
返回路径:
Internet → 3号机 → 1号机 → 7号机最终 7号机收到互联网响应。
八、数据流转全过程六:客户端访问公网域名
以 7号机访问:
ping www.baidu.com为例,这比访问公网 IP 多了 DNS 解析过程。
1. 先访问内部 DNS
7号机查询:
www.baidu.com 的 IP 是什么?请求发给:
192.168.1.2路径:
7号机 → 1号机 → 2号机2. 2号机判断不是内部域名
2号机发现:
www.baidu.com不是内部域名 dyzx.edu,于是根据 unbound 的转发配置:
forward-addr: 223.5.5.5把请求转发给公网 DNS。
3. DNS 服务器访问公网 DNS
2号机要访问公网 DNS 223.5.5.5,它的默认路由指向 3号机:
2号机 → 3号机 → Internet → 223.5.5.5路径:
192.168.1.2 → 192.168.1.3 → 外网3号机对该流量进行 SNAT。
4. 公网 DNS 返回解析结果
公网 DNS 返回百度的 IP。
路径:
223.5.5.5 → 3号机 → 2号机2号机再把结果返回给 7号机:
2号机 → 1号机 → 7号机5. 7号机再访问百度 IP
获得百度 IP 后,7号机再发起真正的数据访问:
7号机 → 1号机 → 3号机 → Internet最终完成公网域名访问。
九、数据流转全过程七:外部访问内部服务器,DNAT 场景
实验拓扑图中 3号机防火墙旁边标有:
SNAT
DNAT说明它不仅可以让内网访问外网,也可以将外部访问转发到内部服务器。
虽然实验指导中主要配置 SNAT,但从拓扑设计上看,DNAT 的数据流应是:
1. 外部用户访问 3号机外网口
例如外部用户访问:
3号机外网IP:802. 3号机进行 DNAT
3号机把目标地址转换成内部 Web 服务器:
DNAT 前:
源地址:外部用户IP
目标地址:3号机外网IP:80DNAT 后:
源地址:外部用户IP
目标地址:192.168.1.4:803. 请求转发到 4号机
路径:
外部用户 → 3号机 → 4号机 Web 服务
Internet → 防火墙 → 192.168.1.4:804. 4号机返回响应
响应路径:
4号机 → 3号机 → 外部用户3号机会把内部服务器地址再转换回自己的外网地址,让外部用户认为自己访问的是 3号机外网地址。
5. DNAT 的意义
DNAT 用于:
- 发布内部 Web 服务;
- 发布内部 FTP 服务;
- 发布内部 DNS 服务;
- 让外部网络可以访问 DMZ 区服务器。
十、数据流转全过程八:Xshell 管理流量
实验中所有虚拟机都保留 vmnet5 网卡,用于 Xshell 远程连接。
这部分流量与业务网络分离。
1. 主机通过 vmnet5 连接虚拟机
路径:
Windows 主机 → vmnet5 → 虚拟机 ens225例如:
Windows Xshell → 192.168.182.x2. 管理流量不经过 1号机或 3号机
Xshell 管理流量一般不经过:
- 1号机软路由;
- 3号机出口防火墙;
- DHCP/DNS/Web/FTP 业务路径。
它是独立的管理通道。
3. 这样设计的好处
即使实验网络中的:
- 路由配错;
- DNS 配错;
- 防火墙阻断;
- DHCP 出问题;
仍然可以通过 vmnet5 使用 Xshell 进入虚拟机修复。
十一、完整数据流转总结图
1. 内部客户端访问服务器区
7/8/9号机
↓
各自默认网关:1号机
↓
1号机软路由转发
↓
服务器区 vmnet1
↓
2号机 DNS / 4号机 Web FTP / 6号机文件邮件服务2. 内部客户端访问互联网
7/8/9号机
↓
1号机软路由
↓
3号机防火墙/出口网关
↓
SNAT 地址转换
↓
Internet3. 内部客户端访问内部域名网站
客户端
↓
查询 DNS:192.168.1.2
↓
DNS 返回 www.dyzx.edu = 192.168.1.4
↓
客户端访问 192.168.1.4:80
↓
1号机转发
↓
4号机 Apache 返回网页4. 内部客户端访问公网域名
客户端
↓
查询内部 DNS:192.168.1.2
↓
内部 DNS 转发到 223.5.5.5
↓
3号机 SNAT 出口访问互联网
↓
公网 DNS 返回结果
↓
客户端再访问公网 IP
↓
1号机 → 3号机 → Internet5. 外部访问内部服务器
外部用户
↓
访问 3号机外网地址
↓
3号机 DNAT
↓
转发到 192.168.1.4 等内部服务器
↓
内部服务器响应
↓
3号机转换后返回外部用户十二、最重要的一句话总结
该实验的数据流转核心是:
客户端子网的数据先进入 1号机软路由,
需要访问服务器区的数据由 1号机转发到 vmnet1,
需要访问互联网的数据先由 1号机转发到 3号机,
再由 3号机通过 SNAT 转换后进入 Internet;
DNS、Web、FTP 等服务都部署在服务器区,
客户端访问这些服务必须依赖路由、DNS、防火墙和服务本身共同正常。如果老师问“这个拓扑的数据是怎么走的”,可以直接按下面这条主线回答:
客户端 → 默认网关1号机 → 服务器区或3号机出口 → 对应服务器/互联网 → 原路返回