linux如何配置dhcp服务器
- 云服务器
- 2025-08-11
- 11
前置准备
适用场景
适用于为局域网内的设备自动分配 IPv4 地址、子网掩码、网关、DNS 等网络参数的场景,常见于企业内网、家庭网络或机房环境。
必要条件
确保 Linux 系统已安装并正常运行;
拥有 root 或具有 sudo 权限的用户账户;
了解目标网络的基础信息(如网段、网关、DNS 服务器等)。
安装 DHCP 服务端软件
根据不同的 Linux 发行版选择对应的包管理工具进行安装:
| 发行版 | 安装命令 | 备注 |
|---|---|---|
| Ubuntu/Debian | sudo apt install isc-dhcp-server | 主流发行版,推荐使用 |
| CentOS/RHEL | sudo yum install dhcp -y | Red Hat 系通用命令 |
| Fedora | sudo dnf install dhcp-server | Fedora 专用命令 |
验证安装结果:
执行 systemctl status dhcpd(Debian/Ubuntu)或 systemctl status dhcp(CentOS/RHEL),若显示绿色 active (running) 则表示服务已启动。

配置 DHCP 核心文件
定位主配置文件
所有发行版的主配置文件均为 /etc/dhcp/dhcpd.conf,该文件控制全局参数和各子网的具体规则。
关键配置项解析
以下是典型配置模板及逐行解释:
# 全局参数设置 ddns-update-style none; # 禁用动态 DNS 更新(简化配置) default-lease-time 600; # 默认租约时间(秒),建议 600-86400 max-lease-time 7200; # 最大租约时间(秒) authoritative; # 仅信任此 DHCP 服务器提供的地址 log-facility local7; # 日志级别(调试用) # 定义子网声明(核心部分) 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 domain-name-servers 8.8.8.8,114.114.114.114; # DNS 服务器(可选多组) option domain-name "localdomain"; # 域名后缀(可选) } # 静态绑定示例(按需添加) host mypc { hardware Ethernet 00:1A:2B:3C:4D:5E; # 客户端网卡 MAC 地址(格式:xx:xx:xx:xx:xx:xx) fixed-address 192.168.1.50; # 固定分配的 IP 地址 }
注意事项:
️ option routers 必须填写正确的网关 IP,否则客户端无法访问外网;
️ range 范围不能包含网关、广播地址(如 192.168.1.255)或其他保留地址;
️ 若需限制特定设备的最长租约时间,可在 host 块中添加 max-lease-time <秒数>;。

高级配置技巧
多子网支持
若需管理多个网段,可在 dhcpd.conf 中添加多个 subnet 块,示例如下:
subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.100 192.168.2.200; option routers 192.168.2.1; option subnet-mask 255.255.255.0; }
排除特殊地址
若某段地址已被占用(如服务器集群),可通过 exclude 指令跳过,示例:
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; exclude 192.168.1.150 192.168.1.160; # 排除 150-160 共 11 个 IP }
自定义选项(Option)
除标准选项外,还可通过 option 自定义扩展参数,例如为 Windows 客户端推送登录脚本:
option root-path "/opt/custom/scripts"; # Windows 登录脚本路径
生效与验证
检查语法错误
修改配置文件后,必须通过以下命令验证语法正确性:
| 发行版 | 验证命令 |
|---|---|
| Ubuntu/Debian | sudo dhcpd --test |
| CentOS/RHEL | sudo dhcpd -t |
若提示 Configuration file errors encountered...,需根据报错信息修正配置。
重启服务使配置生效
| 发行版 | 重启命令 |
|---|---|
| Ubuntu/Debian | sudo systemctl restart isc-dhcp-server |
| CentOS/RHEL | sudo systemctl restart dhcp |
客户端测试
在客户端执行 ipconfig /all(Windows)或 ifconfig/ip a(Linux),观察是否获取到以下信息:
- IP 地址落在 range 范围内;
- 子网掩码、网关、DNS 与配置一致;
- 租约时间符合 default-lease-time 设定。
常见问题排查
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 客户端未获取到 IP | 防火墙阻止 UDP 67/68 端口 | 关闭防火墙或放行 UDP 67(服务器)、UDP 68(客户端) |
| 获取到错误的网关/DNS | dhcpd.conf 中 option 拼写错误 | 检查 routers、subnet-mask、domain-name-servers 拼写 |
| 静态绑定失效 | MAC 地址大小写错误或格式不符 | 确保 MAC 地址为 XX:XX:XX:XX:XX:XX(冒号分隔,无连字符) |
| 日志显示 “No subnet declaration for…” | 未定义目标网段的 subnet 块 | 检查 subnet 行的网段与客户端所在网段是否一致 |
相关问题与解答
Q1: 如何让同一台服务器同时为多个 VLAN 分配 IP?
A: 需为每个 VLAN 创建独立的 subnet 块,并在交换机上配置 Trunk 端口允许对应 VLAN Tag。
# VLAN 10(财务部) subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.100 192.168.10.200; option routers 192.168.10.1; } # VLAN 20(研发部) subnet 192.168.20.0 netmask 255.255.255.0 { range 192.168.20.100 192.168.20.200; option routers 192.168.20.1; }
同时确保交换机端口成员属于对应 VLAN,且服务器网卡设置为 Trunk 模式。
Q2: 为什么客户端有时能获取到 IP,有时失败?
A: 可能原因包括:① DHCP 服务器负载过高(大量并发请求);② 租约过期后未及时续租;③ 网络中存在多个 DHCP 服务器冲突,解决方法:① 调大 max-lease-time 减少续租频率;② 使用 tcpdump udp port 67 抓包查看是否有重复响应;③ 确保网络中仅本机提供 DHCP 服务(可通过 arp -a 检查
