Skip to content

中小型局域网服务器群架设实验学习文档

——按实验顺序整理的重点知识、操作细节与教师可能提问


第一部分 实验细节

一、实验总体理解

1. 实验目标

本实验是一个综合性 Linux 网络服务器群搭建项目,主要目标是在 VMware 虚拟化环境中,使用 Rocky Linux 8.10 搭建一个模拟校园网或中小型企业网的网络环境。

实验内容包括:

  1. 虚拟网络规划与配置;
  2. 多台 Rocky Linux 虚拟机克隆与主机名设置;
  3. 多网段 IP 地址规划;
  4. 静态 IP、动态 IP、默认路由、静态路由配置;
  5. 软路由器与出口网关配置;
  6. IP 转发配置;
  7. firewalld 防火墙区域与 SNAT 配置;
  8. DHCP 服务器搭建;
  9. DNS 服务器搭建;
  10. Apache Web 服务器搭建;
  11. FTP 服务器搭建;
  12. SELinux、NetworkManager、resolv.conf 等常见 Linux 网络服务细节配置;
  13. 网络连通性测试与故障排查。

二、实验拓扑与整体网络结构

logo

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 虚拟网络:

虚拟网络子网地址作用
vmnet1192.168.1.0/24DMZ 区,服务器区,连接 1、2、3、4、6 号机
vmnet2192.168.2.0/24子网1,客户端 7 号机所在网络
vmnet3192.168.3.0/24子网2,客户端 8 号机所在网络
vmnet4192.168.4.0/24子网3,客户端 9 号机所在网络
vmnet5192.168.182.0/24 或本机默认Host-only,用于 Xshell 远程连接
vmnet8192.168.181.0/24 或本机默认NAT,用于连接互联网、安装软件

注意:

  • vmnet1 至 vmnet4 需要手动规划;
  • vmnet1 至 vmnet4 的 VMware 自带 DHCP 应关闭,避免与 1 号机 DHCP 服务冲突;
  • vmnet5 用于 Xshell 管理,一般所有虚拟机都保留;
  • vmnet8 用于访问互联网,通常只有基础模板或 3 号机需要使用;
  • 各人电脑上 vmnet5、vmnet8 的默认网段可能不同,实验中应以本机实际情况为准。

三、基础实验环境

1. 安装的软件

需要安装:

  1. VMware Workstation 16;
  2. Xshell 8;
  3. Rocky Linux 8.10。

Rocky Linux 安装时建议选择:

  • “服务器”模式,而不是“带 GUI 的服务器”;
  • 这样可以节省资源,因为实验需要多台虚拟机同时运行。

2. 为什么要克隆虚拟机?

先安装一台 Rocky Linux 8.10 基础虚拟机,然后克隆多台虚拟机,可以节省安装时间,并保证环境一致。

克隆后需要修改:

  1. 主机名;
  2. 网卡连接关系;
  3. IP 地址;
  4. 路由;
  5. 服务角色。

3. 主机名命名规则

示例:

bash
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、ens225ens224 连接服务器区,ens225 用于 Xshell
3号机ens160、ens224、ens225ens160 连接互联网,ens224 连接内网,ens225 用于 Xshell
4号机ens224、ens225Web/FTP 服务器
6号机ens224、ens225文件/邮件服务器
7号机ens225、ens256子网2客户端
8号机ens225、ens161子网3客户端
9号机ens225、ens193子网4客户端

关闭不需要的网络连接:

bash
nmcli connection down ens161

并在对应配置文件中设置:

bash
ONBOOT=no

2. 静态 IP 地址规划

机器网卡IP 地址子网
1号机ens224192.168.1.1/24vmnet1
1号机ens256192.168.2.1/24vmnet2
1号机ens161192.168.3.1/24vmnet3
1号机ens193192.168.4.1/24vmnet4
2号机ens224192.168.1.2/24vmnet1
3号机ens224192.168.1.3/24vmnet1
4号机ens224192.168.1.4/24vmnet1
6号机ens224192.168.1.6/24vmnet1
7号机ens256192.168.2.7/24,后期 DHCPvmnet2
8号机ens161192.168.3.8/24,后期 DHCPvmnet3
9号机ens193192.168.4.9/24,后期 DHCPvmnet4

配置示例:

bash
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 中负责网络连接管理的服务。

常用命令:

bash
systemctl status NetworkManager.service
systemctl start NetworkManager.service
systemctl restart NetworkManager.service
systemctl enable NetworkManager.service

查看是否由 NetworkManager 管理网络:

bash
nmcli networking

开启管理:

bash
nmcli networking on

关闭管理:

bash
nmcli networking off

2. 查看网络连接

bash
nmcli connection show

查看 IP:

bash
ip addr

3. 添加网络连接

如果系统中能看到网卡,但没有对应连接配置文件,可以手动添加:

bash
nmcli connection add type ethernet con-name ens225 ifname ens225

删除连接:

bash
nmcli connection delete ens225

可能被问:

问题:ip addr 能看到网卡,但 nmcli connection show 看不到连接,怎么办?

答:
说明系统识别到了物理网卡,但 NetworkManager 没有对应的连接配置。可以用:

bash
nmcli connection add type ethernet con-name ens225 ifname ens225

创建连接配置。


六、Xshell 远程连接

1. Xshell 使用的网络

所有虚拟机保留 vmnet5 对应网卡 ens225,用于 Xshell 远程连接。

vmnet5 是 Host-only 网络,主机和虚拟机之间可以通信,但不用于实验业务流量。


2. Xshell 连接不稳定的排查

如果 Xshell 有时能连上,有时连不上,可以尝试:

bash
nmcli connection down ens225
nmcli connection up ens225

也可以:

  1. 在 VMware 虚拟网络编辑器中断开 vmnet5 与主机连接后重新连接;
  2. 在 Windows 控制面板中禁用再启用 VMware vmnet5 虚拟网卡。

可能被问:

问题:为什么要单独保留 vmnet5 用于 Xshell?

答:
因为实验中的 vmnet1 至 vmnet4 会频繁修改路由、防火墙、DHCP 和 DNS,如果远程连接也依赖这些业务网络,一旦配置错误就会失去管理入口。vmnet5 作为独立管理网络,可以保证始终能远程维护虚拟机。


七、IP 转发配置

1. 哪些机器需要开启 IP 转发?

需要开启 IP 转发的机器:

  1. 1号机:软路由器,连接 vmnet1、vmnet2、vmnet3、vmnet4;
  2. 3号机:出口网关,连接内网和外网。

2. 配置方法

编辑:

bash
vim /etc/sysctl.d/99-sysctl.conf

添加:

bash
net.ipv4.ip_forward = 1

使配置生效:

bash
sysctl -p

查看是否生效:

bash
cat /proc/sys/net/ipv4/ip_forward

如果显示:

bash
1

说明 IP 转发已开启。


3. 可能被问

问题:什么是 IP 转发?为什么 1 号机和 3 号机必须开启?

答:
IP 转发是指 Linux 主机可以像路由器一样,把从一个网卡收到的数据包转发到另一个网卡。1号机连接多个内部子网,需要在不同子网之间转发数据;3号机连接内网和外网,需要把内网访问互联网的数据转发出去,所以两台机器都必须开启 IP 转发。


八、静态路由与默认路由

1. 路由规划思想

实验中路由分为:

  1. 直连路由;
  2. 静态路由;
  3. 默认路由。

不同机器的路由逻辑如下:

  • 1号机知道内部四个子网,并把访问外网的流量交给 3号机;
  • 3号机访问内部子网时交给 1号机,访问互联网时走外网网卡;
  • 2、4、6号机访问其他内部子网走 1号机,访问外网走 3号机;
  • 7、8、9号机默认网关分别是各自子网中的 1号机接口地址。

2. 2、4、6号机路由配置

bash
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号机路由配置

bash
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号机默认路由

bash
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号机:

bash
nmcli connection modify ens256 +ipv4.routes "0.0.0.0/0 192.168.2.1"

8号机:

bash
nmcli connection modify ens161 +ipv4.routes "0.0.0.0/0 192.168.3.1"

9号机:

bash
nmcli connection modify ens193 +ipv4.routes "0.0.0.0/0 192.168.4.1"

6. 查看路由表

bash
route -n

需要重点看:

字段含义
Destination目标网络
Gateway下一跳网关
Genmask子网掩码
Iface出接口

可能被问:

问题:默认路由 0.0.0.0/0 的作用是什么?

答:
默认路由用于匹配所有路由表中没有明确记录的目标地址。也就是说,当主机不知道某个目标网络该怎么走时,就把数据包交给默认网关。


九、网络连通性测试

1. 以 7号机为例

bash
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

bash
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

配置:

bash
firewall-cmd --permanent --change-interface=ens160 --zone=external
firewall-cmd --permanent --change-interface=ens224 --zone=internal
firewall-cmd --reload

查看:

bash
firewall-cmd --list-all
firewall-cmd --list-all --zone=external
firewall-cmd --list-all --zone=internal

2. SNAT 的作用

SNAT,即源地址转换。

内网地址如:

text
192.168.2.101
192.168.3.101
192.168.4.101

属于私有地址,不能直接在互联网中路由。通过 3号机 SNAT,可以把内网主机访问互联网的数据包源地址转换成 3号机外网地址,从而实现共享上网。


3. 1号机防火墙配置

1号机作为内部软路由器,需要允许内部接口之间转发:

bash
firewall-cmd --permanent --set-default-zone=internal
firewall-cmd --permanent --zone=internal --add-forward
firewall-cmd --reload
firewall-cmd --list-all

注意:

指导书中有时写成:

bash
firewall-cmd --set-default-zone=internal

为了永久生效,应使用:

bash
firewall-cmd --permanent --set-default-zone=internal

4. 可能被问

问题:SNAT 和 DNAT 有什么区别?

答:

类型修改内容典型用途
SNAT修改源 IP 地址内网用户共享公网出口访问互联网
DNAT修改目标 IP 地址外网用户访问内网服务器,例如发布 Web 服务

本实验基础阶段主要配置 SNAT,让内网访问互联网。拓扑图中也提到防火墙支持 DNAT,用于后续发布内网 Web、FTP、DNS 等服务。


十一、DNS 临时解析配置

1. 基础阶段使用阿里 DNS

在 1、2、4、6、7、8、9 号机上编辑:

bash
vim /etc/resolv.conf

删除原内容,添加:

bash
nameserver 223.5.5.5

2. 防止 NetworkManager 覆盖 resolv.conf

编辑:

bash
vim /etc/NetworkManager/NetworkManager.conf

[main] 中添加:

bash
dns=none

然后重启:

bash
systemctl restart NetworkManager.service

3. 可能被问

问题:为什么手动改了 /etc/resolv.conf,重启后又被改回去了?

答:
因为 NetworkManager 默认会管理 DNS 配置,并可能根据 DHCP 获取到的 DNS 信息重写 /etc/resolv.conf。解决方法是在 /etc/NetworkManager/NetworkManager.conf[main] 中添加:

bash
dns=none

让 NetworkManager 不再管理 DNS。


十二、DHCP 服务器

1. DHCP 服务器安装位置

DHCP 服务器安装在 1号机。

安装命令:

bash
yum install dhcp-server

2. DHCP 配置文件

配置文件:

bash
/etc/dhcp/dhcpd.conf

配置内容示例:

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 配置语法

bash
dhcpd -t

如果没有错误输出,说明语法基本正确。


5. 启动 DHCP 服务

bash
systemctl start dhcpd.service
systemctl enable dhcpd.service
systemctl status dhcpd.service

6. 客户端改为自动获取 IP

7号机:

bash
nmcli connection modify ens256 ipv4.method auto
nmcli connection reload
nmcli connection up ens256

8号机:

bash
nmcli connection modify ens161 ipv4.method auto
nmcli connection reload
nmcli connection up ens161

9号机:

bash
nmcli connection modify ens193 ipv4.method auto
nmcli connection reload
nmcli connection up ens193

查看地址:

bash
ip address show

7. DHCP 客户端工具 dhclient

安装:

bash
yum install dhclient

释放租约:

bash
dhclient -r ens256

重新获取:

bash
dhclient ens256

8号机使用 ens161,9号机使用 ens193


8. 查看租约记录

在 1号机上:

bash
cat /var/lib/dhcpd/dhcpd.leases

可以看到客户端获取 IP 的租约记录。


9. DHCP 排错重点

可能原因包括:

  1. 基础网络不通;
  2. 1号机 DHCP 服务未启动;
  3. /etc/dhcp/dhcpd.conf 语法错误;
  4. VMware 的 vmnet1 至 vmnet4 自带 DHCP 没有关闭;
  5. 客户端网卡没有设置为 DHCP;
  6. 客户端配置文件中 BOOTPROTO 不是 dhcp
  7. 客户端没有重载网络连接;
  8. /etc/hosts 中写了旧的静态 IP,导致解析混乱。

10. DHCP 可能被问的问题

问题1:为什么 vmnet1 至 vmnet4 的 VMware DHCP 要关闭?

答:
因为实验要求使用 1号机作为 DHCP 服务器。如果 VMware 自带 DHCP 也开启,同一网段会有两个 DHCP 服务器,客户端可能随机从不同服务器获取地址,造成地址、网关、DNS 错乱。


问题2:DHCP 四个基本过程是什么?

答:

  1. Discover:客户端广播寻找 DHCP 服务器;
  2. Offer:服务器提供可用 IP;
  3. Request:客户端请求使用该 IP;
  4. ACK:服务器确认租约。

问题3:为什么 DHCP 配置中没有给 192.168.1.0/24 分配地址?

答:
因为 192.168.1.0/24 是服务器区,服务器通常使用静态 IP,不能频繁变化。DHCP 主要服务客户端子网 192.168.2.0/24192.168.3.0/24192.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号机。

安装:

bash
yum install unbound

启动:

bash
systemctl start unbound.service
systemctl enable unbound.service
systemctl status unbound.service

2. unbound 配置文件

主配置文件:

bash
/etc/unbound/unbound.conf

需要修改的关键参数:

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.5

3. 参数解释

参数含义
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. 检查配置

bash
unbound-checkconf

重启服务:

bash
systemctl restart unbound.service

5. 防火墙开放 DNS 服务

bash
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload

DNS 使用:

  • UDP 53:主要用于普通查询;
  • TCP 53:用于大响应、区域传送等场景。

6. 服务器端 PEERDNS 配置

编辑 2号机的网卡配置,例如:

bash
vim /etc/sysconfig/network-scripts/ifcfg-ens225

添加:

bash
PEERDNS=no

作用:
不接受 DHCP 服务器下发的 DNS 配置,避免 /etc/resolv.conf 被自动修改。


7. NetworkManager 配置

DNS 服务器端:

bash
vim /etc/NetworkManager/NetworkManager.conf

[main] 添加:

bash
dns=unbound

重启:

bash
systemctl restart NetworkManager.service

此时服务器端 /etc/resolv.conf 中理论上不应再有普通 nameserver 条目。


8. 客户端 DNS 配置

客户端包括:

  • 1号机;
  • 3号机;
  • 4号机;
  • 6号机;
  • 7号机;
  • 8号机;
  • 9号机。

如果某网卡通过 DHCP 获取地址,需要在网卡配置文件中加入:

bash
PEERDNS=no

NetworkManager 配置:

bash
dns=none

客户端 /etc/resolv.conf 中写入:

bash
nameserver 192.168.1.2

表示使用 2号机作为 DNS 服务器。


9. DNS 测试命令

服务器端测试:

bash
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 服务器测试:

bash
dig www.dyzx.edu @192.168.1.2
dig www.baidu.com @192.168.1.2

客户端测试同样使用:

bash
dig www.dyzx.edu
dig www.baidu.com

10. DNS 排错重点

  1. 基础网络是否互通;
  2. 2号机 unbound.service 是否 active;
  3. unbound-checkconf 是否报错;
  4. 防火墙是否开放 DNS;
  5. interface: 0.0.0.0 是否配置;
  6. access-control 是否允许对应子网;
  7. 客户端 /etc/resolv.conf 是否只有 nameserver 192.168.1.2
  8. 客户端 NetworkManager.conf 是否设置 dns=none
  9. DHCP 网卡是否设置 PEERDNS=no
  10. 指定服务器解析是否成功。

11. DNS 可能被问的问题

问题1:为什么 interface 要设置成 0.0.0.0

答:
表示 DNS 服务监听所有 IPv4 接口。如果只监听 127.0.0.1,则只能本机解析,其他客户端无法访问该 DNS 服务。


问题2:access-control 的作用是什么?

答:
用于控制哪些网段可以使用该 DNS 服务器。本实验允许 192.168.1.0/24192.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.confNetworkManager.confPEERDNS=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号机。

安装:

bash
yum install httpd

启动:

bash
systemctl start httpd.service
systemctl enable httpd.service
systemctl status httpd.service

2. 检查 httpd 进程和端口

检查进程:

bash
ps -ef | grep httpd

检查端口:

bash
netstat -tunlp | grep httpd

默认监听端口是:

text
80

3. 简单测试

访问默认首页:

bash
curl http://127.0.0.1

创建测试首页:

bash
echo "Welcome to www.dyzx.com!" >> /var/www/html/index.html

本机测试:

bash
curl http://127.0.0.1

IP 测试:

bash
curl http://192.168.1.4

域名测试:

bash
curl http://www.dyzx.edu

4. 防火墙开放 HTTP

bash
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload

如果 4号机接口属于 internal 区域,则也可根据实际区域开放:

bash
firewall-cmd --permanent --zone=internal --add-service=http
firewall-cmd --reload

5. httpd 配置文件

主配置文件:

bash
/etc/httpd/conf/httpd.conf

关键参数:

apache
ServerRoot "/etc/httpd"
Listen 80
ServerAdmin root@dyzx.edu
ServerName 192.168.1.4:80
DocumentRoot "/var/www/html"
DirectoryIndex index.html

参数解释:

参数作用
ServerRootApache 配置和运行文件根目录
Listen监听端口
ServerAdmin管理员邮箱
ServerNameWeb 服务器名称或 IP
DocumentRoot网站根目录
DirectoryIndex默认首页文件

6. 检查配置语法

bash
apachectl configtest

如果显示:

text
Syntax OK

说明语法正确。

重启:

bash
systemctl restart httpd.service

7. 修改网站根目录 DocumentRoot

创建新目录:

bash
cd /var/www
mkdir myweb
chown -R apache:apache myweb

查看 SELinux 上下文:

bash
ls -dZ /var/www/html /var/www/myweb

如果 /var/www/myweb/var/www/html 类型上下文不同,需要修改:

bash
semanage fcontext -a -t httpd_sys_content_t "/var/www/myweb(/.*)?"
restorecon -Rv /var/www/myweb

允许 httpd 网络连接:

bash
setsebool -P httpd_can_network_connect on

修改配置文件:

apache
DocumentRoot "/var/www/myweb"
<Directory "/var/www/myweb">

创建测试页面:

bash
echo "Welcome to德雅职业学校网站2" > /var/www/myweb/index.html

检查并重启:

bash
apachectl configtest
systemctl restart httpd.service

客户端测试:

bash
curl http://www.dyzx.edu

8. Web 可能被问的问题

问题1:Apache 默认网站目录是什么?

答:
默认是:

bash
/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 成功,但客户端访问失败?

答:
可能原因包括:

  1. 防火墙未开放 http;
  2. DNS 解析错误;
  3. 客户端路由不通;
  4. Apache 只监听本地地址;
  5. SELinux 或目录权限问题。

十五、FTP 服务器

1. FTP 服务器安装位置

FTP 安装在 4号机。

安装:

bash
dnf install vsftpd -y

2. 匿名 FTP 下载目录

编辑:

bash
vim /etc/vsftpd/vsftpd.conf

配置:

conf
anonymous_enable=YES
anon_root=/var/ftp/dyzx_data
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

创建目录:

bash
mkdir -p /var/ftp/dyzx_data
chown ftp:ftp /var/ftp/dyzx_data
chmod 755 /var/ftp/dyzx_data

解释:

  • 允许匿名用户登录;
  • 匿名用户只能下载;
  • 不允许匿名上传、创建目录或修改文件。

3. 本地用户 FTP 维护 Web 站点

创建用户:

bash
useradd stu11
passwd stu11

配置:

conf
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 配置

编辑:

bash
vi /etc/vsftpd/chroot_list

添加:

text
stu11

在配置文件中指定:

conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

注意:
不同 vsftpd 配置下,chroot_list 的含义可能会因 chroot_local_user 设置不同而不同。实验中重点是实现 stu11 被限制在 /var/www/myweb 中,不能访问其他目录。


5. SELinux 配置

允许 FTP 完全访问:

bash
setsebool -P ftpd_full_access on

允许被动模式:

bash
setsebool -P ftpd_use_passive_mode on

允许连接非保留端口:

bash
setsebool -P ftpd_connect_all_unreserved on

6. 修改 Web 目录权限

bash
chown -R stu11:stu11 /var/www/myweb
chmod -R 775 /var/www/myweb

7. 启动 FTP 服务并开放防火墙

bash
systemctl start vsftpd
systemctl enable vsftpd
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload

8. 客户端测试 FTP

安装客户端:

bash
dnf install ftp -y

登录:

bash
ftp 192.168.1.4

创建测试文件:

bash
echo "This is a test file" > test.txt

上传:

ftp
put test.txt

9. 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 模式

bash
getenforce

常见结果:

状态含义
Enforcing强制执行策略
Permissive只记录不拦截
Disabled关闭

2. 查看文件上下文

bash
ls -Z
ls -dZ /var/www/html /var/www/myweb

3. 修改上下文规则

bash
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. 网络相关

bash
ip addr
nmcli connection show
nmcli connection reload
nmcli connection up ens224
nmcli connection down ens224
route -n
ping -c 4 目标地址

2. 服务管理

bash
systemctl start 服务名
systemctl stop 服务名
systemctl restart 服务名
systemctl enable 服务名
systemctl status 服务名

3. 防火墙

bash
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 --reload

4. DNS 测试

bash
dig www.dyzx.edu
dig www.baidu.com
dig www.baidu.com @192.168.1.2

5. Web 测试

bash
curl http://127.0.0.1
curl http://192.168.1.4
curl http://www.dyzx.edu

6. DHCP 测试

bash
dhcpd -t
ip address show
dhclient -r ens256
dhclient ens256
cat /var/lib/dhcpd/dhcpd.leases

十八、按实验顺序整理的高价值教师提问清单

1. 基础环境阶段

  1. 为什么 Rocky Linux 安装时选择“服务器”而不是“带 GUI 的服务器”?
  2. VMware 中 vmnet1、vmnet2、vmnet3、vmnet4、vmnet5、vmnet8 分别有什么作用?
  3. 为什么 vmnet5 用于 Xshell,而不是用于业务通信?
  4. 为什么 vmnet8 用于访问互联网?
  5. 为什么 vmnet1 至 vmnet4 要关闭 VMware 自带 DHCP?
  6. 克隆虚拟机后为什么要修改主机名?
  7. hostnamectl set-hostname 的作用是什么?
  8. ip addrnmcli connection show 有什么区别?
  9. 网卡存在但没有连接配置时怎么办?
  10. 为什么不需要的网卡要关闭并设置 ONBOOT=no

2. IP 地址与路由阶段

  1. 为什么服务器区使用 192.168.1.0/24
  2. 为什么 1号机需要连接多个子网?
  3. 为什么 2、4、6号机要设置静态 IP?
  4. 为什么 7、8、9号机后期改为 DHCP?
  5. 什么是默认路由?
  6. 什么是静态路由?
  7. 0.0.0.0/0 表示什么?
  8. 1号机为什么默认路由指向 3号机?
  9. 3号机为什么访问子网2、3、4要经过 1号机?
  10. 7号机为什么默认网关是 192.168.2.1
  11. 如何查看路由表?
  12. route -n 中 Destination、Gateway、Genmask、Iface 分别表示什么?
  13. 如果跨网段 ping 不通,应如何排查?

3. IP 转发与防火墙阶段

  1. 什么是 IP 转发?
  2. 为什么 1号机和 3号机必须开启 IP 转发?
  3. 如何永久开启 IP 转发?
  4. sysctl -p 的作用是什么?
  5. /proc/sys/net/ipv4/ip_forward 显示 1 表示什么?
  6. firewalld 中 zone 的作用是什么?
  7. external 区域和 internal 区域有什么区别?
  8. 为什么 3号机外网接口放入 external,内网接口放入 internal?
  9. 什么是 SNAT?
  10. SNAT 解决了什么问题?
  11. SNAT 和 DNAT 有什么区别?
  12. 为什么内网私有地址不能直接访问互联网?
  13. 为什么 1号机要启用 internal 区域的 forward?
  14. firewall-cmd --reload 的作用是什么?
  15. --permanent 的作用是什么?

4. DNS 临时解析与互联网测试阶段

  1. 为什么先测试 ping 公网 IP,再测试 ping 域名?
  2. IP 能 ping 通但域名 ping 不通说明什么?
  3. /etc/resolv.conf 的作用是什么?
  4. nameserver 223.5.5.5 表示什么?
  5. 为什么 NetworkManager 会覆盖 /etc/resolv.conf
  6. dns=none 的作用是什么?
  7. 为什么 7、8、9 号机开始时不能 ping 通百度域名?
  8. 修改 1号机 firewalld 转发后为什么客户端可以解析外网域名?

5. DHCP 阶段

  1. DHCP 服务器安装在哪台机器?
  2. 为什么 DHCP 服务器放在 1号机?
  3. DHCP 的四个交互过程是什么?
  4. dhcpd.conf 文件在哪里?
  5. default-lease-timemax-lease-time 有什么区别?
  6. range 的作用是什么?
  7. option routers 的作用是什么?
  8. 为什么不给服务器区 192.168.1.0/24 配 DHCP?
  9. 如何给指定 MAC 地址绑定固定 IP?
  10. DHCP 固定分配和静态 IP 有什么区别?
  11. 如何检查 DHCP 配置文件语法?
  12. 如何查看 DHCP 服务状态?
  13. 如何查看 DHCP 租约记录?
  14. 客户端如何释放和重新获取 IP?
  15. 客户端获取不到地址时如何排查?
  16. 为什么 VMware 自带 DHCP 会影响实验?
  17. 为什么客户端配置文件中要检查 BOOTPROTO=dhcp

6. DNS 阶段

  1. DNS 服务器安装在哪台机器?
  2. 本实验使用什么 DNS 软件?
  3. unbound 是什么类型的 DNS 服务?
  4. /etc/unbound/unbound.conf 是什么文件?
  5. interface: 0.0.0.0 的作用是什么?
  6. 如果只监听 127.0.0.1 会发生什么?
  7. access-control 的作用是什么?
  8. 为什么要允许四个内部网段?
  9. forward-zone 的作用是什么?
  10. name: "." 表示什么?
  11. forward-addr: 223.5.5.5 的作用是什么?
  12. 为什么要配置 domain-insecure: "dyzx.edu"
  13. 为什么服务器端 NetworkManager.conf 使用 dns=unbound
  14. 为什么客户端使用 dns=none
  15. PEERDNS=no 的作用是什么?
  16. 客户端 /etc/resolv.conf 中应该写什么?
  17. 如何测试 DNS 解析?
  18. dig www.baidu.com @192.168.1.2 的意义是什么?
  19. 指定 DNS 能解析,不指定不能解析,问题在哪里?
  20. 防火墙为什么要开放 DNS 服务?

7. Apache Web 阶段

  1. Web 服务器安装在哪台机器?
  2. Apache 软件包名称是什么?
  3. httpd 服务如何启动和设置开机自启?
  4. Apache 默认监听哪个端口?
  5. 如何查看 httpd 是否运行?
  6. 如何查看 httpd 监听端口?
  7. Apache 默认网站根目录是什么?
  8. DocumentRoot 的作用是什么?
  9. DirectoryIndex 的作用是什么?
  10. ServerName 的作用是什么?
  11. 为什么要执行 apachectl configtest
  12. 防火墙为什么要开放 http 服务?
  13. 本机访问成功,客户端访问失败可能是什么原因?
  14. 为什么修改 DocumentRoot 后还要修改 <Directory>
  15. 为什么修改网站目录后要考虑 SELinux?
  16. httpd_sys_content_t 是什么?
  17. restorecon 的作用是什么?
  18. setsebool -P httpd_can_network_connect on 的作用是什么?
  19. 域名访问 Web 依赖哪些条件?
  20. curl http://www.dyzx.edu 成功说明哪些服务正常?

8. FTP 阶段

  1. FTP 服务器安装在哪台机器?
  2. vsftpd 是什么?
  3. FTP 默认使用哪些端口?
  4. 匿名用户和本地用户有什么区别?
  5. 如何允许匿名用户下载?
  6. 为什么不允许匿名用户上传?
  7. anon_root 的作用是什么?
  8. 本地用户 stu11 的作用是什么?
  9. 为什么要把 stu11 限制在 /var/www/myweb
  10. chroot_local_user=YES 的作用是什么?
  11. allow_writeable_chroot=YES 的作用是什么?
  12. local_root=/var/www/myweb 的作用是什么?
  13. 为什么要修改 /var/www/myweb 的属主?
  14. FTP 写入失败可能与哪些因素有关?
  15. 为什么 FTP 还要设置 SELinux 布尔值?
  16. 为什么防火墙要开放 ftp 服务?
  17. 如何测试 FTP 上传和下载?
  18. 匿名用户和 stu11 用户测试时应该分别验证什么?

十九、综合故障排查思路

1. 网络不通

按顺序检查:

  1. 网卡是否连接正确 vmnet;
  2. IP 是否配置正确;
  3. 网卡是否启用;
  4. 路由表是否正确;
  5. IP 转发是否开启;
  6. 防火墙是否阻止;
  7. NAT 是否配置;
  8. 目标服务是否启动。

2. 能 ping IP,不能 ping 域名

重点检查:

  1. /etc/resolv.conf
  2. NetworkManager 是否覆盖 DNS;
  3. DNS 服务器是否正常;
  4. 防火墙是否开放 DNS;
  5. 客户端是否能访问 192.168.1.2
  6. dig 域名 @192.168.1.2 是否成功。

3. DHCP 获取不到地址

重点检查:

  1. 1号机 DHCP 服务是否 active;
  2. dhcpd -t 是否通过;
  3. VMware 自带 DHCP 是否关闭;
  4. 客户端是否设置 ipv4.method auto
  5. 网卡配置文件是否 BOOTPROTO=dhcp
  6. 客户端是否在正确 vmnet;
  7. 防火墙是否影响 DHCP 广播;
  8. 租约文件是否有记录。

4. Web 无法访问

重点检查:

  1. httpd 是否 active;
  2. 80 端口是否监听;
  3. 防火墙是否开放 http;
  4. DNS 是否解析到 192.168.1.4
  5. DocumentRoot 是否正确;
  6. <Directory> 是否同步修改;
  7. 首页文件是否存在;
  8. 文件权限和 SELinux 上下文是否正确。

5. FTP 无法上传

重点检查:

  1. vsftpd 是否 active;
  2. 是否允许本地用户;
  3. write_enable=YES 是否配置;
  4. 用户是否被锁定到正确目录;
  5. 目录属主和权限是否允许写入;
  6. SELinux 布尔值是否开启;
  7. 防火墙是否开放 ftp;
  8. FTP 客户端是否使用正确用户登录。

二十、实验最终应达到的效果

实验完成后,应实现:

  1. 所有虚拟机可以通过 Xshell 管理;
  2. 1号机作为软路由器,实现内部多个子网互通;
  3. 3号机作为出口网关,实现内网共享上网;
  4. 7、8、9号机可以通过 DHCP 自动获取 IP;
  5. 2号机 DNS 可以解析内部域名和外部域名;
  6. 客户端可以通过 www.dyzx.edu 访问 4号机 Web 服务;
  7. 4号机 Apache 可以使用自定义网站目录 /var/www/myweb
  8. FTP 匿名用户可以下载资源;
  9. FTP 本地用户 stu11 可以维护 Web 目录;
  10. 防火墙、SELinux、NetworkManager 配置均能配合服务正常运行。

二十一、答辩时最容易被追问的核心点

建议重点掌握以下问题:

  1. 整个拓扑中 1号机和 3号机分别承担什么路由角色?
  2. 为什么需要同时配置 IP 转发、静态路由、防火墙转发和 SNAT?
  3. 内网客户端访问百度的完整数据路径是什么?
  4. DHCP 客户端从 1号机获取地址的过程是什么?
  5. DNS 客户端访问 www.dyzx.edu 的解析流程是什么?
  6. Web 域名访问成功依赖哪些组件共同正常?
  7. 修改 Apache 根目录后,为什么权限和 SELinux 都要处理?
  8. PEERDNS=nodns=noneresolv.conf 三者关系是什么?
  9. firewall-cmd --permanentfirewall-cmd --reload 分别有什么作用?
  10. 如何系统化排查“客户端访问不了网站”这个问题?

二十二、可用于答辩的完整访问流程示例

例:7号机访问 http://www.dyzx.edu

完整流程如下:

  1. 7号机通过 DHCP 获取 192.168.2.x 地址;
  2. 7号机默认网关是 192.168.2.1,即 1号机;
  3. 7号机查询 DNS,读取 /etc/resolv.conf
  4. DNS 服务器地址为 192.168.1.2
  5. 7号机访问 192.168.1.2 时,数据先交给网关 192.168.2.1
  6. 1号机开启 IP 转发,把数据转发到 vmnet1;
  7. 2号机 DNS 返回 www.dyzx.edu 对应的 Web 服务器 IP,例如 192.168.1.4
  8. 7号机再访问 192.168.1.4:80
  9. 数据经过 1号机转发到服务器区;
  10. 4号机 httpd 接收请求;
  11. Apache 根据 DocumentRoot 找到 /var/www/myweb/index.html
  12. 如果文件权限、SELinux、防火墙均正常,则返回网页内容;
  13. 7号机通过 curl http://www.dyzx.edu 看到网页内容。

这个流程能完整体现:

  • DHCP;
  • DNS;
  • 路由;
  • IP 转发;
  • 防火墙;
  • Apache;
  • SELinux;
  • 客户端测试。

二十三、总结

本实验的核心不是单独安装某一个服务,而是把网络基础、路由、防火墙、NAT、DHCP、DNS、Web、FTP、SELinux 和 NetworkManager 串联起来。答辩时老师通常不会只问“命令怎么敲”,更可能追问“为什么这么配”“如果失败怎么排查”“某个参数的作用是什么”。

因此复习时应重点掌握三条主线:

  1. 网络主线:网卡、IP、路由、IP 转发、SNAT、连通性测试;
  2. 服务主线:DHCP 自动分配、DNS 域名解析、Apache 网站访问、FTP 文件传输;
  3. 安全与排错主线:firewalld 区域、SELinux 上下文、NetworkManager DNS 覆盖、日志与状态检查。

只要能按照“客户端请求从哪里发出、经过哪台机器、由哪个服务处理、返回路径如何走”的思路解释,就能较好应对本实验的大多数提问。

下面按“实验拓扑图中的网络结构”梳理该实验的数据流转全过程。可以把整个实验理解成:客户端在不同子网中,通过 1号机软路由转发访问服务器区,再通过 3号机防火墙/NAT 网关访问互联网或对外发布服务。

第二部分

一、整体拓扑中的网络分区

实验图中主要分为四类区域:

区域网段作用
DMZ/服务器区192.168.1.0/24放置 DNS、Web、FTP、NFS、Samba、邮件、防火墙内网口等服务器
子网1192.168.2.0/24客户端 7号机所在网络
子网2192.168.3.0/24客户端 8号机所在网络
子网3192.168.4.0/24客户端 9号机所在网络
外部网络vmnet8 / NAT / Internet用于访问互联网
管理网络vmnet5用于 Xshell 远程管理虚拟机

二、核心设备的数据转发角色

1. 1号机:内部软路由器 + DHCP 服务器

1号机连接四个内部网络:

接口所在网络IP
服务器区 vmnet1192.168.1.1
子网1 vmnet2192.168.2.1
子网2 vmnet3192.168.3.1
子网3 vmnet4192.168.4.1

它的作用是:

  1. 192.168.2.0/24192.168.3.0/24192.168.4.0/24 客户端分配 IP;
  2. 作为三个客户端子网的默认网关;
  3. 在三个客户端子网和服务器区之间转发数据;
  4. 把需要访问互联网的数据转发给 3号机。

2. 2号机:DNS 服务器

2号机位于服务器区:

text
192.168.1.2

它的作用是:

  1. 为内部域名提供解析,例如 www.dyzx.edu
  2. 将公网域名请求转发给外部 DNS,例如 223.5.5.5
  3. 向所有内部网段提供 DNS 服务。

3. 3号机:防火墙 + 出口网关

3号机连接两个主要方向:

接口所在网络作用
内网口192.168.1.3连接服务器区
外网口vmnet8 / NAT连接互联网

它的作用是:

  1. 内网访问互联网的出口;
  2. 负责 SNAT;
  3. 将私有地址转换成可访问互联网的地址;
  4. 在需要时可以配置 DNAT,把外部访问转发到内部服务器。

4. 4号机:Web + FTP 服务器

4号机位于服务器区:

text
192.168.1.4

它提供:

  1. Apache Web 服务;
  2. FTP 服务;
  3. 后续可扩展 MySQL 服务。

5. 7、8、9号机:客户端

客户端所在网段默认网关
7号机192.168.2.0/24192.168.2.1
8号机192.168.3.0/24192.168.3.1
9号机192.168.4.0/24192.168.4.1

它们通过 DHCP 获取地址,然后访问 DNS、Web、FTP 和互联网。


三、数据流转全过程一:客户端获取 DHCP 地址

以 7号机为例,7号机位于 192.168.2.0/24 子网。

1. DHCP Discover

7号机刚启动时还没有 IP 地址,会发送广播:

text
源地址:0.0.0.0
目标地址:255.255.255.255
内容:有没有 DHCP 服务器?

该广播只在 192.168.2.0/24 所在的 vmnet2 中传播。


2. 1号机收到 DHCP 请求

因为 1号机有一个接口在 vmnet2 中:

text
192.168.2.1

所以 1号机能收到 DHCP Discover。


3. DHCP Offer

1号机根据 /etc/dhcp/dhcpd.conf 中的配置,给 7号机提供一个地址,例如:

text
IP 地址:192.168.2.101
子网掩码:255.255.255.0
默认网关:192.168.2.1

如果是 8号机,则从:

text
192.168.3.101 - 192.168.3.254

中分配。

如果是 9号机,则从:

text
192.168.4.101 - 192.168.4.254

中分配。


4. DHCP Request

客户端选择这个地址后,再广播确认:

text
我请求使用这个 IP 地址。

5. DHCP ACK

1号机确认租约,客户端正式获得 IP。

最终 7号机获得:

text
IP:192.168.2.x
网关:192.168.2.1

至此,客户端具备了访问其他网络的基础。


四、数据流转全过程二:客户端访问 DNS 服务器

以 7号机访问 DNS 服务器 192.168.1.2 为例。

7号机当前位于:

text
192.168.2.0/24

DNS 服务器位于:

text
192.168.1.0/24

二者不在同一网段,必须经过网关转发。


1. 7号机判断目标地址不在本地网段

7号机想访问:

text
192.168.1.2

但自己的地址是:

text
192.168.2.x/24

所以它判断:

text
192.168.1.2 不在本地子网

于是把数据包交给默认网关:

text
192.168.2.1

也就是 1号机。


2. 数据从 7号机发给 1号机

数据流:

text
7号机  →  1号机 vmnet2 接口
192.168.2.x  →  192.168.2.1

此时 IP 数据包的目标仍然是:

text
192.168.1.2

网关只是帮它转发。


3. 1号机进行路由转发

1号机开启了:

bash
net.ipv4.ip_forward = 1

因此可以把数据包从 vmnet2 转发到 vmnet1。

数据流:

text
1号机 vmnet2 接口  →  1号机 vmnet1 接口  →  2号机
192.168.2.1       →  192.168.1.1       →  192.168.1.2

4. 2号机返回 DNS 响应

2号机收到请求后,返回给 7号机:

text
源地址:192.168.1.2
目标地址:192.168.2.x

2号机发现目标 192.168.2.x 不在本地网段,于是根据静态路由,把数据交给:

text
192.168.1.1

也就是 1号机。


5. 1号机把响应转回 7号机

返回路径:

text
2号机  →  1号机  →  7号机
192.168.1.2  →  192.168.1.1 / 192.168.2.1  →  192.168.2.x

最终 7号机完成对 DNS 服务器的访问。


五、数据流转全过程三:客户端访问内部 Web 网站

以 7号机访问:

text
http://www.dyzx.edu

为例。

这个过程包括两个阶段:

  1. 先解析域名;
  2. 再访问 Web 服务器。

第一阶段:DNS 解析

1. 7号机读取 DNS 配置

7号机的 /etc/resolv.conf 中写着:

text
nameserver 192.168.1.2

说明它要向 2号机请求解析。


2. 7号机向 2号机查询域名

请求路径:

text
7号机  →  1号机  →  2号机
192.168.2.x  →  192.168.2.1 / 192.168.1.1  →  192.168.1.2

查询内容:

text
www.dyzx.edu 对应哪个 IP?

3. 2号机返回解析结果

DNS 返回:

text
www.dyzx.edu = 192.168.1.4

返回路径:

text
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号机现在知道:

text
www.dyzx.edu = 192.168.1.4

于是访问:

text
192.168.1.4:80

由于目标不在 192.168.2.0/24 本地网段,所以先交给默认网关:

text
192.168.2.1

2. 1号机转发 HTTP 请求

数据路径:

text
7号机  →  1号机  →  4号机
192.168.2.x  →  192.168.2.1 / 192.168.1.1  →  192.168.1.4:80

3. 4号机 Apache 处理请求

4号机上的 httpd 服务监听:

text
80 端口

Apache 根据配置文件:

text
/etc/httpd/conf/httpd.conf

找到网站根目录:

text
/var/www/html

或修改后的:

text
/var/www/myweb

然后读取:

text
index.html

4. 4号机返回网页内容

返回路径:

text
4号机  →  1号机  →  7号机
192.168.1.4  →  192.168.1.1 / 192.168.2.1  →  192.168.2.x

最终 7号机执行:

bash
curl http://www.dyzx.edu

可以看到网页内容。


六、数据流转全过程四:客户端访问 FTP 服务器

以 7号机访问 4号机 FTP 为例。

FTP 服务器地址:

text
192.168.1.4

客户端地址:

text
192.168.2.x

1. FTP 登录请求

客户端执行:

bash
ftp 192.168.1.4

由于目标不在本地子网,数据先交给默认网关:

text
192.168.2.1

路径:

text
7号机  →  1号机  →  4号机
192.168.2.x  →  192.168.2.1 / 192.168.1.1  →  192.168.1.4

2. 4号机 vsftpd 响应

4号机上的 vsftpd 服务处理 FTP 登录请求。

如果是匿名用户:

text
anonymous

访问目录:

text
/var/ftp/dyzx_data

只允许下载,不允许上传。

如果是本地用户:

text
stu11

访问目录:

text
/var/www/myweb

用于维护 Web 站点内容。


3. FTP 数据返回

返回路径:

text
4号机  →  1号机  →  7号机
192.168.1.4  →  192.168.1.1 / 192.168.2.1  →  192.168.2.x

如果是上传文件,数据方向则是:

text
7号机  →  1号机  →  4号机的 /var/www/myweb

如果是下载文件,数据方向则是:

text
4号机的 /var/ftp/dyzx_data  →  1号机  →  7号机

七、数据流转全过程五:客户端访问互联网

以 7号机访问百度 IP 或域名为例。

客户端:

text
192.168.2.x

默认网关:

text
192.168.2.1

出口网关:

text
192.168.1.3

1. 7号机访问公网 IP

例如:

bash
ping 153.3.238.127

7号机发现目标公网 IP 不属于本地网段,于是发送给默认网关:

text
192.168.2.1

数据路径第一段:

text
7号机  →  1号机
192.168.2.x  →  192.168.2.1

2. 1号机转发给 3号机

1号机的默认路由指向:

text
192.168.1.3

也就是 3号机。

所以数据路径变成:

text
7号机  →  1号机  →  3号机
192.168.2.x  →  192.168.2.1 / 192.168.1.1  →  192.168.1.3

3. 3号机进行 SNAT

3号机收到来自内网的流量后,会通过 firewalld external/internal 区域和 NAT 规则进行 SNAT。

SNAT 前:

text
源地址:192.168.2.x
目标地址:153.3.238.127

SNAT 后:

text
源地址:3号机外网口地址
目标地址:153.3.238.127

这样互联网服务器看到的请求来源就是 3号机的外网地址,而不是私有地址 192.168.2.x


4. 数据进入互联网

路径:

text
7号机  →  1号机  →  3号机  →  Internet

具体为:

text
192.168.2.x

192.168.2.1

192.168.1.1

192.168.1.3

3号机外网口

Internet

5. 互联网服务器返回数据

公网服务器返回响应时,目标地址是:

text
3号机外网口地址

返回路径:

text
Internet  →  3号机

3号机根据 NAT 会话表,把目标地址还原成:

text
192.168.2.x

然后转发给 1号机。


6. 1号机转发回客户端

返回路径:

text
Internet  →  3号机  →  1号机  →  7号机

最终 7号机收到互联网响应。


八、数据流转全过程六:客户端访问公网域名

以 7号机访问:

bash
ping www.baidu.com

为例,这比访问公网 IP 多了 DNS 解析过程。


1. 先访问内部 DNS

7号机查询:

text
www.baidu.com 的 IP 是什么?

请求发给:

text
192.168.1.2

路径:

text
7号机  →  1号机  →  2号机

2. 2号机判断不是内部域名

2号机发现:

text
www.baidu.com

不是内部域名 dyzx.edu,于是根据 unbound 的转发配置:

text
forward-addr: 223.5.5.5

把请求转发给公网 DNS。


3. DNS 服务器访问公网 DNS

2号机要访问公网 DNS 223.5.5.5,它的默认路由指向 3号机:

text
2号机  →  3号机  →  Internet  →  223.5.5.5

路径:

text
192.168.1.2  →  192.168.1.3  →  外网

3号机对该流量进行 SNAT。


4. 公网 DNS 返回解析结果

公网 DNS 返回百度的 IP。

路径:

text
223.5.5.5  →  3号机  →  2号机

2号机再把结果返回给 7号机:

text
2号机  →  1号机  →  7号机

5. 7号机再访问百度 IP

获得百度 IP 后,7号机再发起真正的数据访问:

text
7号机  →  1号机  →  3号机  →  Internet

最终完成公网域名访问。


九、数据流转全过程七:外部访问内部服务器,DNAT 场景

实验拓扑图中 3号机防火墙旁边标有:

text
SNAT
DNAT

说明它不仅可以让内网访问外网,也可以将外部访问转发到内部服务器。

虽然实验指导中主要配置 SNAT,但从拓扑设计上看,DNAT 的数据流应是:


1. 外部用户访问 3号机外网口

例如外部用户访问:

text
3号机外网IP:80

2. 3号机进行 DNAT

3号机把目标地址转换成内部 Web 服务器:

DNAT 前:

text
源地址:外部用户IP
目标地址:3号机外网IP:80

DNAT 后:

text
源地址:外部用户IP
目标地址:192.168.1.4:80

3. 请求转发到 4号机

路径:

text
外部用户  →  3号机  →  4号机 Web 服务
Internet  →  防火墙  →  192.168.1.4:80

4. 4号机返回响应

响应路径:

text
4号机  →  3号机  →  外部用户

3号机会把内部服务器地址再转换回自己的外网地址,让外部用户认为自己访问的是 3号机外网地址。


5. DNAT 的意义

DNAT 用于:

  1. 发布内部 Web 服务;
  2. 发布内部 FTP 服务;
  3. 发布内部 DNS 服务;
  4. 让外部网络可以访问 DMZ 区服务器。

十、数据流转全过程八:Xshell 管理流量

实验中所有虚拟机都保留 vmnet5 网卡,用于 Xshell 远程连接。

这部分流量与业务网络分离。


1. 主机通过 vmnet5 连接虚拟机

路径:

text
Windows 主机  →  vmnet5  →  虚拟机 ens225

例如:

text
Windows Xshell  →  192.168.182.x

2. 管理流量不经过 1号机或 3号机

Xshell 管理流量一般不经过:

  1. 1号机软路由;
  2. 3号机出口防火墙;
  3. DHCP/DNS/Web/FTP 业务路径。

它是独立的管理通道。


3. 这样设计的好处

即使实验网络中的:

  1. 路由配错;
  2. DNS 配错;
  3. 防火墙阻断;
  4. DHCP 出问题;

仍然可以通过 vmnet5 使用 Xshell 进入虚拟机修复。


十一、完整数据流转总结图

1. 内部客户端访问服务器区

text
7/8/9号机

各自默认网关:1号机

1号机软路由转发

服务器区 vmnet1

2号机 DNS / 4号机 Web FTP / 6号机文件邮件服务

2. 内部客户端访问互联网

text
7/8/9号机

1号机软路由

3号机防火墙/出口网关

SNAT 地址转换

Internet

3. 内部客户端访问内部域名网站

text
客户端

查询 DNS:192.168.1.2

DNS 返回 www.dyzx.edu = 192.168.1.4

客户端访问 192.168.1.4:80

1号机转发

4号机 Apache 返回网页

4. 内部客户端访问公网域名

text
客户端

查询内部 DNS:192.168.1.2

内部 DNS 转发到 223.5.5.5

3号机 SNAT 出口访问互联网

公网 DNS 返回结果

客户端再访问公网 IP

1号机 → 3号机 → Internet

5. 外部访问内部服务器

text
外部用户

访问 3号机外网地址

3号机 DNAT

转发到 192.168.1.4 等内部服务器

内部服务器响应

3号机转换后返回外部用户

十二、最重要的一句话总结

该实验的数据流转核心是:

text
客户端子网的数据先进入 1号机软路由,
需要访问服务器区的数据由 1号机转发到 vmnet1,
需要访问互联网的数据先由 1号机转发到 3号机,
再由 3号机通过 SNAT 转换后进入 Internet;
DNS、Web、FTP 等服务都部署在服务器区,
客户端访问这些服务必须依赖路由、DNS、防火墙和服务本身共同正常。

如果老师问“这个拓扑的数据是怎么走的”,可以直接按下面这条主线回答:

text
客户端 → 默认网关1号机 → 服务器区或3号机出口 → 对应服务器/互联网 → 原路返回

基于 MIT 许可发布