1. 为什么华为交换机要单独配DHCP:不只是省一台服务器的事
很多刚接触华为设备的工程师,第一反应都是“DHCP不是Windows Server或者路由器上干的事吗?交换机凑什么热闹?”说实话,我刚开始也这么想,直到真的在项目现场被逼着用交换机做DHCP,才明白这个需求的真实分量。
先说最典型的场景:一个中等规模的园区网络,下面挂着一两百台终端设备,包括办公电脑、网络打印机、IP电话、无线AP。你当然可以在核心路由器上做DHCP,但很多项目里路由器是运营商给的,权限根本不在你手里。也有的场景是分支机构,就那么一台华为交换机,再单独为DHCP配一台服务器,成本不划算,维护也麻烦。这时候华为三层交换机自带的DHCP功能就能直接顶上,既不用额外花钱,也不依赖外部服务,断电重启后配置还在,稳得很。
华为交换机的DHCP实现分两种模式:接口地址池模式和全局地址池模式。前者适合简单场景,直接在接口视图下为这个网段分配地址,配置快但灵活性差;后者在系统视图下创建地址池,可以通过DHCP中继服务跨网段分配地址,适合网络规模稍大的环境。很多工程师一开始容易混淆这两者的适用边界,后面我会重点拆解。
这篇内容就解决一个核心问题:拿到一台华为三层交换机,怎么一步步把DHCP跑起来。我会从全局模式讲起,因为它更通用,然后结合接口模式做对比,再聊中继、异常排查和我在现场踩过的那些坑。不管你是刚入门的小白,还是已经配过几次但总被细节卡住的工程师,这篇应该都能给你一点参考。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动手前必须想清楚的事:地址池、网关和租期的三件套关系
配置DHCP这件事,表面上是在敲命令,本质上是在做网络规划。很多配置失败的案例,都不是命令敲错了,而是规划阶段就没想明白。
2.1 地址池划分:别把所有地址都扔进一个池子
规划地址池时最关键的一点,是不要把整个网段都分配给DHCP。比如你的办公网段是192.168.10.0/24,如果地址池范围写成192.168.10.1到192.168.10.254,那等于把所有地址都动态分发,后面想加一台静态IP的服务器、打印机,或者给某个领导单独留IP,就很容易发生冲突。
我的习惯是:底层网段一般预留前50个地址给静态设备,DHCP地址池从.50以后开始,再留最后20个做备用。比如网关是192.168.10.1,静态服务器占用1-50,地址池划线为192.168.10.50到192.168.10.230。这个规则不一定适合所有场景,但思路是对的:地址池必须跟静态规划咬合在一起,不能独立存在。
还要考虑地址池容量。一个/24网段254个可用地址,刨掉静态和网关,实际能给DHCP用的也就180个左右。如果终端数超过这个量,要么扩网段,要么开启DHCP中继在多个网段间分配,而不是把地址池范围硬拉大——因为广播域越大,冲突和广播风暴的风险越高。
2.2 网关到底谁来做:三层交换机还是路由器
这是个特别容易被忽略的点。华为交换机做DHCP时,可以在地址池里指定网关和DNS,但网关不一定就是交换机本身。比如交换机只做二层接入,网关在上级路由器上,那DHCP应答里下发的网关就是那台路由器的地址。这里面有个坑:如果DHCP服务器(交换机)和被分配地址的终端不在同一个网段,就必须借助中继模式,也就是后面要讲的ip helper-address机制。
多数情况下,华为三层交换机既承担网关职责,又做DHCP服务,这样配置最顺手。但也有例外——比如核心交换机做了VRRP双机热备,两台交换机共享一个虚拟网关IP,这时候如果两台都开DHCP,就会出现地址池分配冲突。正规做法是一台做主DHCP服务,另一台做备用,或者各分一半地址池范围。这些问题不是命令层面的,但直接影响命令怎么写。
2.3 租期时长:为什么默认一天不够用
华为DHCP地址池默认租期是1天,很多项目里终端数量接近地址池上限时,一天租期往往不够。如果租期太短,终端会频繁续租,增加交换机CPU处理压力;租期太长,IP变更不灵活,终端离开后地址释放慢。现场经验是:普通办公场景设成3到7天比较合适,访客Wi-Fi这类高流动性场景设成2到4小时。
租期命令是lease day hour minute,比如lease day 3就是3天。我一般建议在配置里主动写清楚,不要依赖默认值,因为等到终端数量涨上来再想起来改租期,已经有一堆设备在用旧租期了,改完也不是立刻全部生效。
bash复制# 全局地址池模式下设置租期为3天
dhcp server lease day 3
注意:租期修改只对新获取的租约生效,已经在线的终端要等当前租约自然过期或手动续租后才会用新值。排查“为什么改了租期不生效”时先别慌,是机制决定的。
3. 全局地址池模式完整配置:从零到通的详细步骤
全局地址池模式是华为交换机DHCP里适用范围最广的配置方式,优点是可以跨VLAN分配地址,配合DHCP中继能覆盖整个三层网络。下面我用一个实际项目拓扑来演示。
项目拓扑假设:华为S5720三层交换机作为核心,划分了两个业务VLAN——VLAN 10(办公网,192.168.10.0/24)和VLAN 20(监控网,192.168.20.0/24)。交换机同时承担VLAN 10和VLAN 20的网关角色,并用全局地址池给两个网段分配IP。交换机通过上行口连接出口路由器,VLAN 10和VLAN 20的DNS都指向运营商DNS(这里用114.114.114.114举例)。
3.1 第一步:创建VLAN并配置VLANIF接口地址
这是三层交换机做DHCP的前置条件——终端要能从交换机拿到IP,前提是交换机得能在这个网段里“说话”,也就是得有对应的三层接口。
bash复制system-view
sysname SW-Core
# 创建两个业务VLAN
vlan batch 10 20
# 配置VLANIF接口地址,作为各网段的网关
interface Vlanif 10
ip address 192.168.10.1 255.255.255.0
quit
interface Vlanif 20
ip address 192.168.20.1 255.255.255.0
quit
这段配置有两个细节值得说。vlan batch 10 20可以一次创建多个VLAN,比逐条敲vlan 10、vlan 20高效得多。VLANIF接口地址就是这个网段终端的默认网关,必须和DHCP地址池里下发的网关参数保持一致,否则终端拿到IP也上不了网。
3.2 第二步:开启DHCP服务并创建全局地址池
这是核心部分。华为交换机的DHCP服务默认是关闭的,很多人配完地址池发现终端拿不到IP,检查半天才发现全局DHCP服务压根没开。这个开关的命令是dhcp enable,必须先执行。
bash复制# 开启交换机的DHCP服务功能(全局开关)
dhcp enable
# 创建VLAN 10的全局地址池
ip pool pool_vlan10
network 192.168.10.0 mask 255.255.255.0
gateway-list 192.168.10.1
dns-list 114.114.114.114 223.5.5.5
excluded-ip-address 192.168.10.1 192.168.10.50
lease day 3
quit
# 创建VLAN 20的全局地址池
ip pool pool_vlan20
network 192.168.20.0 mask 255.255.255.0
gateway-list 192.168.20.1
dns-list 114.114.114.114 223.5.5.5
excluded-ip-address 192.168.20.1 192.168.20.50
lease day 3
quit
这几条命令逐一解释一下:
network定义了地址池所在的网段和掩码,这是地址池的地基。gateway-list是下发给终端的默认网关地址,终端拿到后会自动生成默认路由。dns-list可以跟多个DNS服务器,终端会按顺序使用。我习惯放两个,一个主要一个备用。excluded-ip-address特别关键,它把网关地址和预留的静态地址段排除在动态分配范围之外。这个不配的话,网关地址192.168.10.1本身也可能被分出去,直接造成网络故障。lease是租期,前面已经说过。
提示:地址池名称不能用中文,也不能包含特殊字符,建议用
pool_加VLAN号这样的规则命名,方便后期维护识别。
3.3 第三步:把地址池绑定到接口
全局地址池建好了,还需要告诉交换机“哪些接口用哪个地址池”。这一步是在VLANIF接口下执行的,用dhcp select global命令。
bash复制# 在VLANIF接口下使能全局地址池分配
interface Vlanif 10
dhcp select global
quit
interface Vlanif 20
dhcp select global
quit
这个命令的意思是:该接口收到的DHCP请求,统一从全局地址池里找匹配的地址段分配。华为交换机会根据请求报文中的网段信息自动匹配对应的ip pool,不需要在接口下手动指定池名。
如果接口下配的是dhcp select interface,就变成了接口地址池模式。这俩容易混淆,我在下一部分专门讲区别。
3.4 第四步:接入端口划分VLAN
最后是二层接入配置。终端接在交换机的物理端口上,端口需要划入对应的VLAN才能从正确的网关和地址池拿到IP。
bash复制# 以GE0/0/1接入一台办公电脑为例
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
quit
# 以GE0/0/2接入一台监控摄像头为例
interface GigabitEthernet0/0/2
port link-type access
port default vlan 20
quit
如果是下联另一台二层交换机,端口通常要配成trunk模式放行对应VLAN:
bash复制interface GigabitEthernet0/0/24
port link-type trunk
port trunk allow-pass vlan 10 20
quit
到这里,最基础的全局地址池DHCP配置已经完成。终端接上去,应该就能通过DHCP拿到对应网段的IP,网关、DNS都是自动下发的,无需手工设置。
4. 接口地址池模式:小场景下的更优解
接口地址池模式和全局模式最大的区别,在于地址池和接口一一绑定,不需要单独定义ip pool,配置量更少,逻辑也更直观。适合那种“一个交换机管一个网段”的简单场景。
4.1 接口地址池模式配置示例
接口模式的做法是在VLANIF接口下直接指定网段和网关,其他参数可以直接在接口下配置。
bash复制interface Vlanif 10
ip address 192.168.10.1 255.255.255.0
dhcp select interface
dhcp server dns-list 114.114.114.114
dhcp server excluded-ip-address 192.168.10.1 192.168.10.50
dhcp server lease day 3
quit
在这个模式下,地址池的网段就是VLANIF接口自身的地址网段,所以不用再写network和gateway-list——网关就是接口自己的IP,天然绑定。
4.2 两种模式怎么选:一张表讲清楚
| 对比项 | 全局地址池模式 | 接口地址池模式 |
|---|---|---|
| 配置位置 | 系统视图下创建ip pool |
接口视图下直接指定 |
| 跨VLAN分配 | 支持,配合中继可跨三层 | 不支持,只能分配本接口网段 |
| 配置复杂度 | 较高,需要单独管理地址池 | 低,适合单网段小场景 |
| 维护灵活性 | 高,统一管理多个网段地址池 | 低,每个接口独立配置 |
| 典型适用场景 | 多VLAN园区网、总部核心 | 小型分支、单网段接入 |
我在实际项目里的选择标准很简单:网段超过两个,直接上全局模式;只有一个网段且以后不太可能扩展,接口模式更快。但凡是考虑到后续可能要加VLAN、加网段,我建议一步到位用全局模式,省得后面迁移配置。
5. 跨网段分配:DHCP中继的配置与原理
前面提过,终端和DHCP服务器不在同一个网段时,广播的DHCP请求是过不了三层设备的,这时候需要DHCP中继。华为交换机上的中继配置非常成熟,但我发现很多工程师对“什么时候要配中继”还是模糊的。
5.1 什么时候需要中继:场景判断
最典型的就是大楼里有多个楼层,每层一个VLAN、一个网段,但DHCP服务集中在核心机房的一台交换机上。如果各楼层的汇聚交换机把DHCP请求广播转发上来,核心交换机的DHCP服务能直接处理,不需要中继。但如果是三层设备隔离了广播域,比如汇聚和核心之间是三层路由关系,那终端的DHCP请求到不了核心的地址池,就必须在汇聚交换机上配置中继,把DHCP请求单播转发给核心。
简单说:只要DHCP服务器不在终端所在网段,且中间隔了路由设备,就要在靠近终端的那个三层接口上配中继。
5.2 华为交换机中继配置步骤
假设拓扑是这样的:核心交换机SW-Core上配置全局地址池,分配给VLAN 30(192.168.30.0/24);接入交换机SW-Access通过三层上行连接核心,VLAN 30的网关在接入交换机上(192.168.30.1)。这时接入交换机需要把终端的DHCP请求中继给核心交换机(假设核心的VLANIF30地址是192.168.30.254)。
但更常见的情况是:汇聚和核心之间其实跑的是二层,核心直接是网关。那就不需要中继,只要在核心的VLANIF下执行dhcp select global就行。需要中继的典型场景反而是多台三层交换机堆叠、或总部到分支通过三层互连。
华为交换机中继配置命令如下:
bash复制# 在接入交换机的VLANIF接口上
interface Vlanif 30
ip address 192.168.30.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 192.168.30.254
quit
这里dhcp select relay切换到中继模式,dhcp relay server-ip指定DHCP服务器地址。核心交换机侧不需要特殊改造,只要地址池存在且能匹配请求网段即可。
注意:中继模式下,接入交换机的VLANIF接口地址必须和DHCP地址池的网段在同一子网内,否则DHCP服务器无法确定给哪个地址池分配IP。
配置完成后,终端获取IP的过程变成:终端广播DHCP请求 → 接入交换机收到后,以单播方式转发给核心上的DHCP服务器 → 服务器分配地址并通过中继回给终端。中继报文会携带giaddr字段,服务器根据这个字段确定应该从哪个地址池分配,这也是为什么中继接口的IP必须和地址池网段匹配。
5.3 中继配置常见的坑
我在项目中踩过最典型的坑是:漏了中继接口的dhcp select relay命令,只在接口下配了dhcp relay server-ip,结果终端一直获取不到IP。华为的命令逻辑是必须先切到relay模式,再指定服务器地址,两者缺一不可。
另一个坑是vlanif地址和地址池不匹配。比如地址池写的是192.168.30.0/24,但中继接口地址是192.168.31.1,服务器收到请求后找不到对应的地址池,就会silent drop,终端一直显示“无法获取IP地址”。排查时先看地址池网段和中继接口是否一致,这一步能过滤掉大部分问题。
6. 地址绑定的高级用法:MAC和IP锁定的配置细节
DHCP的另一个高频需求是做IP/MAC绑定,也就是常说的静态DHCP。典型场景包括:财务系统服务器需要固定IP、门禁系统主机需要稳定地址、领导办公室打印机不能变IP。绑定的实现方式有两种:地址池内绑定和全局绑定。
6.1 全局地址池内绑定
在全局模式下,可以直接在特定地址池里为某个MAC地址指定固定的IP。命令如下:
bash复制ip pool pool_vlan10
static-bind ip-address 192.168.10.88 mask 255.255.255.0
static-bind mac-address 5489-98b1-2c3d
quit
这里5489-98b1-2c3d是终端的MAC地址,格式是四段十六进制、每段四位,用短横线分隔。配置完成后,该MAC的终端每次DHCP请求都会优先获取192.168.10.88这个地址。
注意:static-bind的IP不能落在
excluded-ip-address排除范围内,否则冲突规则优先,终端拿不到这个IP。
6.2 接口模式下绑定
接口地址池下配置方式略有不同,直接在VLANIF接口视图下执行:
bash复制interface Vlanif 10
dhcp server static-bind ip-address 192.168.10.88 mask 255.255.255.0
dhcp server static-bind mac-address 5489-98b1-2c3d
quit
这个模式下同样要注意排除地址冲突。我遇到过一次很典型的问题:地址池里既配置了静态绑定,又没排除这个IP,结果有的终端先抢到了这个地址,核心设备反而拿不到固定IP。排查了大半天才发现是地址池范围冲突。
6.3 只允许特定终端接入:DHCP结合端口安全
如果网络管理要求更严格——比如只允许办公区员工的电脑接入网络,可以在接入端口上配置MAC地址和端口绑定,甚至和DHCP静态绑定联动。端口安全配置如下:
bash复制interface GigabitEthernet0/0/1
port-security enable
port-security max-mac-num 1
port-security mac-address sticky
quit
配置后该端口只允许一个MAC地址接入,并且这个MAC会自动“粘”在端口上。如果想更彻底,可以在端口下绑定指定MAC:
bash复制interface GigabitEthernet0/0/1
port-security mac-address 5489-98b1-2c3d
quit
这一层属于接入安全范畴,和DHCP配置互补。DHCP负责分配地址,端口安全负责控制谁能接入,两者配合能实现“指定的设备拿指定的IP、其他设备根本进不来”的效果。
7. 租期续约和地址释放:终端侧的行为逻辑
7.1 为什么续约失败会断网
DHCP租约到期后,终端会尝试续租。Windows终端一般在租期到50%时发起续租请求,如果失败,到87.5%时会再次尝试。如果一直续不上,租约到期后终端会主动释放IP,网络连接断开。很多现场排查“为什么电脑用着用着突然断网”的问题,其实根源就是DHCP续约失败。
续约失败的原因一般有三个方向:一是交换机DHCP服务异常或地址池满了;二是中间链路的广播域被阻断,续租请求到不了服务器;三是终端网卡驱动或防火墙拦截了DHCP报文。排查时先看交换机上是否有DHCP packet received on illegal network segment之类的日志,这类报错最直接。
7.2 交换机侧怎么查看租约信息
华为交换机查看DHCP租约的命令很关键,必须掌握:
bash复制# 查看所有DHCP地址池的分配情况
display ip pool
# 查看指定地址池的分配详情
display ip pool pool_vlan10
# 查看指定IP的租约信息和绑定状态
display ip pool name pool_vlan10 used
# 在接口模式下查看租约信息
display dhcp server statistics
实际排查时我最常用的是display ip pool,能看到每个地址池的总地址数、已分配数、空闲数、冲突数和过期数。如果“冲突数”一直在涨,就要警惕终端网卡配置了静态IP但落在了动态地址池范围内,或者有终端手动改IP和DHCP分配撞了。
7.3 手动释放和强制续租
如果调试过程中需要让某个IP重新分配,不需要重启交换机,直接删掉租约就行:
bash复制# 在系统视图下释放指定IP的租约
system-view
dhcp server lease 192.168.10.100
这条命令会主动回收指定IP地址。终端侧如果还在用这个IP,下次续租时会发现租约没了,重新走完整DHCP流程获取新地址。
提示:
dhcp server lease命令在不同华为交换机版本上语法可能有差异,老版本是reset dhcp server ip,不确定时先打?查看帮助。
8. 常见故障排查实录:那些让我熬夜的坑
8.1 终端拿不到IP,第一件事不是查配置
先说明一个反直觉的排查顺序:终端获取不到IP时,我的第一反应永远不是敲display current-configuration看配置,而是先看交换机上DHCP报文收没收到。如果交换机根本没收到终端的DHCP请求,配置再对也没用。
看DHCP报文统计的命令是:
bash复制display dhcp server statistics
如果DHCP DISCOVER计数一直为0,说明请求报文根本没到交换机,问题出在二层链路、VLAN划分或端口配置上。如果DISCOVER有计数但DHCP OFFER没发出去,问题大概率出在地址池配置或交换机DHCP服务状态上。
这个思路能帮你少走很多弯路。我曾经遇到一个案例:接入端口配置的PVID不对,终端发出来的DHCP请求带着错误的VLAN标签,交换机收不到就直接丢弃。排查半天才发现是端口VLAN问题,根本和DHCP配置无关。
8.2 地址池冲突和排除范围没配好的典型症状
症状表现为:部分终端能拿到IP,部分终端老获取失败,或者获取了IP但网关ping不通。多数原因是地址池和静态地址段重叠。比如有人在核心交换机上把192.168.10.88这台服务器的地址写死在VLANIF接口下,同时地址池范围内又包含这个IP,DHCP就有可能把它分给别的终端,造成IP冲突。
华为交换机自带冲突检测机制,分配前会ping一下这个IP是否被占用,如果被占用就换一个。但这会拖慢分配速度,遇到网络高峰期可能表现为“获取IP特别慢”。根治方案还是规划时就把静态段排除干净。
8.3 DHCP服务自动关闭的诡异情况
有同行遇到过一个诡异问题:交换机重启后DHCP服务自动关了,终端全部获取不到IP。排查后发现是配置保存不完整。
华为交换机在<quidway>用户视图下保存配置用save,这个操作经常被忽略。很多工程师配完DHCP后不执行保存,一旦设备重启,所有配置回到出厂状态,DHCP自然就没了。还有一个容易忽略的细节:如果配置了DHCP Snooping,交换机在全局没有dhcp snooping enable的情况下,某些老版本固件会默认丢弃DHCP报文,终端同样获取不到IP。排查时记得检查这个开关。
8.4 华为交换机DHCP配置常见问题速查表
| 问题现象 | 可能原因 | 排查方向 |
|---|---|---|
| 所有终端均获取不到IP | DHCP服务未开启 | 确认已执行dhcp enable |
| 部分终端获取不到IP | 地址池容量不足 | display ip pool 查看空闲地址数 |
| 获取到IP但无法上网 | 网关或VLANIF配置错误 | 核对网关和地址池gateway-list |
| IP分配慢 | 地址池冲突多、DHCP冲突检测耗时 | 检查排除范围是否完整 |
| 重启后DHCP失效 | 配置未保存 | 用户视图下执行save |
| 特定终端始终获取不到IP | 端口安全或MAC绑定限制 | 检查端口security配置 |
| DHCP日志报illegal network segment | Vlanif与地址池不匹配 | 核对接口IP和地址池网段 |
8.5 用display命令快速定位问题
我日常排障最常用的三连是:
bash复制display dhcp enable status
display ip pool
display dhcp server statistics
第一条看DHCP全局开关,第二条看地址池状态,第三条看报文收发统计。这三条如果都正常,问题基本就出在终端侧、链路或VLAN。如果第一条显示DHCP服务未使能,那基本上后面不用看了,直接dhcp enable。
还有一个小技巧:真机调试时可以临时在终端上用ipconfig /release配合ipconfig /renew反复测试分配流程,Windows终端每执行一次,交换机上的统计就会刷新一次,方便实时确认配置效果。
9. 全局配置、地址池、端口绑定等完整命令汇总
最后给出一个可以直接参考的全量配置模板,把前面所有知识点串在一起。这段配置模拟的是S5720核心交换机,两个业务VLAN、全局地址池、静态绑定、排除地址段,一应俱全。
bash复制system-view
sysname SW-Core
# 全局开启DHCP服务
dhcp enable
# 创建业务VLAN
vlan batch 10 20
# 配置VLANIF接口
interface Vlanif 10
ip address 192.168.10.1 255.255.255.0
dhcp select global
quit
interface Vlanif 20
ip address 192.168.20.1 255.255.255.0
dhcp select global
quit
# VLAN 10地址池
ip pool pool_vlan10
network 192.168.10.0 mask 255.255.255.0
gateway-list 192.168.10.1
dns-list 114.114.114.114 223.5.5.5
excluded-ip-address 192.168.10.1 192.168.10.50
lease day 3
static-bind ip-address 192.168.10.88 mask 255.255.255.0
static-bind mac-address 5489-98b1-2c3d
quit
# VLAN 20地址池
ip pool pool_vlan20
network 192.168.20.0 mask 255.255.255.0
gateway-list 192.168.20.1
dns-list 114.114.114.114 223.5.5.5
excluded-ip-address 192.168.20.1 192.168.20.50
lease day 3
quit
# 接入端口配置
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
quit
interface GigabitEthernet0/0/2
port link-type access
port default vlan 20
quit
# 上联口配置
interface GigabitEthernet0/0/24
port link-type trunk
port trunk allow-pass vlan 10 20
quit
# 保存配置
return
save
这份配置可以直接复刻到一个干净的交换机上跑通,再根据实际网段、VLAN号、网关地址做替换。如果网络环境里还有DHCP Snooping、VRRP之类的高级功能,需要在这个基础上再叠加,但DHCP核心逻辑是一致的。
我在配置完后的习惯动作是打一条display ip pool确认地址池分配正常,然后找一台测试终端ipconfig /renew验证获取到的IP、网关、DNS是否符合规划。别急着把终端批量接进来,先拿一台试通,再放量接入,能省掉后面一大堆返工时间。
另外强烈建议所有配置完成后、离开现场前执行save,不然设备一旦重启,大半夜打电话过来让你远程处理,那种滋味真不好受。
