第一部分:基础概念
在开始配置前,先了解几个核心概念:

- DHCP (Dynamic Host Configuration Protocol):动态主机配置协议,它是一种网络协议,用于自动分配 IP 地址、子网掩码、网关、DNS 服务器等网络参数给网络中的客户端。
- 作用域:一个 IP 地址池,DHCP 服务器从这个池中为客户端分配地址。
- 租约:客户端从 DHCP 服务器获得的 IP 地址及其相关配置信息都有一个有效期(租约时间)。
- 排除地址:在作用域中,你需要为一些需要固定 IP 的设备(如服务器、打印机)保留一些 IP 地址,不参与动态分配,这些地址就是“排除”的地址。
- 保留地址:将某个设备的 MAC 地址与一个固定的 IP 地址绑定,确保该设备每次都能获得相同的 IP 地址。
第二部分:安装 DHCP 服务器
我们以 isc-dhcp-server(Debian/Ubuntu)和 dhcp(CentOS/RHEL)为例。
对于 Ubuntu/Debian 系统
-
更新软件包列表:
sudo apt update
-
安装
isc-dhcp-server:sudo apt install -y isc-dhcp-server
安装完成后,服务通常会自动启动。
(图片来源网络,侵删)
对于 CentOS/RHEL/Fedora 系统
-
安装
dhcp包:sudo yum install -y dhcp # 或者对于 dnf 系统 (如 Fedora, CentOS 8+) # sudo dnf install -y dhcp
-
复制并编辑配置文件模板(如果不存在):
sudo cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
第三部分:配置 DHCP 服务器
这是最核心的一步,我们将主要配置文件 /etc/dhcp/dhcpd.conf。
备份原始配置文件
在进行任何修改前,请务必备份原始文件。

# Ubuntu/Debian sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak # CentOS/RHEL sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
编辑主配置文件
使用你喜欢的文本编辑器(如 nano, vim)打开配置文件。
sudo nano /etc/dhcp/dhcpd.conf
默认情况下,该文件可能包含大量注释和示例,我们可以清空它,然后从头开始编写自己的配置,或者在其基础上修改,这里我们从头开始写一个清晰的示例。
一个完整的配置示例
以下是一个典型的家庭或小型办公室网络配置示例,请根据你的网络环境修改相关参数(如 subnet, range, option routers 等)。
# 默认租约时间(秒),客户端在未续租前可使用该地址的时间
default-lease-time 600;
# 最大租约时间(秒),客户端可申请的最长租用时间
max-lease-time 7200;
# 日志记录配置(可选,但推荐)
# 将 dhcpd 的日志发送到 syslog 的 'daemon' 设施
log-facility local7;
# --- 定义一个作用域 ---
# 假设你的网络是 192.168.1.0/24
# DHCP 服务器监听的网卡是 eth0 (请根据实际情况修改)
# 在 /etc/default/isc-dhcp-server (Ubuntu) 或 /etc/sysconfig/dhcpd (CentOS) 中指定
subnet 192.168.1.0 netmask 255.255.255.0 {
# 分配给客户端的 IP 地址池
# 从 192.168.1.100 到 192.168.1.200
range 192.168.1.100 192.168.1.200;
# 排除的 IP 地址,不参与动态分配
# 通常用于需要固定 IP 的服务器、路由器等
# 排除 192.168.1.1 到 192.168.1.99
# 注意:这里的范围要与你的路由器/网关地址一致
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
# DNS 服务器地址
# 通常是你路由器的地址或公共 DNS,如 8.8.8.8
option domain-name-servers 8.8.8.8, 1.1.1.1;
# 广告域(可选)
option domain-name "localdomain";
# 为特定客户端保留 IP 地址(可选)
# host my-printer {
# hardware ethernet 00:1A:2B:3C:4D:5E; # 打印机的 MAC 地址
# fixed-address 192.168.1.10; # 为其保留的 IP 地址
# }
}
配置详解:
subnet ... { ... }:定义一个 IP 子网及其配置。range ... ...:定义动态 IP 地址池的范围。option routers ...:指定客户端的默认网关。option subnet-mask ...:指定子网掩码。option domain-name-servers ...:指定客户端的 DNS 服务器,可以指定多个。host ... { ... }:为单个主机保留 IP 地址。hardware ethernet是客户端的 MAC 地址(小写,无冒号或带冒号均可),fixed-address是要分配给它的固定 IP。
第四部分:指定 DHCP 服务器监听的网卡
DHCP 服务器需要知道在哪个网络接口上监听客户端的请求。
对于 Ubuntu/Debian 系统
编辑文件 /etc/default/isc-dhcp-server:
sudo nano /etc/default/isc-dhcp-server
找到 INTERFACESv4 这一行,取消注释并修改为你希望 DHCP 服务器监听的网卡名称(如 eth0, ens33, ens160)。
# 默认是注释掉的 # INTERFACESv4="" # 修改为你的网卡名称,ens33 INTERFACESv4="ens33"
对于 CentOS/RHEL 系统
编辑文件 /etc/sysconfig/dhcpd:
sudo nano /etc/sysconfig/dhcpd
找到 DHCPDARGS 这一行,修改为你的网卡名称。
# 默认可能是 -q 或为空 # DHCPDARGS="-q" # 修改为你的网卡名称,ens33 # 如果要监听所有接口,可以使用 DHCPDARGS="" # 如果要指定特定接口,使用 DHCPDARGS=ens33 DHCPDARGS=ens33
第五部分:启动并启用 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
第六部分:验证配置
-
检查服务状态: 确保
active (running)。 -
查看日志: 查看日志是排查问题的最佳方式。
# Ubuntu/Debian tail -f /var/log/syslog | grep dhcpd # CentOS/RHEL tail -f /var/log/messages | grep dhcpd
或者使用
journalctl:journalctl -u isc-dhcp-server.service -f
-
在客户端上测试: 将一台客户端(如你的电脑或手机)的 IP 地址设置为“自动获取(DHCP)”,然后检查其网络配置,你应该能看到它从你的 DHCP 服务器那里获取了 IP 地址、网关和 DNS 信息。
-
查看 IP 地址租约: 你可以在 DHCP 服务器上查看当前的地址租约情况。
# Ubuntu/Debian sudo cat /var/lib/dhcp/dhcpd.leases # CentOS/RHEL sudo cat /var/lib/dhcpd/dhcpd.leases
这个文件会记录所有已分配的 IP 地址、客户端 MAC 地址、租约开始和结束时间等信息。
第七部分:常见问题排查
-
服务启动失败:
- 检查配置文件语法错误:
sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf,如果配置有误,它会提示你。 - 检查
/etc/default/isc-dhcp-server或/etc/sysconfig/dhcpd中指定的网卡是否存在并且已启动。 - 检查防火墙是否阻止了 DHCP 端口(UDP 67 和 68),在服务器上运行
sudo ufw allow dhcp(Ubuntu) 或配置 firewalld。
- 检查配置文件语法错误:
-
客户端无法获取 IP:
- 确保客户端和 DHCP 服务器在同一个网段。
- 确保网络线缆连接正确,并且客户端能 ping 通网关。
- 检查网络上是否已经有另一台 DHCP 服务器(例如你的家用路由器),可能导致冲突。
- 检查
/var/log/syslog或/var/log/messages中的错误信息。
-
IP 地址范围不够用:
- 修改
dhcpd.conf文件中的range值,然后重启 DHCP 服务:sudo systemctl restart isc-dhcp-server。
- 修改
第八部分:总结
配置 Linux 下的 DHCP 服务器主要分为以下几个步骤:
- 安装
isc-dhcp-server或dhcp包。 - 编辑
/etc/dhcp/dhcpd.conf,定义作用域、地址池、网关、DNS 等核心参数。 - 指定 服务器监听的网卡(在
/etc/default/isc-dhcp-server或/etc/sysconfig/dhcpd中)。 - 启动 并 启用 DHCP 服务。
- 验证 配置是否生效,并查看日志进行排错。
希望这份详细的指南能帮助你成功配置 DHCP 服务器!
