第一步:安装 DHCP 服务器软件
你需要在你的服务器上安装 DHCP 服务器的软件包。

对于 Ubuntu/Debian 系统
使用 apt 包管理器进行安装:
sudo apt update sudo apt install isc-dhcp-server -y
对于 CentOS/RHEL/Fedora 系统
使用 yum 或 dnf 包管理器进行安装:
# 对于 CentOS/RHEL 7/8 sudo yum install dhcp-server -y # 对于 Fedora 或 CentOS/RHEL 8+ sudo dnf install dhcp-server -y
第二步:主配置文件 (dhcpd.conf)
DH服务器的核心配置文件是 /etc/dhcp/dhcpd.conf (在 Debian/Ubuntu 上) 或 /etc/dhcpd.conf (在较旧的 RHEL/CentOS 上),这是你需要花费最多时间的地方。
备份原始配置
在进行任何修改之前,最好先备份原始文件:

# Ubuntu/Debian sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak # RHEL/CentOS sudo cp /etc/dhcpd.conf /etc/dhcpd.conf.bak
编辑配置文件
使用你喜欢的文本编辑器(如 nano 或 vim)打开主配置文件:
sudo nano /etc/dhcp/dhcpd.conf
默认情况下,这个文件可能包含很多示例和注释,你可以将它们全部删除或注释掉(在行首加 ),然后粘贴以下基本配置模板。
基本配置模板
下面是一个清晰、可用的配置模板,请根据你的网络环境修改其中的参数。
# 全局配置选项
# 默认租约时间(客户端在未续租前可以使用的IP时间)
default-lease-time 600;
# 最大租约时间(客户端可以请求的最长IP使用时间)
max-lease-time 7200;
# 日志记录到 syslog
# log-facility local7;
# --- 网络段配置 ---
# 这里我们为 192.168.1.0/24 网络段配置DHCP服务
# 你可以根据需要添加多个 subnet 块来为不同网段服务
subnet 192.168.1.0 netmask 255.255.255.0 {
# 网关地址
option routers 192.168.1.1;
# DNS 服务器地址
# 你可以提供公共DNS(如 8.8.8.8)或你自己的内网DNS
option domain-name-servers 8.8.8.8, 1.1.1.1;
# 分配给客户端的IP地址范围
# 从 192.168.1.100 到 192.168.1.200
range 192.168.1.100 192.168.1.200;
# 排除的静态IP地址(这些地址不会被动态分配)
# 通常用于服务器、打印机等需要固定IP的设备
# host my-printer {
# hardware ethernet 00:11:22:33:44:55;
# fixed-address 192.168.1.10;
# }
}
配置参数解释:

subnet: 定义你要提供DHCP服务的网络段。netmask: 该网络的子网掩码。option routers: 指定客户端的默认网关。option domain-name-servers: 指定客户端使用的DNS服务器,可以设置多个,用逗号隔开。range: 定义可以动态分配的IP地址池。default-lease-time和max-lease-time: 控制IP地址租约的时间(秒)。host ... { ... }: (可选)为特定设备分配静态IP地址。hardware ethernet: 客户端的MAC地址。fixed-address: 要分配给该客户端的固定IP地址。
第三步:指定监听的网络接口
DHCP服务器需要知道应该在哪个网络接口上监听客户端的请求,这通常在配置文件中指定。
对于 Ubuntu/Debian 系统
编辑 /etc/default/isc-dhcp-server 文件:
sudo nano /etc/default/isc-dhcp-server
找到 INTERFACESv4 这一行,并修改为你服务器上连接到客户端网络的接口名称(eth0, ens33, ens160 等)。
# 将 INTERFACESv4="" 修改为: INTERFACESv4="eth0"
对于 CentOS/RHEL 系统
编辑 /etc/sysconfig/dhcpd 文件:
sudo nano /etc/sysconfig/dhcpd
找到 DHCPDARGS 这一行,并指定接口名称。
# 将 DHCPDARGS="" 修改为: DHCPDARGS="eth0"
或者,你也可以让它在所有可用的接口上监听(不推荐,除非你有特定需求):
DHCPDARGS="eth0"
第四步:启动并启用 DHCP 服务
配置完成后,启动服务并设置为开机自启。
对于 Ubuntu/Debian (使用 systemd)
# 启动服务 sudo systemctl start isc-dhcp-server # 设置开机自启 sudo systemctl enable isc-dhcp-server # 检查服务状态 sudo systemctl status isc-dhcp-server
对于 CentOS/RHEL (使用 systemd)
# 启动服务 sudo systemctl start dhcpd # 设置开机自启 sudo systemctl enable dhcpd # 检查服务状态 sudo systemctl status dhcpd
注意: 在 RHEL/CentOS 上,如果服务器有多个网络接口,你可能需要创建一个 dhcpd.service 的配置文件来明确指定它应该在哪个接口上运行,或者使用 DHCPDARGS 变量。
第五步:检查配置和日志
如果服务启动失败,首先检查配置文件是否有语法错误。
检查配置语法
-
Ubuntu/Debian:
sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
如果配置正确,会输出
Configuration file is OK。 -
RHEL/CentOS:
sudo dhcpd -t -cf /etc/dhcpd.conf
查看日志
日志是排查问题的最佳工具。
-
Ubuntu/Debian: 日志通常记录在
/var/log/syslog中,你可以使用grep来过滤 DHCP 相关的日志:grep dhcpd /var/log/syslog
-
RHEL/CentOS: 日志通常记录在
/var/log/messages中:grep dhcpd /var/log/messages
第六步:客户端测试
将一台客户端电脑(如你的笔记本或另一台虚拟机)的IP地址设置为“自动获取IP地址(DHCP)”,使用以下命令检查是否成功从你的DHCP服务器获取了地址:
- Windows: 打开命令提示符,运行
ipconfig /renew,然后查看ipconfig的结果。 - Linux: 运行
sudo dhclient eth0(替换为你的接口名),然后运行ip addr show。
你应该能看到客户端从你配置的地址池(168.1.100 到 200)中获取了一个IP地址,并且网关和DNS也正确配置。
常见问题与排错
-
服务启动失败,提示 "No subnet declaration for..."
- 原因:
dhcpd.conf文件中没有为你服务器所在网络定义subnet块,或者服务器自身没有IP地址在那个网段上。 - 解决: 确保你的服务器有一个IP地址在你要提供DHCP服务的网段内,
dhcpd.conf中有对应的subnet配置。
- 原因:
-
客户端无法获取IP地址
- 原因:
- 防火墙阻止了DHCP流量(UDP端口67和68)。
- 网线或网络连接问题。
- 另一个DHCP服务器已经在网络上运行(你的家用路由器)。
- IP地址池中的所有地址都已分配完毕。
- 解决:
- 临时关闭防火墙进行测试:
sudo ufw disable(Ubuntu) 或sudo systemctl stop firewalld(CentOS)。 - 使用 Wireshark 等工具在服务器上抓包,查看是否收到DHCP Discover请求。
- 检查你的家用路由器是否开启了DHCP功能,如果开启了,请关闭它,因为网络上只能有一个DHCP服务器。
- 临时关闭防火墙进行测试:
- 原因:
-
客户端获取到错误的IP/网关/DNS
- 原因:
dhcpd.conf中的option routers或option domain-name-servers配置错误。 - 解决: 仔细检查并修正配置文件中的这些选项,然后重启DHCP服务。
- 原因:
通过以上步骤,你应该就能成功地在你的 Linux 服务器上配置一个功能正常的 DHCP 服务器了。
