在Linux系统中配置DHCP(动态主机配置协议)服务器,可以为局域网中的自动分配IP地址、子网掩码、网关、DNS等网络参数,简化网络管理流程,以下以常用的DHCP服务器软件dhcpd(ISC DHCP Server)为例,详细介绍在Linux环境下的配置步骤、关键参数及注意事项。

安装DHCP服务器软件
在基于Debian/Ubuntu的系统上,可通过apt安装:
sudo apt update sudo apt install isc-dhcp-server -y
在基于RHEL/CentOS的系统上,使用yum或dnf安装:
sudo yum install dhcp -y # CentOS 7及以下 sudo dnf install dhcp -y # CentOS 8及以上
安装完成后,dhcpd服务会自动启动,但初始配置可能需要手动调整。
配置DHCP服务核心文件
DHCP服务的主配置文件位于/etc/dhcp/dhcpd.conf(Debian/Ubuntu)或/etc/dhcpd.conf(RHEL/CentOS),配置前建议先备份原文件:

sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
全局配置(可选)
在配置文件开头,可设置全局参数,如默认租约时间、最大租约时间等:
default-lease-time 600; # 默认租约时间(秒) max-lease-time 7200; # 最大租约时间(秒) authoritative; # 声明该DHCP服务器是权威的(避免网络中其他DHCP服务器干扰) option domain-name "example.com"; # 默认域名 option domain-name-servers 8.8.8.8, 8.8.4.4; # 默认DNS服务器
子网配置
核心是定义要分配IP地址的子网,需指定子网网段、子网掩码、网关地址、DNS服务器及IP地址池,为子网168.1.0/24配置DHCP服务:
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 subnet-mask 255.255.255.0; # 子网掩码
option broadcast-address 192.168.1.255; # 广播地址
}
多子网与静态IP分配
若需为多个子网提供服务,可重复添加subnet块,若需为特定设备(如服务器、打印机)分配固定IP,可通过host声明实现:
host server01 {
hardware ethernet 00:1A:2B:3C:4D:5E; # 设备MAC地址
fixed-address 192.168.1.10; # 固定分配的IP
}
配置文件示例(完整)
# 全局配置
default-lease-time 600;
max-lease-time 7200;
authoritative;
option domain-name "local.lan";
option domain-name-servers 114.114.114.114, 8.8.8.8;
# 子网1:192.168.1.0/24
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 subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
}
# 子网2:10.0.0.0/24
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.200;
option routers 10.0.0.1;
option subnet-mask 255.255.255.0;
}
# 静态IP分配示例
host printer {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address 10.0.0.50;
}
配置DHCP服务监听接口
默认情况下,dhcpd会监听所有网络接口,但建议明确指定监听接口以提高安全性,编辑/etc/default/isc-dhcp-server(Debian/Ubuntu)或/etc/sysconfig/dhcpd(RHEL/CentOS),修改INTERFACES变量:

# Debian/Ubuntu sudo nano /etc/default/isc-dhcp-server # 修改为:INTERFACESv4="eth0" # 替换为实际网卡名(如ens33) # RHEL/CentOS sudo nano /etc/sysconfig/dhcpd # 修改为:DHCPDARGS="eth0"
启动与测试DHCP服务
启动并设置开机自启
# Debian/Ubuntu sudo systemctl start isc-dhcp-server sudo systemctl enable isc-dhcp-server # RHEL/CentOS sudo systemctl start dhcpd sudo systemctl enable dhcpd
检查服务状态
sudo systemctl status isc-dhcp-server # 或 dhcpd
测试DHCP分配
在客户端设备(Windows/Linux)上将网络模式设置为“自动获取IP”,然后通过命令查看是否获取到地址:
- Windows:
ipconfig /renew - Linux:
sudo dhclient eth0
获取成功后,客户端IP地址应位于配置的地址池内。
查看DHCP分配日志
DHCP服务日志通常记录在/var/log/syslog(Debian/Ubuntu)或/var/log/messages(RHEL/CentOS),可通过以下命令过滤DHCP相关日志:
grep "dhcpd" /var/log/syslog
常见问题排查
-
服务启动失败:检查配置文件语法是否正确,使用
dhcpd -t测试配置:sudo dhcpd -t # 无输出表示语法正确
若提示错误,根据错误提示修改配置文件(如子网重叠、IP地址池与网关冲突等)。
-
客户端无法获取IP:
- 检查防火墙是否拦截DHCP端口(UDP 67/68),临时关闭防火墙测试:
sudo ufw disable # Ubuntu sudo systemctl stop firewalld # CentOS/RHEL
- 确认监听接口配置正确,使用
netstat -ulnp | grep 67检查DHCP服务是否监听67端口。
- 检查防火墙是否拦截DHCP端口(UDP 67/68),临时关闭防火墙测试:
FAQs
Q1: 如何修改DHCP地址池范围?
A1: 编辑/etc/dhcp/dhcpd.conf文件,找到对应subnet块中的range参数,修改起始和结束IP地址,然后保存并重启DHCP服务:
sudo systemctl restart isc-dhcp-server # 或 dhcpd
Q2: 如何设置DHCP租约时间?
A2: 在dhcpd.conf的全局配置中修改default-lease-time(默认租约)和max-lease-time(最大租约)参数,单位为秒,设置默认租约为1小时(3600秒),最大租约为24小时(86400秒):
default-lease-time 3600; max-lease-time 86400;
修改后重启DHCP服务即可生效。
