在Linux系统中配置DHCP服务器(Dynamic Host Configuration Protocol,动态主机配置协议)可以为局域网中的自动分配IP地址、子网掩码、网关、DNS服务器等网络参数,简化网络管理,本文将以最常用的ISC DHCP Server为例,详细讲解在Linux系统中配置DHCP服务器的完整步骤,包括安装、配置、启动、测试及常见问题排查。

安装DHCP服务器软件
不同Linux发行版的包管理工具不同,安装命令略有差异,以Ubuntu/Debian和CentOS/RHEL为例:
Ubuntu/Debian系统
sudo apt update sudo apt install isc-dhcp-server -y
CentOS/RHEL系统
sudo yum install dhcp -y # CentOS 7及以下 sudo dnf install dhcp -y # CentOS 8/RHEL 8及以上
安装完成后,默认配置文件路径为:
- Ubuntu/Debian:
/etc/dhcp/dhcpd.conf - CentOS/RHEL:
/etc/dhcp/dhcpd.conf
配置DHCP服务器
DHCP服务器的核心配置是编辑dhcpd.conf文件,定义IP地址分配范围、租约时间、网关、DNS等参数,以下是详细配置步骤:
备份原始配置文件
sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
编辑配置文件
使用vim或nano打开配置文件:
sudo vim /etc/dhcp/dhcpd.conf
配置文件参数详解
dhcpd.conf文件由全局参数、子网配置、主机配置等部分组成,常见参数如下表:
| 参数类型 | 参数名称 | 作用说明 | 示例值 |
|---|---|---|---|
| 全局参数 | ddns-update-style | 动态DNS更新方式(可选) | none |
| 全局参数 | default-lease-time | 默认租约时间(秒) | 600(10分钟) |
| 全局参数 | max-lease-time | 最大租约时间(秒) | 7200(2小时) |
| 全局参数 | option domain-name-servers | 指定DNS服务器地址 | 8.8.8, 8.8.4.4 |
| 全局参数 | option domain-name | 指定域名后缀(可选) | example.com |
| 子网配置 | subnet | 定义分配IP的子网网段 | subnet 192.168.1.0 netmask 255.255.255.0 { |
| 子网配置 | range | 定义IP地址分配范围 | range 192.168.1.100 192.168.1.200; |
| 子网配置 | option routers | 指定默认网关 | option routers 192.168.1.1; |
| 子网配置 | option broadcast-address | 指定广播地址 | option broadcast-address 192.168.1.255; |
| 主机配置 | host | 为特定主机分配固定IP(可选) | host mypc { hardware ethernet 00:0c:29:ab:cd:ef; fixed-address 192.168.1.50; } |
配置示例
假设局域网网段为168.1.0/24,网关为168.1.1,DNS为8.8.8,IP分配范围为168.1.100-192.168.1.200,配置文件内容如下:
# 全局配置
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
option domain-name-servers 8.8.8.8, 8.8.4.4;
option domain-name "example.com";
# 子网配置
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
}
# 固定IP分配示例(可选)
host server01 {
hardware ethernet 00:0c:29:ab:cd:ef;
fixed-address 192.168.1.50;
}
配置文件语法检查
保存配置文件后,使用以下命令检查语法是否正确:
sudo dhcpd -t # Ubuntu/Debian sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf # CentOS/RHEL
若提示Configuration file is OK,表示语法正确;否则根据错误提示修改配置。

启动并启用DHCP服务
启动DHCP服务
# Ubuntu/Debian sudo systemctl start isc-dhcp-server # CentOS/RHEL sudo systemctl start dhcpd
设置开机自启
# Ubuntu/Debian sudo systemctl enable isc-dhcp-server # CentOS/RHEL sudo systemctl enable dhcpd
检查服务状态
sudo systemctl status isc-dhcp-server # Ubuntu/Debian sudo systemctl status dhcpd # CentOS/RHEL
若显示active (running),表示服务已正常运行。
配置网络接口(仅CentOS/RHEL需手动指定)
Ubuntu/Debian会自动检测网络接口,但CentOS/RHEL需要手动指定DHCP服务监听的网卡(如eth0):
sudo vim /etc/sysconfig/dhcpd ```根据实际网卡名修改): ```plaintext DHCPDARGS=eth0
保存后重启服务:
sudo systemctl restart dhcpd
防火墙配置
若服务器启用了防火墙,需开放DHCP服务端口(UDP 67):
Ubuntu/Debian(ufw)
sudo ufw allow 67/udp
CentOS/RHEL(firewalld)
sudo firewall-cmd --permanent --add-port=67/udp sudo firewall-cmd --reload
测试DHCP服务
客户端获取IP
在局域网另一台设备(Windows/Linux)上,将网络设置为“自动获取IP地址”,然后使用以下命令查看是否获取到IP:
- Windows:
ipconfig /renew,然后查看ipconfig /all中的DHCP服务器地址和IP配置。 - Linux:
sudo dhclient eth0(或nmcli connection reload),然后执行ip a查看IP。
服务器端查看分配记录
DHCP服务分配IP后,会生成租约文件,路径为:
- Ubuntu/Debian:
/var/lib/dhcp/dhcpd.leases - CentOS/RHEL:
/var/lib/dhcpd/dhcpd.leases
查看租约文件:
tail -f /var/lib/dhcp/dhcpd.leases
若看到客户端MAC地址、分配的IP、租约时间等信息,表示分配成功。

常见问题排查
-
客户端无法获取IP
- 检查DHCP服务状态:
sudo systemctl status isc-dhcp-server - 检查防火墙是否放行UDP 67端口
- 检查配置文件语法:
sudo dhcpd -t - 确认IP分配范围与网段匹配,避免与静态IP冲突
- 检查DHCP服务状态:
-
客户端获取到无效IP(如169.254.x.x)
表示客户端未找到DHCP服务器,检查:- 网线连接或Wi-Fi是否正常
- 服务器与客户端是否在同一网段
- 服务器网卡是否启用混杂模式(
sudo ip link show eth0查看状态)
相关问答FAQs
Q1:如何为特定主机分配固定IP地址?
A:在dhcpd.conf文件中添加host配置段,通过客户端的MAC地址绑定固定IP。
host myserver {
hardware ethernet 00:0c:29:ab:cd:ef; # 替换为客户端MAC地址
fixed-address 192.168.1.50; # 指定固定IP
}
保存后重启DHCP服务,客户端即可获取到固定IP。
Q2:DHCP服务器无法分配IP,提示“no free leases”怎么办?
A:该错误表示IP地址池已用尽,可通过以下方式解决:
- 扩展IP分配范围:修改
dhcpd.conf中的range参数,增加可用IP数量(如range 192.168.1.100 192.168.1.250;)。 - 缩短租约时间:降低
default-lease-time和max-lease-time值,使IP地址更早释放(如将default-lease-time改为300秒)。 - 排查IP冲突:使用
ping测试IP地址池中的地址,确认是否有静态IP或设备占用冲突IP。
修改配置后,重启DHCP服务即可生效。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/32419.html