摘要
本指南将引导您在 CentOS 系统上安装、配置和启动一个 DHCP 服务器,我们将涵盖:

- 环境准备:安装软件包和配置防火墙。
- 核心配置:编辑
/etc/dhcp/dhcpd.conf文件,定义 IP 地址池、网关、DNS 等关键信息。 - 启动服务:启用并启动 DHCP 服务。
- 客户端测试:从另一台设备获取 IP 地址以验证配置。
- 排错与进阶:查看日志文件和配置高级选项。
第一步:环境准备
在开始之前,请确保您已经:
- 一台安装好的 CentOS 7/8/9 系统。
- 具有管理员 (
root) 权限。 - 明确规划好要分配的 IP 地址范围、子网掩码、网关和 DNS 服务器地址。
安装 DHCP 服务器软件包
打开终端,使用 yum (CentOS 7/8) 或 dnf (CentOS 8/9) 包管理器安装 dhcp 包。
# 对于 CentOS 7 和 8 sudo yum install dhcp -y # 对于 CentOS 9 sudo dnf install dhcp -y
安装完成后,DHCP 服务的主配置文件 /etc/dhcp/dhcpd.conf 可能是一个示例文件或一个空文件,我们需要对其进行编辑。
配置防火墙
DHCP 服务使用 UDP 端口 67 (服务器) 和 68 (客户端),为了能让客户端正常获取 IP,您需要防火墙允许这些端口的流量。

# 添加 dhcp 服务到防火墙规则集 (推荐) sudo firewall-cmd --permanent --add-service=dhcp # 重新加载防火墙使规则生效 sudo firewall-cmd --reload
或者,如果您想直接开放端口:
# 开放 UDP 67 和 68 端口 sudo firewall-cmd --permanent --add-port=67/udp sudo firewall-cmd --permanent --add-port=68/udp # 重新加载防火墙 sudo firewall-cmd --reload
第二步:核心配置 (/etc/dhcp/dhcpd.conf)
这是整个配置过程的核心,我们需要编辑 /etc/dhcp/dhcpd.conf 文件。
sudo vi /etc/dhcp/dhcpd.conf
注意:如果该文件内容很多,可以先清空它,然后从下面开始添加配置。
一个典型的配置文件结构如下,请根据您的网络环境修改 subnet 部分的值。
# /etc/dhcp/dhcpd.conf
# 设置默认租约时间(单位:秒)
default-lease-time 600;
# 设置最大租约时间(单位:秒)
max-lease-time 7200;
# 日志记录配置(可选,但强烈推荐)
# 将日志发送到系统日志,并记录级别为 'info' 和 'notice'
log-facility local7;
# 定义一个子网,为这个子网内的客户端提供服务
subnet 192.168.1.0 netmask 255.255.255.0 {
# --- 关键网络参数 ---
# 分配给客户端的网关地址
option routers 192.168.1.1;
# 分配给客户端的 DNS 服务器地址
# 可以是您的路由器地址或公共 DNS,如 8.8.8.8
option domain-name-servers 8.8.8.8, 1.1.1.1;
# --- IP 地址池 ---
# 定义可分配的 IP 地址范围
# 从 192.168.1.100 到 192.168.1.200
# 排除的地址:192.168.1.1 到 192.168.1.99 (通常用于静态分配的服务器)
range 192.168.1.100 192.168.1.200;
# --- 可选高级配置 ---
# 为特定客户端分配固定 IP 地址(通过客户端的 MAC 地址)
# host my-printer {
# hardware ethernet 00:1A:2B:3C:4D:5E;
# fixed-address 192.168.1.10;
# }
# 为特定客户端分配特定域名和 DNS
# host my-server {
# hardware ethernet 00:AB:CD:EF:12:34;
# fixed-address 192.168.1.20;
# option domain-name-servers 192.168.1.20;
# }
}
配置参数详解
default-lease-time: 客户端在没有请求特定租期的情况下,获得的默认租约时长(秒)。max-lease-time: 客户端可以请求的最长租约时长(秒)。log-facility: 指定 DHCP 服务的日志输出位置。local7是一个常见的日志设施,日志通常会写入/var/log/messages或/var/log/secure。subnet: 定义一个 IP 子网,您必须提供netmask。option routers: 指定客户端的默认网关。option domain-name-servers: 指定客户端的 DNS 服务器,可以指定多个,用逗号隔开。range: 定义 DHCP 服务器可以动态分配的 IP 地址池。host: 块用于为特定客户端(通过其 MAC 地址hardware ethernet)分配一个固定的 IP 地址(fixed-address)。
第三步:启动和启用 DHCP 服务
配置文件保存后,现在可以启动 DHCP 服务了。
启动服务
# 启动 dhcpd 服务 sudo systemctl start dhcpd
如果这是您第一次启动,并且服务器有多个网络接口,系统可能会报错,因为它不知道应该在哪个接口上监听,我们需要指定主网卡。
# 假设您的服务器主网卡是 ens33 sudo systemctl start dhcpd --no-block -c DHCPDARGS=ens33
或者,更推荐的方法是修改服务配置文件:
sudo vi /etc/sysconfig/dhcpd
在文件中添加或修改一行:
DHCPDARGS=ens33 # 将 ens33 替换为您的主网卡名称
然后再次尝试启动。
设置开机自启
为了让 DHCP 服务在系统重启后自动启动,请执行:
sudo systemctl enable dhcpd
检查服务状态
检查服务是否正在运行并查看启动状态。
# 查看当前运行状态 sudo systemctl status dhcpd # 查看启动状态 sudo systemctl is-enabled dhcpd
如果服务状态正常,您应该会看到绿色的 active (running) 字样。
第四步:客户端测试
这是验证配置是否成功的最后一步。
- 将另一台设备(如笔记本电脑、手机或另一台虚拟机)连接到与 DHCP 服务器相同的局域网中。
- 将该设备的网络设置为“自动获取 IP 地址”(DHCP)。
- 在该设备上,通过命令行查看获取到的 IP 信息:
- 在 Windows 上: 打开命令提示符,输入
ipconfig。 - 在 Linux/macOS 上: 打开终端,输入
ip a或ifconfig。
- 在 Windows 上: 打开命令提示符,输入
您应该能看到该设备从您配置的地址池(168.1.100 到 200)中获取到了一个 IP 地址,网关和 DNS 也与您在 dhcpd.conf 中设置的一致。
第五步:排错与进阶
查看日志文件
如果客户端无法获取 IP,日志是您最好的朋友。
# 实时查看 DHCP 服务的日志 sudo tail -f /var/log/messages # 或者根据您在 dhcpd.conf 中设置的 log-facility 来查看 sudo tail -f /var/log/secure | grep dhcpd
常见的错误信息包括:
No subnet declaration for ...: 您的subnet块配置不正确或缺失,或者network参数与接口 IP 不匹配。No free leases on ...: 地址池中的所有 IP 地址都已被分配出去。Permission denied: SELinux 或防火墙阻止了服务。
SELinux 问题
如果遇到权限问题,可以临时禁用 SELinux 进行测试(不推荐在生产环境长期使用):
# 临时禁用(重启后恢复) sudo setenforce 0 # 永久禁用(需要重启) sudo vi /etc/selinux/config # 将 SELINUX=enforcing 改为 SELINUX=disabled
如果禁用 SELinux 后问题解决,说明是 SELinux 策略导致的,您可以尝试安装相应的策略模块,或者调整 SELinux 布尔值。
多网卡配置
如果服务器有多个网卡,并且您只想让 DHCP 服务在其中一个上监听,请务必在 /etc/sysconfig/dhcpd 文件中指定 DHCPDARGS,如第三步所示。
备份配置
在修改配置前,养成备份的好习惯。
sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
通过以上步骤,您应该已经成功地在 CentOS 服务器上搭建了一个功能完备的 DHCP 服务器,您可以随时通过编辑 /etc/dhcp/dhcpd.conf 文件来调整 IP 地址池、租期或添加固定 IP 映射,修改后只需重启 dhcpd 服务即可使新配置生效。
sudo systemctl restart dhcpd
