DHCP 服务从入门到实战:小白也能看懂的完整教程
一、DHCP 是什么?(先搞懂核心概念)
1. 基本概念
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一套自动给网络设备分配 IP 地址、子网掩码、网关、DNS 等网络参数的服务,就像网络里的 "地址管理员"------ 不用手动给每台电脑设置 IP,设备一联网就能自动拿到可用的网络配置。
它的核心特点是:采用 C/S(客户端 / 服务器) 架构,服务端监听 67/udp 端口,客户端监听 68/udp 端口,全程自动完成配置,大幅提升网络管理效率。
2. 核心作用
- 动态 IP 分配:自动给客户端分配可用 IP,避免手动配置的繁琐和冲突
- 统一网络参数:同时分配网关、DNS、子网掩码等,确保全网配置一致
- 地址回收复用:IP 地址有租约期,不用时回收,提升地址利用率
3. DHCP 三大优势
- ✅ 提高配置效率:几十台电脑的网络配置,几分钟就能搞定
- ✅ 减少配置错误:避免手动输入 IP 时输错数字、掩码不匹配等问题
- ✅ 地址灵活管理:IP 地址按需分配,不用时回收,避免地址浪费
4. 三种地址分配方式
表格
| 分配方式 | 特点 | 适用场景 |
|---|---|---|
| 手动分配 | 管理员手动绑定 IP 和 MAC 地址,固定不变 | 服务器、打印机等需要固定 IP 的设备 |
| 自动分配 | 客户端首次获取 IP 后永久占用,不回收 | 小型网络,设备数量少且长期在线 |
| 动态分配 | IP 有租约期,到期回收,客户端可重新申请 | 企业办公、校园网等大型网络(最常用) |
5. 重要注意事项
- 同一个局域网内不允许同时存在多个 DHCP 服务器,否则会导致客户端获取地址混乱
- 当租约期达到 50% 时,客户端会自动向服务器续约,避免地址过期失效
- 不同系统客户端的 "兜底行为":
- Linux:DHCP 服务不可用时,客户端不会自动获取 IP,网络直接断开
- Windows:DHCP 服务不可用时,会启用备用地址(169.254.0.0/16 网段),保证内网连通性
二、DHCP 工作流程(小白也能懂的 "四步拿地址")
当客户端设置为 "自动获取 IP" 时,会和 DHCP 服务器完成 4 步交互,像 "打招呼→邀约→确认→生效":
- Discover(发现):客户端发送广播包(目标地址 255.255.255.255),大喊 "谁是 DHCP 服务器?我要 IP!"
- Offer(邀约):网络中的 DHCP 服务器收到广播,回应一个广播包,携带一个可用 IP 和配置参数,询问 "这个地址你要不要?"
- Request(请求):客户端选中一个 Offer,发送广播包,明确 "我就要这个 IP 了!"
- Ack(确认):服务器收到请求,发送确认包,确定 IP 租约期,客户端正式使用该地址
这 4 步全是广播包,因为客户端一开始还没有 IP,只能通过广播和服务器通信。
三、前置:路由搭建(跨网段 DHCP 必备)
如果需要让 DHCP 服务器为多个网段分配 IP,必须先搭建路由,开启 IP 转发和 DHCP 中继功能:
1. 为虚拟机添加新网卡
如果网络由 NetworkManager 管理,新网卡需要用 nmcli 配置静态 IP(作为不同网段的网关):
运行
nmcli connection modify 网卡名 \
ipv4.addresses "网关IP/掩码" \
ipv4.method "manual"
2. 重启网卡生效
运行
nmcli connection down 网卡名 && nmcli connection up 网卡名
nmcli connection down 网卡名2 && nmcli connection up 网卡名2
# 或用传统命令
ifdown 网卡名 && ifup 网卡名 && ifdown 网卡名2 && ifup 网卡名2
3. 开启内核路由功能
运行
# 编辑路由配置文件
vim /etc/sysctl.conf
# 将 net.ipv4.ip_forward=0 改为 1
net.ipv4.ip_forward=1
# 生效配置
sysctl -p
4. 开启 DHCP 中继(跨网段转发请求)
运行
# 安装中继服务
yum install -y dhcp-relay
# 启动中继,指向主 DHCP 服务器 IP
dhcrelay 主服务器IP
四、实战:搭建 DHCP 服务器(小白一步一步跟着做)
前置准备
- 系统:CentOS/RHEL 系列(本文以 CentOS 7 为例)
- 目标:搭建 DHCP 服务器,为 192.168.111.0/24 网段的客户端自动分配 IP
- 服务器 IP:
192.168.111.137(静态 IP,DHCP 服务器必须用固定 IP)
步骤 1:安装 DHCP 服务软件
DHCP 服务的核心软件包是 dhcp 或 dhcp-server,直接用 yum 安装:
运行
yum install -y dhcp-server
步骤 2:关闭防火墙和 SELinux(避免拦截)
DHCP 服务依赖 UDP 67/68 端口,先关闭防火墙和 SELinux,避免配置被拦截:
运行
# 1. 关闭防火墙并禁止开机自启
systemctl stop firewalld
systemctl disable firewalld
# 2. 临时关闭 SELinux(立即生效)
setenforce 0
# 3. 永久关闭 SELinux(重启后生效)
vim /etc/selinux/config
# 找到 SELINUX=enforcing,改为 SELINUX=disabled
步骤 3:配置服务器静态 IP(关键!)
DHCP 服务器必须有固定 IP,不能自己从其他 DHCP 服务器获取地址。如果网络由 NetworkManager 管理,用 nmcli 配置静态 IP:
运行
# 1. 查看网卡名称(比如 ens160)
nmcli connection show
# 2. 配置静态 IP(替换为你的实际网关、IP、掩码)
nmcli connection modify ens160 \
ipv4.addresses "192.168.111.137/24" \
ipv4.gateway "192.168.111.2" \
ipv4.dns "192.168.111.137" \
ipv4.method "manual"
# 3. 重启网卡生效
nmcli connection down ens160 && nmcli connection up ens160
# 4. 验证 IP 配置
ip address
# 验证网关
route -n
# 验证 DNS
cat /etc/resolv.conf
步骤 4:配置 DHCP 地址池(核心配置)
DHCP 的主配置文件是 /etc/dhcp/dhcpd.conf,默认是空文件,我们需要从示例文件复制模板:
运行
# 1. 进入配置目录
cd /etc/dhcp
# 2. 复制示例配置文件(保留权限,-p 很重要!)
cp -p /usr/share/doc/dhcp-server/dhcpd.conf.example ./dhcpd.conf
# 3. 修改配置文件权限(确保可读取)
chmod 0644 dhcpd.conf
# 4. 编辑配置文件
vim dhcpd.conf
关键配置修改(小白直接照抄改)
在配置文件中找到 subnet 相关配置,替换为以下内容(以 192.168.111.0/24 网段为例):
运行
# 全局配置
default-lease-time 600; # 默认租约期:10分钟
max-lease-time 7200; # 最大租约期:2小时
ddns-update-style none; # 关闭动态 DNS 更新(小白可忽略)
authoritative; # 声明本服务器为网段内权威 DHCP 服务器
# 子网配置(核心:定义要分配的网段和参数)
subnet 192.168.111.0 netmask 255.255.255.0 {
range 192.168.111.5 192.168.111.249; # 可分配的 IP 范围(避开网关、服务器 IP)
option domain-name-servers 192.168.111.137; # DNS 服务器地址(指向自己或公共 DNS)
option domain-name "internal.example.com"; # 域名(可自定义)
option routers 192.168.111.250; # 网关地址(网段的默认网关)
option broadcast-address 192.168.111.255; # 广播地址(网段最后一个地址)
default-lease-time 600;
max-lease-time 7200;
}
小白重点改:
subnet后的网段、range后的 IP 范围、option routers后的网关地址,其他保持默认即可。
步骤 5:地址绑定(固定 IP 给指定设备)
如果需要把某个 IP 固定分给某台电脑(比如服务器、打印机),可以配置 "地址绑定",基于 MAC 地址绑定 IP:
在 dhcpd.conf 中添加以下内容(替换为实际的 MAC 地址和 IP):
运行
host fantasia {
hardware ethernet 08:00:07:26:c0:a5; # 客户端的 MAC 地址
fixed-address 192.168.111.100; # 要固定分配的 IP
}
这样,只要 MAC 地址为
08:00:07:26:c0:a5的设备联网,就会固定拿到192.168.111.100这个 IP。
步骤 6:检查配置并启动服务
运行
# 1. 检查配置文件语法(无输出则正确)
dhcpd -t
# 2. 启动 DHCP 服务并设置开机自启
systemctl enable --now dhcpd
# 3. 查看服务状态(确保 active running)
systemctl status dhcpd
如果启动失败,用以下命令查看日志找原因:
运行
journalctl -xeu dhcpd
步骤 7:测试 DHCP 服务
找一台客户端(Windows 或 Linux),设置为 "自动获取 IP",然后执行:
- Windows:
ipconfig /renew→ 查看获取的 IP 是否在地址池范围内 - Linux:
dhclient→ 用ip address查看获取的 IP
如果能正常获取 IP,说明 DHCP 服务器搭建成功!
五、进阶:多网段 DHCP 配置
如果需要为多个网段分配 IP(比如同时服务 192.168.111.0/24 和 192.168.112.0/24),只需在 dhcpd.conf 中添加多个 subnet 配置:
运行
# 第二个网段配置
subnet 192.168.112.0 netmask 255.255.255.0 {
range 192.168.112.5 192.168.112.249;
option routers 192.168.112.250;
option domain-name-servers 192.168.111.137;
default-lease-time 600;
max-lease-time 7200;
}
六、常见错误排查(小白避坑指南)
-
DHCP 服务启动失败
- 原因:配置文件语法错误、IP 范围超出子网、端口 67 被占用
- 排查:
dhcpd -t检查语法;ss -ulnp | grep :67查端口占用;journalctl -xeu dhcpd看日志
-
客户端获取不到 IP
- 原因:服务器和客户端不在同一网段且未配置中继、地址池耗尽、防火墙拦截
- 排查:检查网段配置;
cat /var/lib/dhcpd/dhcpd.leases查看已分配地址;确认防火墙已关闭
-
地址绑定不生效
- 原因:MAC 地址输入错误、fixed-address 不在地址池范围内
- 排查:核对 MAC 地址;确保固定 IP 在对应子网内
七、总结
DHCP 是网络管理的 "效率神器",核心就是自动分配 IP、统一网络参数。小白搭建 DHCP 服务器的核心流程是:
- 搭建路由(跨网段必备)→ 2. 安装软件 → 3. 配置静态 IP → 4. 写地址池配置 → 5. 启动服务 → 6. 测试验证
重点避开「静态 IP 配置错误、配置文件语法错误、多网段未配置中继」这几个坑,就能快速搭建出稳定可用的 DHCP 服务,让网络管理变得轻松又高效!