DHCP (Dynamic Host Configuration Protocol) 动态主机配置协议,用于自动为网络中的客户端分配 IP 地址、子网掩码、网关、DNS 等网络参数,在 Linux 上,最常用的 DHCP 服务器软件是 isc-dhcp-server (ISC Internet Systems Consortium DHCP Server)。

本指南将分为以下几个部分:
- 准备工作
- 安装 DHCP 服务器
- 基本配置
- 启动与管理服务
- 客户端测试
- 高级配置(可选)
- 常见问题排查
准备工作
在开始之前,请确保你已具备以下条件:
- 一台运行 Linux 的服务器(推荐使用 Ubuntu Server 或 CentOS/RHEL Server)。
- 服务器拥有
sudo或root权限。 - 明确你的网络规划,特别是:
- 分配的网段:
168.1.0/24。 - 路由器/网关地址:
168.1.1。 - DNS 服务器地址:
8.8.8和1.1.1或你的内部 DNS 服务器。 - 要分配的 IP 地址范围:例如从
168.1.100到168.1.200。 - 服务器自身的静态 IP 地址:确保服务器本身有一个固定的 IP,
168.1.10。
- 分配的网段:
安装 DHCP 服务器
根据你的 Linux 发行版选择对应的命令。
对于 Ubuntu/Debian 系统
# 更新软件包列表 sudo apt update # 安装 isc-dhcp-server sudo apt install isc-dhcp-server
安装过程中,系统可能会提示你选择一个网络接口来监听 DHCP 请求,由于我们稍后会手动配置,这里可以直接按 Esc 键跳过,选择“不配置”。

对于 CentOS/RHEL/Fedora 系统
# 首先确保 EPEL 仓库已启用(对于 RHEL/CentOS 7/8) # sudo yum install epel-release # 对于 CentOS 7/8 # sudo dnf install epel-release # 对于 Fedora / CentOS 8/9 # 安装 dhcp-server 软件包 # 对于 CentOS 7/RHEL 7 使用 yum sudo yum install dhcp-server # 对于 CentOS 8/RHEL 8/Fedora 使用 dnf # sudo dnf install dhcp-server
安装完成后,dhcpd 的配置文件 /etc/dhcp/dhcpd.conf 是一个示例文件,我们需要清空它并从头开始配置。
基本配置
这是最核心的一步,我们需要编辑主配置文件 /etc/dhcp/dhcpd.conf。
步骤 1:备份原配置文件
sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
步骤 2:清空并编辑配置文件
使用你喜欢的文本编辑器(如 nano 或 vim)打开并清空 /etc/dhcp/dhcpd.conf。
sudo nano /etc/dhcp/dhcpd.conf
步骤 3:写入基本配置
粘贴到文件中,并根据你的网络规划修改相关参数。

# 根据你的网络修改以下参数
# 声明这是一个 DHCP v4 服务器
ddns-update-style none;
# 默认租约时间(秒),客户端在租约过半后会尝试续租
default-lease-time 600;
# 最大租约时间(秒),客户端租约的最大时长
max-lease-time 7200;
# 在日志中显示客户端的主机名
option domain-name-servers 8.8.8.8, 1.1.1.1; # 设置 DNS 服务器
# 声明要提供网络信息的网段
subnet 192.168.1.0 netmask 255.255.255.0 {
# 网络地址
range 192.168.1.100 192.168.1.200; # 分配的 IP 地址池
# 路由器/网关地址
option routers 192.168.1.1;
# 广播地址
option broadcast-address 192.168.1.255;
# DNS 域名 (可选)
option domain-name "local.lan";
}
配置解释:
ddns-update-style none;: 禁用动态 DNS 更新,除非你有专门的 DNS 服务器(如 BIND)与之配合,否则保持此设置。default-lease-time和max-lease-time: 控制客户端 IP 地址的租期。option domain-name-servers: 指定客户端应使用的 DNS 服务器。subnet ... { ... }: 定义一个子网配置块。range ...;: 定义 DHCP 可以分配的 IP 地址范围。option routers ...;: 指定客户端的默认网关。option broadcast-address ...;: 指定子网的广播地址。
重要提示: 如果你的服务器有多个网络接口,并且你只想让它在某个特定的接口上提供 DHCP 服务,你需要编辑 /etc/default/isc-dhcp-server (Ubuntu/Debian) 或 /etc/sysconfig/dhcpd (CentOS/RHEL) 文件。
-
Ubuntu/Debian:
sudo nano /etc/default/isc-dhcp-server
找到
INTERFACESv4=""这一行,修改为你的接口名,INTERFACESv4="eth0"或INTERFACESv4="ens33"。 -
CentOS/RHEL:
sudo nano /etc/sysconfig/dhcpd
找到
DHCPDARGS=""这一行,修改为DHCPDARGS="eth0"或DHCPDARGS="ens33"。
启动与管理服务
配置完成后,现在可以启动 DHCP 服务了。
启动服务
-
Ubuntu/Debian (使用 systemd):
sudo systemctl start isc-dhcp-server
-
CentOS/RHEL (使用 systemd):
sudo systemctl start dhcpd
设置开机自启
-
Ubuntu/Debian:
sudo systemctl enable isc-dhcp-server
-
CentOS/RHEL:
sudo systemctl enable dhcpd
检查服务状态
# Ubuntu/Debian sudo systemctl status isc-dhcp-server # CentOS/RHEL sudo systemctl status dhcpd
如果看到 active (running),则表示服务已成功启动,如果启动失败,请检查 /var/log/syslog (Ubuntu) 或 /var/log/messages (CentOS) 中的错误信息。
客户端测试
你可以将另一台设备(如笔记本电脑或另一台虚拟机)连接到同一网络,并设置为“自动获取 IP 地址”。
在客户端上,打开命令行,使用以下命令检查是否成功获取到 IP:
在 Windows 上
打开命令提示符,运行:
ipconfig /renew ipconfig
查看是否有从 DHCP 服务器获取到的 IP 地址、子网掩码、默认网关和 DNS。
在 Linux/macOS 上
# 使用 dhclient (如果系统使用它) sudo dhclient -r # 释放当前 IP sudo dhclient # 重新获取 IP # 然后查看 IP 配置 ip addr show
如果客户端成功获取到了你在 dhcpd.conf 中配置的 IP 地址段(168.1.1xx),那么恭喜你,DHCP 服务器已经正常工作了!
高级配置(可选)
为特定设备分配固定 IP (静态租约)
如果你希望某个设备(如打印机、服务器)总是获得同一个固定的 IP 地址,你可以使用 host 声明。
在 /etc/dhcp/dhcpd.conf 文件中,subnet 声明的后面添加以下内容:
# 为特定 MAC 地址的设备分配固定 IP
host printer-server {
hardware ethernet 00:0A:95:9D:68:16; # 设备的 MAC 地址
fixed-address 192.168.1.50; # 为其分配的固定 IP
}
将 hardware ethernet 替换为你设备的实际 MAC 地址。
查看租约信息
DHCP 服务器会维护一个租约数据库,你可以查看它来了解当前分配的 IP 地址。
-
Ubuntu/Debian:
sudo cat /var/lib/dhcp/dhcpd.leases
-
CentOS/RHEL:
sudo cat /var/lib/dhcpd/dhcpd.leases
这个文件会显示每个客户端的 MAC 地址、获取的 IP、租约开始和结束时间等信息。
常见问题排查
-
客户端无法获取 IP 地址
- 检查服务状态:确认
isc-dhcp-server或dhcpd服务正在运行。 - 检查防火墙:确保服务器上的防火墙没有阻止 DHCP 流量,DHCP 使用 UDP 端口
67(服务器) 和68(客户端)。- UFW (Ubuntu):
sudo ufw allow 67/udp - Firewalld (CentOS):
sudo firewall-cmd --permanent --add-service=dhcp && sudo firewall-cmd --reload
- UFW (Ubuntu):
- 检查网络接口配置:确认
/etc/default/isc-dhcp-server或/etc/sysconfig/dhcpd中指定的接口是正确的,并且该接口已启动。 - 检查日志:这是最重要的步骤!
- Ubuntu:
sudo tail -f /var/log/syslog | grep dhcpd - CentOS:
sudo tail -f /var/log/messages | grep dhcpd查看日志中是否有错误信息,如No subnet declaration for...(通常表示subnet配置错误) 或Unable to create listen socket for...(表示接口问题)。
- Ubuntu:
- 检查服务状态:确认
-
客户端获取的 IP 不在设定的范围内
- 检查
dhcpd.conf文件中的range声明是否正确无误。
- 检查
-
客户端获取的 IP 后很快就丢失了
- 检查
default-lease-time和max-lease-time的值是否设置得过小。 - 检查客户端是否因为无法联系到 DHCP 服务器而导致租约续约失败。
- 检查
希望这份详细的指南能帮助你成功搭建 Linux DHCP 服务器!
