这次我们来看一个网络运维里高频出现,但又经常被讲得绕来绕去的需求:在交换机上配置基于全局地址池的 DHCP 服务器。
很多同学第一次接触 DHCP,第一反应是拿 Windows Server 或 Linux 去搭服务,结果到了现场发现没有服务器可用,只有一台三层交换机。这时候如果会玩交换机的 DHCP 全局地址池,问题直接就解决了:不用额外上设备,三层交换机既能当网关,又能承担地址分配,终端插上线就能拿到 IP,网管省事很多。
这篇文章会从“全局地址池和接口地址池有什么区别”开始,讲清楚在什么组网下该用全局池,然后以华为 VRP 平台为例,把开启 DHCP、创建地址池、VLANIF 关联、验证效果、排错思路这一整套流程走一遍,同时给华三、思科设备做一份对照参考。最后补上批量下发脚本和常见的坑,方便你直接拿去用。
先给一个速览,方便判断这篇文章对你的实际价值。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 适用设备 | 三层交换机,华为 VRP、华三 Comware、思科 IOS 系列均可 |
| 组网位置 | 核心/汇聚交换机上配置,为终端所在 VLAN 提供 DHCP 服务 |
| 核心功能 | 集中管理多个 VLAN 的地址池,统一分配 IP、网关、DNS、租期 |
| 对比接口地址池 | 全局地址池在系统视图创建,可被多个 VLANIF 复用;接口地址池只能在单个接口下生效 |
| 前置条件 | 已划分 VLAN、VLANIF 已配置 IP、交换机三层路由能力正常 |
| 配置方式 | CLI 命令行配置,开启 dhcp、创建 ip pool、关联 VLANIF |
| 验证方式 | display ip pool、display dhcp statistics、终端 ipconfig |
| 是否支持批量 | 支持脚本批量下发,可结合 Netmiko、Paramiko 或园区网控制器 |
| 适合场景 | 中小企业办公网、园区接入网、监控网、临时组网、无独立 DHCP 服务器的环境 |
说白了,这套配置的价值就是让交换机在当网关的同时,顺便把 IP 分配的活也干了,少一台服务器,少一个单点故障,也少一层运维成本。
2. 适用场景与使用边界
先说清楚全局地址池适合谁、不适合谁,免得你配置完了才发现方向选错。
2.1 哪些场景适合用全局地址池
最典型的场景是:一台三层交换机作为办公楼的汇聚或核心设备,下面挂了十几个接入交换机,划分了 VLAN 10、VLAN 20、VLAN 30 等多个业务网段。终端分布在各楼层,每个网段可能有几十到几百个终端。
这时候如果给每个 VLAN 单独配置接口地址池,管理会非常碎片化;但如果在系统视图下建一个或多个全局地址池,再让对应 VLANIF 通过dhcp select global去引用,就能做到地址池集中创建、按接口灵活关联。
典型场景包括:
- 办公网终端自动获取 IP;
- 监控摄像头单独划分 VLAN,自动分配地址;
- 访客 Wi-Fi 的终端地址分配;
- 临时项目组网,现场没有可用的 DHCP 服务器;
- 灾备/割接时快速重建一套地址分配体系。
2.2 哪些场景不应该硬上
如果终端规模上千、需要复杂的 IP 地址管理策略、需要和域控联动、需要细粒度日志和审批流,那还是上独立 DHCP 服务器更合适。交换机自带的 DHCP 功能属于轻量级服务,地址池数量、租约记录规模都有上限,不适合重度使用。
另外要注意,二层交换机是不行的。DHCP 服务必须跑在三层设备上,因为 DHCP 请求要跨 VLAN 转发、要识别中继信息,这依赖三层能力。如果手头只有 S5700-LI 这类纯二层交换机,也就是能划 VLAN、能配个管理 IP 的设备,那做不了 DHCP 服务,需要换三层型号或另接服务器。
2.3 使用边界和合规提醒
配置 DHCP 服务器前,要确认你对当前网络的规划权和管理权。在真实办公网里操作前建议先走变更流程,避免地址分配冲突导致批量断网。涉及访客网络时,还要注意终端准入和访问控制,不能因为能自动分 IP 就放开安全策略。下面配的脚本和命令,应该在测试环境验证通过后再上生产。
3. 环境准备与前置条件
3.1 组网拓扑
本文采用的演示拓扑如下,这是常规企业组网中最常见的形式:
+---------------------+ | 核心/汇聚三层交换机 | | 192.168.10.1/24 | | 192.168.20.1/24 | +----------+----------+ | +--------------------+ | 接入交换机(二层) | +--------------------+ | +--------------+--------------+ | | | VLAN 10 VLAN 20 VLAN 30 PC-A 终端 PC-B 终端 监控摄像头在这个组网中,核心交换机同时承担网关和 DHCP 服务两个角色。VLAN 10 对应办公网段192.168.10.0/24,VLAN 20 对应业务网段192.168.20.0/24,VLAN 30 对应监控网段192.168.30.0/24。
3.2 地址规划表
配置 DHCP 之前,一定要有一张清晰的地址规划表,否则很容易出现地址冲突或地址池越界。
| VLAN | 网段 | 网关 | 可用地址池范围 | DNS | 备注 |
|---|---|---|---|---|---|
| VLAN 10 | 192.168.10.0/24 | 192.168.10.1 | 192.168.10.10 - 192.168.10.200 | 114.114.114.114 / 8.8.8.8 | 办公终端 |
| VLAN 20 | 192.168.20.0/24 | 192.168.20.1 | 192.168.20.10 - 192.168.20.150 | 114.114.114.114 / 8.8.8.8 | 业务终端 |
| VLAN 30 | 192.168.30.0/24 | 192.168.30.1 | 192.168.30.100 - 192.168.30.200 | 114.114.114.114 | 监控设备 |
注意:地址池范围要避开网络地址、广播地址、网关地址和设备手工配置的地址。如果网段里有打印机、服务器需要固定的 IP,建议在地址池中使用排除地址或者配置静态绑定,不要把这些设备放在自动分配区间内。
3.3 基础环境检查清单
在开始配置之前,先按下面这个表逐项确认:
| 检查项 | 要求 |
|---|---|
| 交换机型号 | 必须是三层交换机,支持 DHCP 服务 |
| VLAN 是否已划分 | 终端所在 VLAN 和 VLANIF 已创建 |
| 交换机时间是否准确 | 时间不正确会影响租约和日志排查 |
| 版本是否支持 DHCP | 华为 VRP 基础版本一般直接支持,无需额外授权 |
| 到终端链路是否通 | 接入交换机端口已放通对应 VLAN |
| 是否会导致现网中断 | 生产环境先走变更,确认影响范围 |
确认完后,建议先备份当前配置,再加一条保存命令到步骤里。
4. 华为交换机全局地址池 DHCP 配置步骤
这一章是核心。下面以华为 S 系列交换机 VRP 平台为例,逐步完成全局地址池 DHCP 服务器配置。
4.1 开启 DHCP 服务
在系统视图下开启全局 DHCP 功能。这是第一步,不开启的话后面所有地址池都不会生效。
system-view dhcp enabledhcp enable只负责开启服务的总开关。真正决定接口从哪个池获取地址,要靠后面的dhcp select global。
4.2 创建全局地址池
进入系统视图,创建全局地址池,并配置网段、网关、DNS 和租期。
# 创建 VLAN 10 对应的全局地址池 ip pool vlan10 network 192.168.10.0 mask 255.255.255.0 gateway-list 192.168.10.1 dns-list 114.114.114.114 8.8.8.8 lease day 1 hour 0 minute 0 excluded-ip-address 192.168.10.1 192.168.10.10各命令说明:
ip pool vlan10:创建一个名为 vlan10 的全局地址池,名称可以自定义;network:指定地址池的网段和掩码;gateway-list:下发给终端的网关地址,一般是 VLANIF 地址;dns-list:下发 DNS 服务器地址,按实际需求填写;lease:租期长度,示例为 1 天,默认华为设备通常是 1 天;excluded-ip-address:排除地址段,网关、静态设备所在的地址段不要下发。
4.3 在 VLANIF 接口上关联全局地址池
创建完地址池后,进入对应 VLANIF 接口,配置 IP 地址,并指定 DHCP 选择全局地址池。
interface vlanif 10 ip address 192.168.10.1 24 dhcp select global这条命令的含义是:当 VLAN 10 里的终端向网关发起 DHCP 请求时,交换机自动从系统视图下创建的全局地址池里找匹配网段的池进行分配。
如果有多个 VLAN,继续重复上面的过程:
# VLAN 20 使用全局地址池 vlan20 ip pool vlan20 network 192.168.20.0 mask 255.255.255.0 gateway-list 192.168.20.1 dns-list 114.114.114.114 8.8.8.8 excluded-ip-address 192.168.20.1 192.168.20.10 interface vlanif 20 ip address 192.168.20.1 24 dhcp select global4.4 保存配置
配置完成后一定要保存,否则设备重启后配置全部丢失。
return save保存时按提示输入Y确认即可。建议把配置文件同时备份到 FTP、TFTP 或本地目录。
4.5 如果使用接口地址池
有些场景下你可能只想让一个接口单独管理一个地址段,那可以用接口地址池,操作更简单,但灵活性低一些:
interface vlanif 10 dhcp select interface这种模式下地址范围自动匹配 VLANIF 所在网段,不能像全局池那样灵活排除大量地址,也没有多接口复用能力。多数场景还是推荐全局地址池,集中管理更清晰。
5. 华三与思科交换机对照配置
很多园区网不止一种品牌设备。这里给一份华三 Comware 和思科 IOS 的对照命令,方便你在不同厂商设备间切换时不至于翻文档。
| 配置阶段 | 华为 VRP | 华三 Comware | 思科 IOS |
|---|---|---|---|
| 开启 DHCP | dhcp enable | dhcp enable | service dhcp |
| 创建全局地址池 | ip pool vlan10 | dhcp server ip-pool vlan10 | ip dhcp pool vlan10 |
| 配置网段 | network 192.168.10.0 mask 255.255.255.0 | network 192.168.10.0 mask 255.255.255.0 | network 192.168.10.0 255.255.255.0 |
| 配置网关 | gateway-list 192.168.10.1 | gateway-list 192.168.10.1 | default-router 192.168.10.1 |
| 配置 DNS | dns-list 114.114.114.114 | dns-list 114.114.114.114 | dns-server 114.114.114.114 |
| 配置租期 | lease day 1 hour 0 minute 0 | expired day 1 hour 0 minute 0 | lease 1 0 0 |
| 接口引用全局池 | dhcp select global | dhcp select global | ip dhcp relay address或接口地址池 |
| 查看地址池 | display ip pool | display dhcp server ip-pool | show ip dhcp binding |
思科需要注意一点:IOS 的传统 DHCP 服务里,接口地址池和全局地址池的概念与华为不同,通常直接在接口下配置ip address加ip dhcp pool全局池即可。如果 DHCP 服务器在核心交换机上,则需要在接入设备上配ip dhcp relay address,也就是 DHCP 中继。纯三层交换机作为网关的场景,配置全局池后,终端直接广播到网关即可分配。
具体命令在不同型号和版本上可能略有差异,以设备自带的?提示和官网命令参考为准。
6. 功能测试与效果验证
配置完成后不能只看配置,要实际验证终端能不能拿到地址。
6.1 查看地址池状态
在交换机上执行:
display ip pool正常情况下会显示地址池数量、网段、租期、已分配和空闲数量。重点看状态是否是Normal,地址利用率是否在合理范围。
如果只想看某个地址池的明细:
display ip pool name vlan10可以查看该池的起始地址、结束地址、排除地址、已分配地址和过期时间。
6.2 查看 DHCP 统计信息
display dhcp statistics这个命令可以看交换机收到和回复的 DHCP 报文数量,用来判断终端请求是否正常到达交换机。
6.3 在终端上验证自动获取
将 PC 网卡设置为自动获取 IP,执行:
# Windows ipconfig /release ipconfig /renew ipconfig /all以管理员身份打开 CMD 操作。ipconfig /all输出里要重点看三样:
- IP 地址是否在规划的地址池范围内;
- 子网掩码是否正确;
- 网关和 DNS 是否是规划的值。
在 Linux 终端上可以执行:
sudo dhclient -r sudo dhclient ip addr show6.4 通过 Ping 验证三层互通
拿到 IP 只是第一步,还要验证网关和跨网段是否通:
ping 192.168.10.1 ping 192.168.20.1如果跨 VLAN 不通,优先检查 VLANIF 是否 up、路由是否正常、接口是否放行对应 VLAN。
6.5 抓包验证 DHCP 交互过程
如果问题比较隐蔽,比如终端反复获取不到 IP,可以用 Wireshark 在接入交换机镜像口抓包,或者用终端网卡抓包。正常的 DHCP 流程有四个报文:
- DHCP Discover:终端广播找 DHCP 服务器;
- DHCP Offer:服务器响应可用地址;
- DHCP Request:终端确认申请;
- DHCP ACK:服务器正式分配地址。
四步缺一不可。如果在第一步就没有 Offer 回来,说明 DHCP 服务或中间链路有问题,回到 4、5 节检查配置。
7. 批量配置与自动化下发
生产环境经常遇到几十台交换机都要做同样配置的情况,一台台登录配置效率太低。这里给两个自动化方案。
7.1 方案一:通过 Python Netmiko 批量下发
Netmiko 是网络运维里常用的 Python 库,支持华为、华三、思科等多种设备类型。
from netmiko import ConnectHandler devices = [ { "device_type": "huawei", "host": "192.168.1.1", "username": "admin", "password": "your_password", "secret": "your_enable_password", }, { "device_type": "huawei", "host": "192.168.1.2", "username": "admin", "password": "your_password", "secret": "your_enable_password", }, ] config_commands = [ "dhcp enable", "ip pool vlan10", "network 192.168.10.0 mask 255.255.255.0", "gateway-list 192.168.10.1", "dns-list 114.114.114.114", "lease day 1 hour 0 minute 0", "excluded-ip-address 192.168.10.1 192.168.10.10", "interface vlanif 10", "ip address 192.168.10.1 24", "dhcp select global", "quit", ] for device in devices: with ConnectHandler(**device) as conn: conn.send_config_set(config_commands) output = conn.send_command("display ip pool") print(f"{device['host']} 配置结果:") print(output)注意:
- 生产环境请用 SSH 登录,不要用 Telnet;
- 密码和密钥不要硬编码在脚本里,建议使用环境变量或配置管理工具;
device_type要根据设备实际型号调整,华三设备通常为hp_comware;- 批量执行前先在一台设备上做测试。
7.2 方案二:通过 Excel 配置清单生成脚本
把地址规划表放到 CSV 文件里,然后用 Python 自动生成配置片段,适合大型项目。
import csv def generate_dhcp_config(csv_file): with open(csv_file, newline="", encoding="utf-8") as f: reader = csv.DictReader(f) with open("dhcp_config.txt", "w") as out: for row in reader: vlan = row["vlan"] network = row["network"] gateway = row["gateway"] dns = row["dns"] excluded = row["excluded"] out.write(f"ip pool vlan{vlan}\n") out.write(f" network {network}\n") out.write(f" gateway-list {gateway}\n") out.write(f" dns-list {dns}\n") out.write(f" excluded-ip-address {excluded}\n") out.write(f"interface vlanif {vlan}\n") out.write(f" ip address {gateway} 24\n") out.write(f" dhcp select global\n") out.write("quit\n") print("配置文件已生成:dhcp_config.txt") generate_dhcp_config("address_plan.csv")脚本只是框架,字段名和 CSV 格式需要和你的规划表对齐。
7.3 批量任务失败后的处理原则
批量下发 DHCP 配置属于高风险操作,一旦中途中止,设备配置可能处于不一致状态。建议执行下面的顺序:
- 先备份所有设备配置;
- 对单台设备做灰度验证;
- 确认无误后分成 5 到 10 台一小批执行;
- 每台设备执行完立即保存;
- 保存后做一次配置核对,包括
display ip pool和display vlan; - 如果中途失败,先停止后续批次的执行,记录失败设备,统一回滚。
8. 资源占用与性能观察
很多人以为交换机上跑 DHCP 不会占用多少资源,实际在高密度终端环境下,DHCP 服务对 CPU 和内存还是有影响的。
8.1 关注哪些指标
- 地址池利用率:
display ip pool,如果利用率超过 90%,及时扩容或回收租约; - DHCP 报文统计:
display dhcp statistics,观察 Discover/Offer 报文数量是否正常; - 交换机 CPU 占用:
display cpu-usage,DHCP 广播风暴时 CPU 会明显升高; - 内存占用:
display memory-usage,租约记录多了以后内存会缓慢增长。
8.2 常见性能优化方式
- 合理设置租期。办公网终端数量多、流动性一般,租期可以设为 1 天;访客网可以设 2 到 4 小时,避免地址池被无效租约占满;
- 排除地址不要设得过大,避免地址浪费;
- 如果终端规模很大,可以让接入交换机做 DHCP 中继,核心交换机只负责服务,减少广播域请求;
- 在接入交换机上开启 DHCP Snooping,过滤非法 DHCP 服务器报文,保护地址池安全。
8.3 地址池与租约的维护命令
# 查看地址池使用情况 display ip pool # 查看某个 IP 的租约记录 display ip pool name vlan10 used # 回收某个地址的租约 reset dhcp ip pool vlan10 ip-address 192.168.10.50 # 查看冲突地址 display ip pool name vlan10 conflicts注意reset命令会立即释放地址,可能导致终端掉线,使用前要确认目标终端。
9. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 终端无法获取 IP | 未开启 dhcp enable,或 VLANIF 未配置 dhcp select global | 查看display dhcp statistics | 在接口视图下执行dhcp select global |
| 终端获取的 IP 网段不对 | VLAN 与地址池网段不匹配 | 查看终端所在 VLAN 和 VLANIF IP | 调整地址池网段或重配 VLANIF 地址 |
| 交换机重启后配置丢失 | 未执行 save | 查看display current-configuration | 执行save |
| 获取 IP 很慢或超时 | 广播被阻断、接入交换机端口未放通 VLAN | 查看接入交换机端口配置 | 将端口类型改为 access/trunk 并放通 VLAN |
| 跨 VLAN 获取不到地址 | 核心交换机未启用 DHCP,或缺少路由 | 查看display ip routing-table | 在核心交换机启用 DHCP,并配置 VLANIF 路由 |
| 终端提示 IP 地址冲突 | 地址池和手工配置地址重合 | 查看display ip pool name vlan10 conflicts | 扩大排除地址范围或清理冲突记录 |
| 地址池不够用 | 租期过长、排除地址过大、终端数量超出规划 | 查看地址池利用率 | 缩短租期、调整排除地址、扩容网段 |
| 网络中存在多个 DHCP 服务器 | 私接路由器或有人手动搭建 DHCP | 抓包或检查接入交换机 DHCP Snooping 日志 | 开启 DHCP Snooping,配置信任端口 |
| 交换机 CPU 持续偏高 | DHCP 广播请求过多或环路 | 查看display cpu-usage | 优化租期、排除环路、收敛广播域 |
| 终端能拿到 IP 但上不了网 | 网关、DNS 下发错误或缺少路由 | 查看ipconfig /all | 检查地址池的 gateway-list 和 dns-list |
重点说两个高频问题。
问题一:VLAN 已经划分好了,但终端就是获取不到地址。
先看dhcp enable有没有开,再看接口下有没有dhcp select global。这两个是最容易被漏掉的。如果都开了,就在终端上ipconfig /renew触发一次请求,同时在交换机上执行display dhcp statistics,看有没有收到 Discover 报文。如果连报文都没有,问题大概率出在接入交换机端口没有放通 VLAN,或者中间链路本身不通。
问题二:终端能获取到地址,但是获取的是另一个网段的地址。
这种情况多半是 VLANIF 地址和地址池网段对不上。比如 VLANIF 10 配的是192.168.20.1,但地址池 vlan10 写的是192.168.10.0/24,就导致接口引用全局池时找不到匹配网段,或干脆分配了错误网段的地址。排查方式是逐一对账:查看终端实际所在 VLAN、查看 VLANIF 地址、查看地址池网段,三者必须一致。
10. 最佳实践与使用建议
10.1 配置前先做规划
不要上来就敲命令。先确认 VLAN 划分、网段、网关、DNS、排除地址、租期这六个要素。把地址规划表写到运维文档里,后续排错和扩容才有依据。这里推荐一个最小规划模板:
| 项目 | 规划值 |
|---|---|
| VLAN 编号 | VLAN 10 |
| VLAN 名称 | Office |
| 网段 | 192.168.10.0/24 |
| 网关 | 192.168.10.1 |
| DNS | 114.114.114.114 |
| 地址池范围 | 192.168.10.10 - 192.168.10.200 |
| 排除地址 | 192.168.10.1 - 192.168.10.10 |
| 租期 | 1 天 |
| 终端数量预估 | 150 |
10.2 配置全链路校验
完整配置完一个 VLAN 后,建议按下面的流程走一遍:
# 1. 验证地址池 display ip pool name vlan10 # 2. 验证 VLANIF display ip interface brief # 3. 验证三层路由 display ip routing-table # 4. 查看 DHCP 统计 display dhcp statistics全部确认后再批量配置其他 VLAN,避免把错误带到整个网络。
10.3 建议开启 DHCP Snooping
凡是自己搭了 DHCP 服务的网络,都应该考虑在接入交换机上启用 DHCP Snooping,防止有人私接路由器或者局域网内出现第二个 DHCP 服务器。配置思路是:把上联到核心交换机的端口设为信任端口,其余用户端口默认不信任。
# 以华为交换机为例,在 VLAN 10 内开启 DHCP Snooping dhcp snooping enable interface vlanif 10 dhcp snooping enable interface gigabitethernet 0/0/1 dhcp snooping trusted具体命令各厂家有差异,但思路一致:信任口只朝上联设备开,用户口一律不信任。
10.4 配置备份与版本管理
DHCP 配置往往会在运行过程中被不断调整:地址池扩容、DNS 变更、租期调整。建议每次变更后都保存配置,并把配置文件定期备份到版本库。这样设备故障需要重建时,可以快速恢复。
10.5 安全与合规提醒
给监控摄像头、员工终端、访客终端做地址分配时,要明确网段的访问边界。访客网络建议单独 VLAN,并通过 ACL 限制只能访问外网,不能访问内网资源。涉及到人脸识别、声音采集等特殊终端时,要严格遵守本地隐私保护要求,确保设备入网前已获得合法授权。
11. 总结与下一步
交换机上的全局地址池 DHCP 配置,不算复杂,但绝对值得熟练掌握。它不需要额外服务器,不需要单独维护一套系统,三层交换机同时把网关和地址分配一并解决了,对小中型园区网非常实用。这篇文章讲到的所有内容里,最值得先试的,是在一台测试交换机上完整配一遍 VLAN 10 的地址池,然后用 PC 验证自动获取。只要dhcp select global能跑通,剩下的 VLAN 就是重复劳动。
最容易踩的坑就三个:忘记dhcp enable、VLANIF 和地址池网段对不上、配置完没有save。这三个坑占实际故障的一半以上,配置时多留个心眼。
下一步可以继续扩展的方向包括:跨网段的 DHCP 中继配置、DHCP Snooping 加终端准入联动、用 Python 脚本批量巡检地址池利用率,以及把配置文件纳入自动化运维平台做统一管理。建议把这篇文章收藏备用,下次现场没有 DHCP 服务器的时候,直接打开照着配就行。