我们将使用最流行的 DHCP 服务器软件 ISC DHCP Server。

第一步:准备工作
在开始之前,请确保你具备以下条件:
- 一台 Linux 服务器:可以是物理机或虚拟机,并且拥有一个静态的 IP 地址。这一点至关重要,因为 DHCP 服务器自身必须是网络中一个可访问的、固定的服务点。
- 网络管理员权限:需要
sudo或root权限来安装软件和修改配置文件。 - 网络环境信息:你需要规划好以下参数:
- 网络地址:
168.1.0 - 子网掩码:
255.255.0 - 默认网关:
168.1.1 - DNS 服务器:
8.8.8和1.1.1 - 要分配的 IP 地址范围:
168.1.100到168.1.200
- 网络地址:
第二步:安装 DHCP 服务器软件
根据你的 Linux 发行版,选择对应的命令。
对于 Ubuntu / Debian 系统
# 更新软件包列表 sudo apt update # 安装 dhcpd (ISC DHCP Server) sudo apt install isc-dhcp-server
对于 CentOS / RHEL / Rocky Linux / AlmaLinux 系统
# 安装 dhcp 服务器软件包 sudo yum install dhcp -y # 或者使用 dnf (对于较新版本) # sudo dnf install dhcp -y
安装完成后,服务通常会自动启动,但我们先不急着配置,而是先修改其核心配置文件。
第三步:配置 DHCP 服务器
这是最关键的一步,我们需要编辑 DHCP 的主配置文件。

定位配置文件
- Ubuntu/Debian:
/etc/dhcp/dhcpd.conf - CentOS/RHEL:
/etc/dhcp/dhcpd.conf
在 CentOS/RHEL 系统上,初始的 /etc/dhcp/dhcpd.conf 可能只是一个示例文件或包含 include 语句,你需要创建或编辑它。
备份原始配置
sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
编辑配置文件
使用你喜欢的文本编辑器(如 nano, vim)打开配置文件。
sudo nano /etc/dhcp/dhcpd.conf
我们将根据你的网络环境,编写一个标准的配置。将文件中的所有内容删除或注释掉(行首加 ),然后粘贴以下内容,并根据你的实际情况进行修改。
# dhcpd.conf
# 默认租约时间,单位为秒,客户端在此时间内可以续租。
default-lease-time 600;
# 最大租约时间,单位为秒,超过此时间,客户端必须重新获取 IP。
max-lease-time 7200;
# 声明一个 DNS 服务器,会提供给所有客户端。
# 可以添加多个 option domain-name-server 行。
option domain-name-servers 8.8.8.8, 1.1.1.1;
# 声明一个默认域名,可选。
option domain-name "localdomain";
# 声明一个 NTP 服务器,可选。
option ntp-servers 192.168.1.1;
# 声明一个默认网关,会提供给所有客户端。
option routers 192.168.1.1;
# 这是一个非常重要的声明,告诉 DHCP 服务器哪个网络接口(网卡)来监听客户端请求。
# 请务必将 'eth0' 替换为你服务器上实际用于提供 DHCP 服务的网卡名称。
# 你可以使用 'ip a' 或 'ifconfig' 命令来查看你的网卡名称。
# 常见的有 eth0, ens33, enp0s3 等。
authoritative;
# 定义一个网络段(一个子网)
# subnet <网络地址> netmask <子网掩码>
subnet 192.168.1.0 netmask 255.255.255.0 {
# 定义这个子网内可以分配的 IP 地址范围
# range <起始IP> <结束IP>
range 192.168.1.100 192.168.1.200;
# 为该子网指定默认网关(如果上面全局的 routers 不适用)
# option routers 192.168.1.1;
# 为该子网指定 DNS 服务器(如果上面全局的不适用)
# option domain-name-servers 192.168.1.1, 8.8.8.8;
}
配置详解:

default-lease-time和max-lease-time:控制 IP 地址租借的有效期。option ...:这些是 DHCP 选项,用于向客户端提供额外的网络配置信息,如 DNS、网关等。authoritative:声明此 DHCP 服务器是“权威的”,如果客户端从其他 DHCP 服务器(例如你的家用路由器)收到一个无效的 IP,它会强制客户端释放该 IP 并重新请求一个有效的。强烈建议加上。subnet:定义一个具体的网络段。range:定义这个网络段内可供动态分配的 IP 地址池。
第四步:指定 DHCP 服务器监听的网络接口
这一步在 Ubuntu/Debian 中尤为重要,在较新的 CentOS/RHEL 版本中也可能需要。
对于 Ubuntu / Debian 系统
编辑 /etc/default/isc-dhcp-server 文件:
sudo nano /etc/default/isc-dhcp-server
找到 INTERFACESv4="" 这一行,将其修改为你的服务器网卡名称:
# 将 eth0 替换为你的实际网卡名 INTERFACESv4="eth0"
对于 CentOS / RHEL 系统
dhcpd 会自动从 /etc/dhcp/dhcpd.conf 的 shared-network-name 或 subnet 声明中推断出接口,但如果遇到问题,可以在 /etc/sysconfig/dhcpd 文件中手动指定 DHCPDARGS。
sudo nano /etc/sysconfig/dhcpd
确保其中包含你的网卡接口,
# 指定 dhcpd 服务只在 eth0 接口上运行 DHCPDARGS="eth0"
第五步:启动并启用 DHCP 服务
配置已经完成,让我们启动服务并设置为开机自启。
对于 Ubuntu / Debian (使用 systemd)
# 启动 dhcpd 服务 sudo systemctl start isc-dhcp-server # 设置服务开机自启 sudo systemctl enable isc-dhcp-server # 查看服务状态,确保没有错误 sudo systemctl status isc-dhcp-server
对于 CentOS / RHEL (使用 systemd)
# 启动 dhcpd 服务 sudo systemctl start dhcpd # 设置服务开机自启 sudo systemctl enable dhcpd # 查看服务状态 sudo systemctl status dhcpd
第六步:检查和排错
如果服务启动失败,或者客户端无法获取到 IP,请按以下步骤排查:
-
检查日志文件:这是最直接的排错方法。
- Ubuntu/Debian:
tail -f /var/log/syslog | grep dhcpd - CentOS/RHEL:
tail -f /var/log/messages | grep dhcpd或journalctl -u dhcpd -f
日志中通常会给出明确的错误信息,
No subnet declaration for eth0:这通常意味着你没有正确配置subnet块,或者没有在/etc/default/isc-dhcp-server(Ubuntu) 或/etc/sysconfig/dhcpd(CentOS) 中指定正确的网卡。Unable to start server: 检查配置文件语法是否有误,可以运行sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf来测试配置文件语法。
- Ubuntu/Debian:
-
检查防火墙:如果服务器启用了防火墙(如
ufw或firewalld),DHCP 使用的 UDP 端口67(服务器端) 和68(客户端) 可能被阻止。- Ubuntu (ufw):
sudo ufw allow 67/udp sudo ufw allow 68/udp
- CentOS (firewalld):
sudo firewall-cmd --permanent --add-port=67/udp sudo firewall-cmd --permanent --add-port=68/udp sudo firewall-cmd --reload
- Ubuntu (ufw):
-
检查 IP 地址冲突:确保你分配给服务器的静态 IP 和 DHCP 地址池没有冲突。
-
客户端测试:在你的局域网内,将另一台电脑(Windows 或 Linux)的 IP 地址设置为“自动获取 IP 地址 (DHCP)”,然后使用
ipconfig /renew(Windows) 或dhclient(Linux) 命令,观察是否能成功获取到 IP。
第七步:管理 DHCP 地址租约
有时你可能需要查看当前分配了哪些 IP,或者手动释放一个租约。
-
查看租约文件:
- Ubuntu/Debian:
/var/lib/dhcp/dhcpd.leases - CentOS/RHEL:
/var/lib/dhcpd/dhcpd.leases
这个文件记录了所有客户端的租约信息,包括 MAC 地址、分配的 IP、租约开始和结束时间等,你可以直接用
cat或less查看。 - Ubuntu/Debian:
-
手动清除租约(危险操作): 清除租约文件会让所有客户端失去 IP 连接,通常只在紧急情况下使用。
# 停止服务 sudo systemctl stop isc-dhcp-server # 或 dhcpd # 备份并清空租约文件 sudo cp /var/lib/dhcp/dhcpd.leases /var/lib/dhcp/dhcpd.leases.bak sudo > /var/lib/dhcp/dhcpd.leases # 重新启动服务 sudo systemctl start isc-dhcp-server # 或 dhcpd
搭建一个 DHCP 服务器的核心步骤可以概括为:
- 安装软件 (
isc-dhcp-server/dhcp)。 - 编辑配置文件 (
/etc/dhcp/dhcpd.conf),定义网络范围、租期、DNS、网关等关键信息。 - 指定监听接口 (
/etc/default/isc-dhcp-server或/etc/sysconfig/dhcpd)。 - 启动并启用服务 (
systemctl start/enable ...)。 - 检查日志和防火墙,确保服务正常运行。
遵循以上步骤,你应该就能成功地在你的 Linux 服务器上搭建起一个稳定可靠的 DHCP 服务器了。
