
搞网络这一行DHCP四个字母出现频率极高。前两天帮朋友梳理华为交换机的DHCP配置顺手查了下大家最近搜得多的几个词发现热度几乎都集中在同一批疑难上华为交换机怎么看DHCP配置、一个DHCP服务器到底能发几个网段、内网已经摆着一台物理DHCP服务器时交换机的角色该怎么摆、虚拟机里的vnic反复拿不到IP又该怎么查。这些问题单看是孤立的连起来其实是一条完整的DHCP链路——地址池规划、报文转发、中继代理、安全防护每一环断了表现都是同一个终端拿不到地址。这篇文章就把这几个场景揉在一起从华为设备的角度逐条拆着讲能直接照着用。1. 先把DHCP的分配逻辑拆开一个服务器怎么撑起多个网段1.1 地址池、接口与网关先想清楚谁给谁发地址DHCP分配的本质是地址池匹配。服务器收到客户端发来的Discover请求后要根据请求来自哪个网段决定从哪个地址池里挑地址。如果请求到达服务器时携带了网关信息服务器就直接看这个网关地址落在哪个池的网段里然后从那个池找一个可用IP回给客户端。所以多网段分配的核心不在建几个地址池而在服务器凭什么知道请求来自哪个网段。华为交换机上做DHCP服务器地址池有两种形态接口地址池和全局地址池。接口地址池跟着接口走一个接口对应一个网段适合小规模、单网段的场景全局地址池是自己手工建多个pool再通过接口下发的方向把对应关系绑起来。多数情况下我建议用全局地址池因为地址池的复用、排除、DNS、租期全部集中在一个层面管理后面排查问题要容易得多。而且多个接口可以引用同一个池后续扩容、调整排除地址都不会牵一发动全身。注意接口地址池配置简单但天然适合一个接口一个网段。当你VLAN数量增多或者某些VLAN要复用地址段时就别硬套接口池直接切到全局池省得后期返工。1.2 报文流转链路里的关键角色广播限制与giaddrDHCP客户端的Discover报文在没有中继的普通二层网络里只能广播在本地VLAN。VLAN的隔离机制决定了广播不会跨网段换句话说一台DHCP服务器如果用直连方式只能在它所在的那个广播域内服务。想突破这个限制就得靠DHCP中继。中继干的事不复杂把客户端发出来的广播Discover转成单播报文发给服务器服务器回给客户端的Offer再由中继原路传回去。这里最关键的一个字段叫giaddr也就是网关IP地址。中继在转发时会把收到请求的接口地址写进giaddr。服务器拿到giaddr后就能判断客户端在哪个网段从而匹配正确的地址池。这也解释了为什么很多中继没配好的现场客户端一直拿不到地址——因为服务器根本不知道该从哪个池子里挑IP。2. 华为交换机配置DHCP服务器从全局池到多网段实操2.1 最常用的全局地址池配置流程直接给一段我能跑通的配置模板这是华为交换机上最标准的做法。# 全局使能DHCP dhcp enable # 建立VLAN10的地址池网段192.168.10.0/24 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 223.5.5.5 excluded-ip-address 192.168.10.1 192.168.10.10 lease day 7 hour 0 minute 0 # 把地址池接到VLANIF10上 interface Vlanif10 ip address 192.168.10.1 255.255.255.0 dhcp select global这段配置有两个关键点。第一VLANIF接口上必须执行dhcp select global否则全局地址池建了也不会生效。第二excluded-ip-address要把网关、上联的打印机、服务器保留IP都排掉不然DHCP很可能把这些特殊地址发给终端导致冲突。我见过不少现场地址池排除配置完全没做结果打印机的IP被别的终端抢走排查半天才发现是DHCP把保留段发出去了。多网段就是重复上面的流程多建几个ip pool。比如VLAN20对应ip pool vlan20VLANIF20上继续dhcp select global。一个DHCP服务器想发几个网段在华为交换机上就是一个池对应一个VLANIF的事并不存在一个服务器只能发一个网段的说法。真正的瓶颈在设备性能和地址池规模一般中小园区几百个网段毫无压力。2.2 租期、排除地址与网关参数的取舍参数选择看起来是小事但决定后期运维省不省心。租期建议根据终端类型去定PC、打印机这类长期在线的设备用7天左右短租期比如1小时适合访客Wi-Fi场景。租期太短地址池压力变大续租报文频繁会占一点交换机CPU租期太长地址池释放慢终端大量迁移时地址不够用的情况会被放大。网关参数必须跟VLANIF地址一致否则终端拿到IP也出不了网。DNS方面如果内网有域环境一定把内网DNS写在前面、公网DNS放后面不然客户端解析内部域名会绕外网延迟大还容易出各种奇奇怪怪的问题。规划地址池时用下面这个思路算地址损耗网段总地址数以192.168.10.0/24为例共256个地址。排除地址网络号0、广播255、网关1以及自己预留的2-10一共12个。可用分配数256减12等于244个。如果同时在线设备超过244台要么缩小排除范围要么扩容网段。这些在规划阶段就要演算好不能等接入之后才发现不够分。3. 华为交换机查看DHCP配置与状态命令不是背的是拿来对比的3.1 几条高频查看命令热词里特别提到了华为交换机查看dhcp配置。我一般分三层来看配置对不对、地址池实不实、中继通不通。# 看当前所有DHCP相关配置适合快速确认有没有遗漏 display current-configuration | include dhcp # 看地址池配置与使用情况 display ip pool display ip pool name vlan10 # 看DHCP服务器全局报文统计 display dhcp server statistics # 看中继报文统计 display dhcp relay statistics # 看DHCP Snooping绑定表 display dhcp snooping user-bind alldisplay ip pool name vlan10是我最常用的一条。它会把地址池的网段、网关、DNS、排除地址、已分配数量和空闲数量全部打出来。终端拿不到IP时第一时间就看空闲数量是不是已经归零。如果空闲还有很多那问题根本不在地址池而是要往中继和链路方向查。3.2 从输出结果反向定位故障很多人喜欢死记命令但更要会读输出。举几个实际判断地址池显示有大量Free客户端却一直拿不到IP优先查中继或者VLANIF上的dhcp select。地址池Used持续上升直到Free为0那就是地址不够考虑扩容或缩短租期。display dhcp relay statistics里Request数量很高但Reply几乎为0说明中继报文发出去了服务器没回复或者没有路由回到中继设备先测中继到服务器IP的通断。DHCP Snooping绑定表始终不更新但客户端能正常上网多半是信任口配置不对把上行口设成了untrusted合法报文被丢弃。4. 内网已有物理DHCP服务器时交换机该如何定位4.1 先判断架构是透明转发还是做中继这个问题在实际网络里特别常见也是热词里内网有物理DHCP服务器交换机如何配置背后的核心。场景要拆成两种。第一种物理DHCP服务器和客户端在同一个VLAN里。交换机只需要保证二层互通服务器网线插在哪个口把这个口划进目标VLAN让客户端能广播过去就行。这种情况下交换机不需要配任何DHCP服务端功能更不应该去执行dhcp select global否则多一个DHCP服务器在线客户端会收到两份Offer优先级、冲突、错拿地址的现象接连出现。第二种物理DHCP服务器在某一个网段客户端分布在多个VLAN。这是标准的中继场景需要在各VLANIF上启用relay把报文单向发给物理服务器interface Vlanif10 dhcp select relay dhcp relay server-ip 192.168.100.5这里的192.168.100.5就是那台物理DHCP服务器的地址。所有VLANIF都要执行同样的中继指向。服务器不需要改动前提是服务器上已经建好了对应各网段的scope。4.2 一张表讲清交换机和物理服务器要不要抢活为了避免角色冲突我习惯先画表再动手架构交换机DHCP角色服务端在哪客户端广播域需要配置什么单VLAN直连关闭DHCP功能物理服务器同一VLAN二层放通即可多VLAN中继开启DHCP Relay物理服务器被VLAN隔离VLANIF上配relay server-ip交换机作为服务器开启DHCP Server交换机自身被VLAN隔离全局地址池dhcp select global混合架构按网段区分两边都有被VLAN隔离涉及到的VLANIF分别配置global或relay这张表最大的价值在于避免活多干和活抢着干。有不少项目里交换机上曾经启用过DHCP服务后面又引入了物理DHCP服务器两个服务端并存终端时不时拿错地址查起来特别耗时。建议在优化前先明确到底哪个网段归谁发谁负责再把对应接口的dhcp select方向统一掉。5. 引入DHCP Snooping让物理服务器与交换机配置更稳定5.1 为什么要在这种架构下开Snooping当内网有物理DHCP服务器网络里又存在大量接入层交换机时安全问题就得纳入考虑。用户私接一台小路由器DHCP请求很可能被它抢先应答导致终端拿到的是一个小私网地址而不是你规划的办公网。DHCP Snooping的机制是建立接口信任关系连接合法DHCP服务器的口设为trusted其他用户口默认不信任只允许来自信任口的Offer报文转发同时记录客户端的IP-MAC绑定关系实现防偷IP和防私接DHCP双重防护。5.2 华为交换机上Snooping的标准配置# 全局使能DHCP Snooping dhcp snooping enable # 连接上层设备或物理DHCP服务器的端口设为信任口 interface GigabitEthernet0/0/1 dhcp snooping trusted # 对接入侧端口保持默认非信任状态即可 interface GigabitEthernet0/0/10 dhcp snooping enable需要提醒的是华为设备不同型号在接口下使能Snooping的命令略有差异有的默认在接口层已使能有的需要手动敲dhcp snooping enable。配置完以后一定要用display dhcp snooping user-bind all检查绑定表是否正常生成。如果绑定表是空的优先检查接口信任关系很多现场的问题其实不是攻击而是管理员把上行口设错成了untrusted合法的服务器Offer被交换机直接掐掉。6. 虚拟化环境里vnic拿不到地址的实战排查6.1 虚拟网卡在DHCP眼里的特殊性服务器为vnic分配地址这件事本质上还是DHCP流程但vnic和物理网卡有几个明显差异导致故障特征不太一样。首先vnic的MAC地址通常由虚拟化平台生成比如vSphere、KVM、容器网络里各有自己的策略有的用随机MAC有的会直接沿用物理网卡的MAC。其次虚拟交换机和物理交换机之间存在端口VLAN映射VLAN没放行或Trunk口配错广播包根本到不了DHCP服务器。最后很多虚拟化平台开启了端口安全、MAC限速之类的功能也会截断DHCP交互。6.2 按顺序排查vnic获取IP的路径遇到虚拟机一直显示正在获取IP我有一个固定的排查顺序每一步都指向一个环节在虚拟机内部确认网卡是否被操作系统识别用ipconfig /all或Linux下的ethtool看一下MAC和状态。这一步能排除驱动和vnic类型问题比如e1000还是vmxnet3。确认虚拟机端口对应的VLAN是否正确。这个错误最常见虚拟交换机端口明明配了VLAN 20物理交换机对应口却只放行了VLAN 10虚拟机发出的广播全被丢弃。在物理交换机上看DHCP Snooping绑定表。如果虚拟机已经执行了ipconfig /renew但绑定表始终没有这个MAC重点查VLAN和信任口。最后抓包验证。在虚拟机里用Wireshark抓Discover、Offer、Request、Ack四步看缺了哪一步。缺Offer基本就是中继或VLAN问题发出Request之后没有Ack多半是地址冲突或租期处理异常。这四个步骤跑完vnic拿不到IP的问题基本能找到根因。大多数时候不是DHCP服务器端的问题而是链路中某个环节的VLAN和信任配置出了偏差。7. 常见问题速查与个人经验清单7.1 高频故障速查表把上面所有容易踩的坑汇总成一张速查表现象可能原因优先处理所有终端都拿不到IPVLANIF没配dhcp select global或relay未生效查接口配置和display ip pool仅某个网段拿不到IP地址池没建该网段或中继未指到对应服务器检查地址池和中继server-ipIP分配一半后地址耗尽排除地址过多或租期太长扩容网段或缩短租期终端频繁拿到别的网段IP存在多个DHCP服务器关闭多余服务端或开DHCP Snooping打印机地址常被抢地址池未排除保留IP补excluded-ip-address虚拟机vnic无法获取IP虚拟交换机VLAN或MAC策略问题按上一步排查顺序从头查中继有请求无回复服务器IP不通或没建对应scope先ping服务器和检查路由7.2 几条来自实操的补充这些内容常规文档里很少写但非常管用。第一改DHCP配置前先做配置快照。在华为交换机上执行display current-configuration | include dhcp把结果存下来改动后一对比就知道哪里变了避免排障时误判。第二启用DHCP中继后别忘了检查VLANIF之间的路由。中继转发是单播VLANIF通常直连但如果物理DHCP服务器在更远端中间路由器一定要有回到各VLANIF网段的路由否则客户端的Request和服务器回包无法正常往返。第三别迷信全局池建了就生效。我见过好几台设备地址池建了一堆接口上忘了敲dhcp select global结果各种排查绕了一大圈一查配置全都在但就是没人干活。这是最基础也最容易犯的错。第四做Snooping时要设计好信任口。理想情况是只有合法的DHCP服务器出口是trusted其他口一律不信任。如果上行链路还接了汇聚交换机汇聚层也要一起开Snooping否则接入层信任口隔离得再好汇聚层一句没配置整条安全链还是断的。这几个月我把华为交换机上关于DHCP的这些高频场景重新过了几遍发现绝大多数故障都不是DHCP本身复杂而是多网段、物理服务器、虚拟化这些因素叠加之后职责边界没划清楚。把地址池、中继、Snooping这三块各归各位终端获取IP的问题通常会少掉一大半。