在 CentOS 7 上配置 DHCP(Dynamic Host Configuration Protocol)服务器,可以实现对局域网内客户端的 IP 地址自动分配,同时支持高级功能,如 主机地址绑定(静态分配)、设备分类(class)、以及客户端重新获取 IP 等。
下面是对 CentOS 7 中 DHCP 服务器配置的全面总结,包括:
一、DHCP 服务简介
-
DHCP(Dynamic Host Configuration Protocol):用于自动为客户端分配 IP 地址、子网掩码、网关、DNS 等网络参数。
-
服务端软件:在 CentOS 7 中通常使用 ISC DHCP Server,包名为
dhcp。 -
主配置文件:
/etc/dhcp/dhcpd.conf -
服务管理命令:
systemctl start/stop/restart/status dhcpd -
监听网卡:默认监听所有网卡,也可指定。
二、安装 DHCP 服务
1. 安装 dhcp 软件包
yum install dhcp -y
2. 检查是否安装成功
rpm -qa | grep dhcp
你应该能看到类似 dhcp-4.2.5-XX.el7.x86_64的包。
三、配置 DHCP 服务器
1. 主配置文件路径
/etc/dhcp/dhcpd.conf
⚠️ 默认该文件可能为空或只有示例注释,你可以备份后清空,或者参考
/usr/share/doc/dhcp-*/dhcpd.conf.example来构建自己的配置。
2. 配置示例(基础 + 高级功能)
假设场景:
-
DHCP 服务器 IP:
192.168.1.10 -
分配的网段:
192.168.1.0/24 -
可分配 IP 范围:
192.168.1.50 ~ 192.168.1.100 -
网关:
192.168.1.1 -
DNS:
8.8.8.8和8.8.4.4 -
默认租期:1天,最大租期:3天
3. 编辑配置文件 /etc/dhcp/dhcpd.conf
vi /etc/dhcp/dhcpd.conf
填入如下内容(根据需求调整):
# 全局配置
option domain-name "example.com";
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 86400; # 默认租约时间(秒),这里为1天
max-lease-time 259200; # 最大租约时间,这里为3天
# 指定监听的网络接口(可选,如果不指定则监听所有)
# subnet 192.168.1.0 netmask 255.255.255.0 {
# range 192.168.1.50 192.168.1.100;
# option routers 192.168.1.1;
# option broadcast-address 192.168.1.255;
# }
# 正式配置一个子网
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.100; # 动态分配的IP范围
option routers 192.168.1.1; # 网关
option subnet-mask 255.255.255.0; # 子网掩码
option domain-name-servers 8.8.8.8, 8.8.4.4; # DNS
option broadcast-address 192.168.1.255; # 广播地址
default-lease-time 86400;
max-lease-time 259200;
}
四、主机地址绑定(静态分配 / 固定IP)
有时候你希望某些设备(比如服务器、打印机、网络摄像头)每次都获取固定的 IP 地址,可以通过 MAC 地址绑定来实现。
示例:为某台设备固定分配 IP 192.168.1.100
在 subnet块内添加如下配置:
host printer {
hardware ethernet 00:0c:29:xx:xx:xx; # 替换为目标设备的 MAC 地址
fixed-address 192.168.1.100; # 指定固定IP
}
🔧 如何获取设备的 MAC 地址?
-
Linux 客户端:
ip link或ifconfig -
Windows 客户端:
ipconfig /all,找到物理地址(Physical Address)
你可以为多个设备分别定义多个 host块。
五、设备分类设置(Class 匹配)
DHCP 支持基于 设备类型、厂商信息、用户类 等进行分类,从而为不同类别的设备分配不同的参数,比如不同的 DNS、网关等。
示例:基于 Class 匹配(简单示例)
# 定义一个 class,比如匹配某个特定的用户类或标识
class "special-devices" {
match if substring (option vendor-class-identifier, 0, 5) = "MYDEV";
}
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.100;
option routers 192.168.1.1;
# 对于匹配 class "special-devices" 的设备,使用不同的 DNS
pool {
allow members of "special-devices";
range 192.168.1.150 192.168.1.180;
option domain-name-servers 1.1.1.1, 1.0.0.1;
}
# 其它普通设备
pool {
deny members of "special-devices";
range 192.168.1.50 192.168.1.149;
option domain-name-servers 8.8.8.8, 8.8.4.4;
}
}
⚠️
class和pool的搭配使用较为灵活,可以实现策略路由、不同网段分配、DNS 控制等高级功能。但配置也相对复杂,适合有定制需求的场景。
六、启动与启用 DHCP 服务
1. 启动 DHCP 服务
systemctl start dhcpd
2. 设置开机自启
systemctl enable dhcpd
3. 检查服务状态
systemctl status dhcpd
如果看到 active (running)表示服务已经正常启动。
七、防火墙与 SELinux 设置
1. 开放 DHCP 服务端口(UDP 67/68)
DHCP 服务使用:
-
UDP 67:服务器端
-
UDP 68:客户端
如果启用了防火墙(firewalld),需要放行 DHCP 服务:
firewall-cmd --add-service=dhcp --permanent
firewall-cmd --reload
如果你使用的是传统 iptables,需要允许 UDP 67/68 端口。
2. SELinux(通常无需特别配置)
默认情况下,只要 DHCP 配置正确,SELinux 不会阻止其运行。如有问题,可以暂时设置为宽松模式测试:
setenforce 0
(生产环境请谨慎,建议正确配置安全策略)
八、客户端如何获取/重新获取 DHCP 地址
1. Linux 客户端获取 IP(DHCP)
-
自动获取(通常系统启动时自动获取):
dhclient -
手动重新获取 IP(释放并重新请求):
dhclient -r # 释放当前IP dhclient # 重新获取IP或者:
nmcli connection down <连接名> && nmcli connection up <连接名>
2. Windows 客户端
-
自动获取:通常默认开启
-
手动更新:
-
命令提示符下:
ipconfig /release ipconfig /renew
-
九、DHCP 服务日志查看
DHCP 服务日志默认在:
journalctl -u dhcpd -f # 实时查看 DHCP 服务日志
或者查看系统日志:
tail -f /var/log/messages
通过日志可以排查:
-
是否有客户端成功获取 IP
-
是否有地址冲突
-
配置是否生效等
十、总结:关键配置要点
|
功能 |
配置要点 |
|---|---|
|
基础 DHCP 服务 |
修改 |
|
主机地址绑定(固定IP) |
使用 |
|
设备分类设置 |
使用 |
|
服务启停 |
|
|
客户端获取IP |
Linux: |
|
防火墙 |
开放 UDP 67/68,或放行 |
|
日志排查 |
|
📌 附加建议
-
如果你的网络中已有其他 DHCP 服务器(比如路由器),请确保只启用一个,避免 IP 冲突。
-
可以给不同 VLAN 或网段配置多个
subnet块,但需要 DHCP 服务支持中继(dhcp relay)。 -
建议备份
/etc/dhcp/dhcpd.conf文件,以便出错时快速恢复。

3051

被折叠的 条评论
为什么被折叠?



