聊DHCP部署大多数人第一反应是“不就是自动发IP嘛”但真到了生产环境里你会发现光是“让终端拿得到IP”和“让整张网络稳稳定定拿IP”之间隔着好几层实操细节。我这些年做网络运维从几十人的办公室到几百台设备的数据中心都配过几乎每次开局都要跟DHCP打交道。这篇东西就把我常用的部署思路、华为交换机上的配置命令、多网段下发、内网物理DHCP服务器共存以及虚拟网卡vnic这类容易踩坑的场景一起梳理清楚。适合刚入行不久的网络工程师、运维同学也适合那些闭着眼配完、结果第二天收到一堆地址冲突告警、想回来补课的朋友。1. 部署DHCP之前先把这四个问题想清楚很多人在开局时习惯性直接进设备敲命令地址池随手填一个网关DNS靠感觉结果后面排障排到怀疑人生。其实DHCP部署真的不难难的是部署之前有没有把需求理清楚。1.1 DHCP不只是“发个IP”那么简单先说个最容易被低估的点。DHCP全称是Dynamic Host Configuration Protocol标准交互流程大家都会背客户端发Discover找服务器服务器回Offer预分配地址客户端再发Request确认要这个地址最后服务器回Ack拍板。这就是经典的DORA四步。但实操里真正影响体验的是DHCP在下发地址的同时能通过Option字段下发一堆“附属配置”网关、DNS、域名、NTP时间服务器、PXE引导地址、甚至AC控制器地址。也就是说你配置DHCP时本质上是在给整张网络下发“出厂设置”。我见过不少项目IP地址分配得很顺利但终端反复提示无Internet访问一查发现DHCP下发的DNS是出网DNS内网域名全解析不了还有些无线办公场景AP下发的网关是对的结果Option字段里把旧的NTP地址带下去导致所有终端时间偏差很大证书校验全挂。用生活化点的类比DHCP就像一个酒店前台不光给你分房间还告诉你电梯在哪、WiFi密码是多少、几点退房。前台登记错了住客去错楼层整层楼都乱。所以部署前别急着配命令先盘点清楚这张网需要下发哪些参数。1.2 地址池规划决定后面要不要返工这个我吃过亏一个两百多人的公司开局图省事整栋楼就丢了一个10.10.0.0/16的超大地址池结果后面想做VLAN隔离和基于网段的流量策略全部受制于这个“一锅炖”的规划最后花了一周时间重新分网段折腾得办公区断断续续。现在我的习惯是地址池规划在部署前就要做成一张表。一张可参考的中型办公区规划网段用途地址范围网关DHCP策略10.10.10.0/24网络设备与带外管理.1 ~ .5010.10.10.1手工固定10.10.20.0/24办公终端.51 ~ .20010.10.20.1自动分配打印机做保留10.10.30.0/24无线终端.51 ~ .25010.10.30.1自动分配租期可短10.10.40.0/24服务器/虚拟机.1 ~ .10010.10.40.1手动或DHCP保留绑定规划原则就一条别把所有东西塞进一个大网段。管理设备单独网段、终端单独网段、服务器单独网段好处是后面做安全策略、做QoS、做故障隔离都会轻松得多。地址池里的“排除地址”也要提前想好网关、网络设备端口、打印机、IP摄像头这些哑资源固定占用的地址必须从自动池里排除不然哪天网关和终端抢IP整个网段直接瘫痪。1.3 网关、DNS、租期这些参数怎么定地址池里的网关必须与三层接口地址完全一致。这条听起来是废话但我真见过把VLANIF配置成10.10.20.1地址池里gateway-list却写成10.10.20.254的人终端拿到IP之后出不了本网段排查了小半天。DNS是另一个重灾区。只填一个公网DNS不解决内网域名解析问题你连OA、连GitLab、连内部业务系统都会失败。正确的做法是优先填内网DNS服务器再填公网DNS做兜底。顺序也要注意第一DNS写内网第二DNS写公网这样才能保证内网域名优先走内网解析。租期长短直接关系到地址池的健康度。办公PC建议8到12小时就够无线终端特别是手机平板12小时以内比较合适如果租期设置成7天甚至30天大量离线设备积压着地址不释放过段时间地址池就会莫名其妙地满了。反过来租期太短也不行终端频繁续租无线的漫游体验会被影响到。关键生产服务器的租期可以设长一些但更推荐直接做保留绑定。1.4 部署形态怎么选部署形态优点缺点适用场景路由器/家用网关简单、免维护策略弱、日志少、并发低小型办公室三层交换机内置DHCP配置快、内网自闭环审计弱、策略较基础中小园区网络Windows/Linux DHCP服务器功能全、高可用、审计强需要额外维护服务器中大网络、数据中心这里我想多说一句交换机内置DHCP虽然配置最方便但它最大的麻烦是日志和租约审计能力有限。真遇到有人私接设备导致地址冲突交换机上看到的冲突记录通常不够细。所以但凡公司有独立服务器资源我更推荐把DHCP放在服务器上交换机只做中继后面你会感谢这个决定。2. 华为交换机内置DHCP配置实战与查看命令如果决定用华为交换机做DHCP服务器绕不开的两种模式全局地址池和接口地址池。下面把这两种模式的配置命令、适用场景和查看命令完整过一遍。2.1 最常用的全局地址池模式全局池适合多VLAN环境一套地址池配置放在全局由接口通过dhcp select global关联系统根据接口所在网段自动匹配对应的地址池。先看完整配置system-view dhcp enable # 创建办公终端网段的全局地址池 ip pool vlan20 gateway-list 10.10.20.1 network 10.10.20.0 mask 255.255.255.0 dns-list 10.10.10.2 114.114.114.114 lease day 0 hour 8 minute 0 excluded-ip-address 10.10.20.1 10.10.20.50 # 创建无线网段的全局地址池 ip pool vlan30 gateway-list 10.10.30.1 network 10.10.30.0 mask 255.255.255.0 dns-list 10.10.10.2 114.114.114.114 lease day 0 hour 12 minute 0 excluded-ip-address 10.10.30.1 10.10.30.50 # 让VLANIF接口使用全局地址池 interface Vlanif20 dhcp select global interface Vlanif30 dhcp select global这里面每条命令都有实际含义。gateway-list下发的网关地址必须和VLANIF的IP一致否则终端拿到IP也出不去network是核心定义一个地址池到底服务哪个网段excluded-ip-address把网关、服务器、打印机固定占用的地址排除掉lease是租期前面的命令里有个技巧如果你想排除一个连续地址段但又想保留其中一部分可以追加多条excluded-ip-address命令。全局池模式最舒服的一点是只要网段规划清楚配置一次之后后面新增VLAN只需要创建一个新的ip pool再在VLANIF上配dhcp select global其他不用动。系统匹配地址池的时候是按接口IP地址和地址池network的网段来自动匹配的所以多个VLAN之间互不干扰。2.2 接口地址池适合小规模场景接口地址池就是把地址池直接定义在接口下面一个接口一个池子。适合就一两个网段、不想维护全局池的场景。interface Vlanif10 dhcp select interface dhcp server ip-range 10.10.10.100 10.10.10.200 dhcp server gateway-list 10.10.10.1 dhcp server dns-list 10.10.10.2这段配置的意思是该VLANIF接口下的用户直接从接口本地地址池分地址地址范围是100到200。好处是直观一个接口对应一个池子配置简单坏处也是直观如果局域网有十几个VLAN你得在每个VLANIF下重复配一遍维护起来非常啰嗦。所以我个人只在临时项目或者小型单网段环境用它正规项目基本全局池为主。2.3 一个DHCP服务器怎么发多个网段热搜词里有一条问的就是“一个DHCP服务器发几个网段”这个问题在实际开局里特别常见。答案有三条路按场景选。方案A是多全局池。核心交换机上每个网段建一个地址池各VLANIF接口都配dhcp select global系统自动把对应网段的用户匹配到对应地址池。这是我最推荐的华为场景方案直观、好排障。方案B是super-vlan地址池。用一个超级VLAN聚合多个子VLAN地址池建在super-vlan上子VLAN共用这个池。优点是可以把多个子VLAN聚合统一管理用在大园区节省网关地址缺点是理解和维护成本高新手很容易把自己绕晕。方案C就是交换机不建本地池接口配成dhcp select relay把所有网段的DHCP请求中继给一台集中的物理DHCP服务器。这也是“一个DHCP服务器发多个网段”的另一种经典答案单台服务器在后台通过中继设备的帮助给前台上百个不同网段的终端发地址。2.4 查看DHCP配置的几组关键命令华为交换机上查看DHCP配置最常用的就是以下几组建议背下来# 查看所有本地地址池的分配情况和剩余地址 display ip pool # 查看某个地址池的详细信息 display ip pool name vlan20 # 查看接口DHCP工作模式global/relay/interface display dhcp server interface # 查看DHCP中继接口配置 display dhcp relay interface # 查看全局DHCP统计信息 display dhcp statistics # 查看地址冲突记录 display dhcp conflict实操中怎么用举个例子某天有人报办公室上不了网你先别跑去现场登核心交换机看一眼display ip pool如果地址池Used快满了但Idle已经见底大概率就是地址耗尽不是链路问题。再看display dhcp statistics如果看到Discover报文很多但Offer很少要么地址池空了要么DHCP服务异常。如果想确认某个接口到底是用全局池还是中继模式display dhcp server interface一条命令就能查出来。需要特别提醒华为设备不同版本、不同系列的命令可能有一点小差异比如老版本可能叫display dhcp server新版本叫display dhcp global pool找不到命令时先打display dhcp server ?看看提示。3. 内网已有物理DHCP服务器交换机该怎么配合很多公司内部已经有Windows Server或者Linux搭建的DHCP服务器这种情况下华为交换机不需要也不应该再建本地地址池做好“帮手”角色就行。但这个“帮手”怎么当要分两种情况。3.1 二层同网段交换机放行即可如果物理DHCP服务器和终端属于同一个二层广播域也就是同一个VLAN那交换机什么中继都不需要配。终端发广播DHCP请求物理服务器直接就能收到并回应交换机的工作只是保证VLAN内广播能通。但是有一点要特别注意如果接入交换机上开启了DHCP Snooping防止DHCP欺骗的功能连接DHCP服务器的上联口必须配置为trust口否则服务器回给终端的报文会被交换机当成非法报文直接丢掉现象就是所有终端都拿不到地址。system-view dhcp enable dhcp snooping enable interface GigabitEthernet0/0/24 dhcp snooping trusted这个配置里的关键是倒数第二行把接物理DHCP服务器的口设成trusted。接入交换机上连接终端的口默认保持untrust状态这样终端的DHCP请求能正常发出但如果有终端私接小路由器、想自己当DHCP服务器下发错地址交换机会直接丢弃它的Offer报文从根源上掐掉DHCP欺骗。3.2 跨网段下发核心交换机必须配中继如果物理DHCP服务器在服务器网段终端却在办公网段两边是三层的不同VLAN广播报文过不去就必须让核心交换机当中继也就是把广播的DHCP请求转换成单播转发给服务器。服务器分配好地址后再把回应报文通过中继回给客户端。华为交换机上的配置非常简洁system-view dhcp enable interface Vlanif20 dhcp select relay dhcp relay server-ip 10.10.99.5这里的dhcp relay server-ip后面跟的是物理DHCP服务器的IP。如果公司做了双DHCP服务器冗余可以再加一条指向第二台服务器形成双中继目标。背后要理解一个概念中继之所以能工作是因为中继设备在转发DHCP请求时会在报文里填上giaddr字段也就是客户端所在网段的网关IP。物理DHCP服务器看到giaddr后就知道该从哪个作用域Scope里挑地址。所以你在Windows/Linux服务器上配置DHCP作用域时也要确保作用域的“路由器”或“网关”选项填的是客户端网段的网关地址否则服务器确实收到了请求但它不知道从哪段地址里分同样会出问题。3.3 与物理DHCP服务器共存时的隐患内网同时存在物理DHCP服务器和交换机本地DHCP能力时有几个坑几乎是按周期出现的我列一下踩过的人都知道。第一个坑是地址池重叠。交换机上建了本地全局池又同时把接口配成中继到物理服务器终端会收到两份Offer如果两边规划的地址范围又不一致客户端获取到的IP一会儿是这个池子里的一会儿是那个池子里的轻则获取慢重则严重地址冲突。处理原则很简单选一个源头要么交换机本地发要么中继给物理服务器千万别两个都开。第二个坑是排除地址没做干净。物理DHCP服务器上的作用域默认动态分配的地址段往往会覆盖整个网段。如果网络里手工配置了打印机、门禁、服务器的静态IP而这些IP正好落在自动池里过几天必定冲突。所以物理服务器的作用域里也要做排除范围Windows DHCP服务器的“排除范围”和“保留”功能不要省。第三个坑出现在VRRP网关场景。核心交换机两台做了VRRPVLANIF上配置了虚拟网关IP中继出去的giaddr字段要填虚拟网关IP而不是其中某一台物理交换机的真实IP否则服务器回包会单播给某台设备而真正接客户端的路径可能是另一台结果就是部分终端获取地址超时。4. 虚拟化环境中的DHCP给vnic分配IP的实战经验服务器虚拟化普及以后DHCP要面对的“客户端”越来越多是虚拟机而虚拟机在网络上呈现的形态就是vnic也就是虚拟网卡。这里有不少和物理终端不一样的细节单独说。4.1 vnic是什么地址获取流程有啥区别vnic就是虚拟机网卡由宿主机上的虚拟交换机标准交换机或者分布式交换机转发报文。虚拟机启动后vnic会照常发出DHCP Discover广播虚拟交换机根据端口组的VLAN策略给报文打上VLAN标签再转发到物理网络。物理网络侧看到这个报文的源MAC就是vnic的MAC而不是宿主机物理网卡的MAC除非你的虚拟交换机开启了混杂模式。理解这个区别非常重要。做MAC地址审计、做DHCP静态绑定、做网络安全策略时你要绑定的MAC地址是登录虚拟化平台从VM配置里看到的那个MAC而不是跑到物理交换机上去看端口学习到的MAC。如果你只盯物理交换机抓包看到一堆陌生的MAC其实都是各个VM的vnic地址这在工作量上真的会让人头大。4.2 让DHCP服务器为vnic分配固定IP的配置给虚拟机分配固定IP是刚需因为DNS、域控、业务系统这些VM地址不能变。常见做法是在DHCP服务器上做MAC保留以华为全局池为例ip pool vlan40 network 10.10.40.0 mask 255.255.255.0 gateway-list 10.10.40.1 dns-list 10.10.10.2 static-bind ip-address 10.10.40.10 mac-address 00-50-56-aa-bb-ccstatic-bind命令把IP和MAC绑定每次这个vnic请求DHCP服务器都分配同一个IP不会再被其他终端抢走。但这里藏着一个坑虚拟机的MAC不是一成不变的。克隆虚拟机或者跨存储迁移时如果平台策略允许自动重新生成MAC那这个静态绑定就会失效VM启动后拿不到保留地址反而从动态池里分到新地址。我遇到过不止一次这类问题VMware环境默认通常会保MAC但有些云平台或模板配置成新MAC模式。解决方法是固定IP需求的VM在模板或克隆设置里勾选“保留原MAC”或“不变更MAC”或者在DHCP静态绑定前先把VM当前的MAC记录下来等VM部署完确认无变化后再绑定。4.3 物理机和虚拟化混布时的DHCP规划物理机和虚拟机混在一个大网里时DHCP规划建议把两个群体的地址池分开比如物理终端用10.10.20.0/24虚拟机用10.10.40.0/24。好处不只是好区分更是为了安全和策略隔离。划分完之后虚拟化平台的分布式交换机端口组VLAN必须和物理交换机上的VLAN配置保持一致。很多分布式交换机场景里虚拟机从一台主机迁移到另一台主机如果两边端口组的VLAN策略不一致VM到了新主机上可能就拿不到原网段地址了这种现象通常在迁移后第一次续租时爆发。还有一个坑是虚拟机克隆。同一个模板克隆出来的两台VM如果没有处理MAC和SID两个vnic的MAC完全相同同时开机后DHCP服务器会认为是同一个终端给出同一份租约结果就是两台VM抢占一个IP网络时好时坏。所以模板制作时一定要在部署规范里写清楚“克隆后自动生成新MAC”并在DHCP服务器上查一下有没有重复的MAC绑定记录。如果数据中心大量使用网络装机PXEDHCP还得额外下发Option 66和Option 67分别指向TFTP服务器地址和引导文件名。这时候vnic的Boot Order也要注意虚拟机的网卡启动顺序没设对PXE可能起不来。这种场景下为装机临时准备一个单独的PXE地址池和正常业务地址池分开可以避免装机流量和业务流量互相干扰。5. 部署后最容易踩的坑和排查命令DHCP部署上线后真正的挑战才刚开始。终端拿不到IP、拿到IP上不了网、地址池神秘耗尽这些现象我在不同项目里反复见过把排查思路和命令整理成了一套速查流程。5.1 客户端拿不到IP从哪头查遇到这种情况第一步不是怀疑DHCP服务器挂了而是按顺序排查排查步骤操作关键点1. 物理链路客户端看网络图标、交换机查端口状态排除网线、端口down、VLAN标签错2. 广播域确认客户端和DHCP服务器是否同一VLAN跨VLAN一定要有中继3. DHCP Snooping接入交换机看有无丢弃记录untrust口丢弃非信任DHCP报文4. DHCP服务状态display dhcp statisticsDiscover有增长Offer无增长问题在服务器侧5. 地址池容量display ip pool池子满没满、租约被谁占着我遇到过最邪门的案子是终端和DHCP服务器在同一个VLAN明明链路通、广播也能到就是拿不到地址。最后查了一圈发现是接入交换机上开了DHCP Snooping但管理员把连接某些AP的口设成了untrust而那个AP又开了DHCP的某种透明转发功能结果服务器给的Offer全被交换机拦了。所以碰到“该响应的不响应”先看Snooping trust关系对不对这个特别隐蔽。5.2 拿到IP却上不了网先查网关和DNS地址拿到了但就是上不了网这种问题90%出在网关或DNS上。先在核心交换机上用display ip pool看这个地址对应的池子里的gateway-list写没写对再检查VLANIF接口IP是否和gateway-list一致。如果网段是20段池子网关却写成10段终端当然出不去。DNS方面用客户端ping一下DNS服务器地址能通说明网络通路没问题问题在DNS服务自身不通就要看DNS服务器是不是不在当前网段的的三层可达范围内或者中间防火墙挡了UDP 53。DHCP下发的DNS错误终端的表现千奇百怪有的能上微信不能开网页有的内网OA打不开排到最后发现都是DNS顺序问题。5.3 中继模式下服务器“看不到客户端网段”问题中继场景里有一种现象非常典型客户端发出去请求物理DHCP服务器也收到了但服务器日志显示“没有可供分配的地址”或者干脆不响应。这种时候优先怀疑作用域范围和中继的giaddr没对上。Windows服务器的DHCP作用域配置里会有“路由器”和“DNS服务器”这两个选项中继环境下这两项必须正确填写客户端网段的网关和DNS。如果你在服务器上新建了作用域但忘了把作用域激活服务器也不会分配地址这种低级错误在项目交接时经常出现。另外Windows防火墙默认可能会拦UDP 67/68安装DHCP角色时如果没放行外部网段的客户端请求进来也会被静默丢弃。5.4 地址池耗尽怎么办地址池耗尽在办公网里很常见尤其是无线终端多的场景。处理方法是临时扩容或者缩短租期但还要判断根因。用display ip pool看当前分配情况再用display dhcp statistics看Discover/OFFER的比例如果Discover和OFFER都高只是地址明显不够那就是规划容量问题如果Discover高但OFFER很低那要考虑是不是有终端在持续恶意请求把地址池“饿死”了。还遇到过一种情况地址池明明没满但终端就是拿不到IP最后查出来是地址池的excluded-ip-address配置过于激进把可用范围压缩到了一个极小区间视觉上池子还有余量实际能分的地址没几个。所以在做地址池配置的时候排除范围要谨慎尽量只排除确实被静态占用的地址不要图省事排除一大段。对了最后再分享一个我自己的经历。之前有个分公司核心交换机上配了全局池又嫌麻烦把一台物理服务器也开了DHCP两个作用域范围高度重叠结果每天都有几台电脑地址冲突断断续续折腾了两个月。后来把交换机上的本地池全部删掉只保留中继到物理服务器再把服务器作用域里的排除地址和保留地址重新理了一遍问题当天就消失了。DHCP部署这件事越简单越可靠能用一个源头就尽量别用两个先规划再动手比事后给各种奇怪现象擦屁股都要省心。