自学linux的第二十一天【DHCP 服务从入门到实战】

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 步交互,像 "打招呼→邀约→确认→生效":

  1. Discover(发现):客户端发送广播包(目标地址 255.255.255.255),大喊 "谁是 DHCP 服务器?我要 IP!"
  2. Offer(邀约):网络中的 DHCP 服务器收到广播,回应一个广播包,携带一个可用 IP 和配置参数,询问 "这个地址你要不要?"
  3. Request(请求):客户端选中一个 Offer,发送广播包,明确 "我就要这个 IP 了!"
  4. 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 服务的核心软件包是 dhcpdhcp-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;
}

六、常见错误排查(小白避坑指南)

  1. DHCP 服务启动失败

    • 原因:配置文件语法错误、IP 范围超出子网、端口 67 被占用
    • 排查:dhcpd -t 检查语法;ss -ulnp | grep :67 查端口占用;journalctl -xeu dhcpd 看日志
  2. 客户端获取不到 IP

    • 原因:服务器和客户端不在同一网段且未配置中继、地址池耗尽、防火墙拦截
    • 排查:检查网段配置;cat /var/lib/dhcpd/dhcpd.leases 查看已分配地址;确认防火墙已关闭
  3. 地址绑定不生效

    • 原因:MAC 地址输入错误、fixed-address 不在地址池范围内
    • 排查:核对 MAC 地址;确保固定 IP 在对应子网内

七、总结

DHCP 是网络管理的 "效率神器",核心就是自动分配 IP、统一网络参数。小白搭建 DHCP 服务器的核心流程是:

  1. 搭建路由(跨网段必备)→ 2. 安装软件 → 3. 配置静态 IP → 4. 写地址池配置 → 5. 启动服务 → 6. 测试验证

重点避开「静态 IP 配置错误、配置文件语法错误、多网段未配置中继」这几个坑,就能快速搭建出稳定可用的 DHCP 服务,让网络管理变得轻松又高效!

相关推荐
十日十行13 小时前
Linux和window共享文件夹
linux
Sinclair17 小时前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
木心月转码ing20 小时前
WSL+Cpp开发环境配置
linux
JaguarJack1 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo1 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
Rockbean2 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
蝎子莱莱爱打怪2 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
茶杯梦轩2 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
崔小汤呀2 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应2 天前
vi编辑器使用
linux·后端·操作系统