ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

DHCP服务搭建与配置详解:从原理到排错实战

DHCP服务搭建与配置详解:从原理到排错实战 1. 核心思路梳理从一个网络场景说起做网络这块的同行应该都有过这种经历办公室里几十台设备新来的同事领了电脑第一句话就是“IP地址是多少网关填什么DNS填哪个”。你一边翻台账一边念念完了他又问你“子网掩码是255.255.255.0对吧”你点点头转头就被下一个问题淹没。这种日子我过了好几年直到彻底把DHCP服务用起来才算是把自己从“人肉IP分配机”的岗位上解放出来。DHCP全称Dynamic Host Configuration Protocol中文叫动态主机配置协议。它的核心价值就一句话让设备在接入网络时自动获取IP地址、子网掩码、网关、DNS这些网络参数不需要人工干预。你家里路由器默认开了DHCP手机连WiFi才能做到“输个密码就上网”公司网络要是没配好DHCPIT运维每天光处理IP冲突和地址配置问题就要花掉大量时间。所以DHCP服务的搭建不只是网络工程师的基本功更是任何需要管理多台设备场景下的刚需。这篇内容围绕DHCP服务搭建的完整过程展开适合三类人看一是刚入行或正在备考网络认证的网工需要把DHCP从原理到配置彻底搞明白二是用eNSP做实验的学生党想知道在模拟器里怎么把DHCP和DNS联动起来三是被各种DHCP问题折磨过的实际运维人员想找到排错思路和常见坑的解法。我会把原理、配置、排错三个层面的内容揉在一起讲争取看完了你不仅能搭出一个能用的DHCP服务还能在它出问题时知道从哪儿下手。说到搭建方式实际环境里主流方案就三类一是直接用路由器或三层交换机开DHCP功能适合中小型网络二是在Windows Server或Linux上跑DHCP服务适合需要精细管理、有域环境的场景三是在eNSP这类模拟器里搭适合学习和验证配置逻辑。我接下来讲的核心思路会以eNSP作为主战场因为免费、能随时复现、不怕把生产环境搞挂而且命令和真实华为设备完全一致。1.1 为什么要搭建DHCP服务手动配置IP的痛苦先聊一个很实际的问题不用DHCP行不行小规模场景下确实行三五个人的办公室手动给每台设备配个静态IP半小时能搞定。但一旦设备数量上去了手动配置的痛点会越来越明显。第一个痛点是IP冲突。你辛辛苦苦给每台电脑记了IP结果某个同事自己改了网卡配置或者新接入的设备用了同一个地址冲突就发生了。表现就是一台设备突然断网、另一台报“IP地址已被使用”查起来非常费劲。第二个痛点是配置变更困难。公司搬家、网段调整、换网关意味着你要跑到每台设备面前重新配置一次工作量巨大。第三个痛点是无法应对临时接入的设备。客户来访、临时工位、新入职人员的笔记本电脑这些设备如果都要手动配IP你的电话会被打爆。DHCP解决的就是这些问题。它把IP地址集中在一个池子里统一管理设备上线自动领取下线自动释放基本实现“零手工干预”。而且管理员只需要改服务器端的配置所有客户端的网络参数就会在下一次续约时自动更新不需要挨个去动终端。1.2 DHCP的基本工作原理四步握手搞懂它理解DHCP的原理就绕不开经典的DORA过程也就是Discover、Offer、Request、Ack四个步骤。我用一个生活场景来类比你把行李落在了出租车上相当于设备接入网络什么配置都没有接下来你要做的第一件事是站在路边大声喊“我的行李在哪辆车上”——这就是DHCP Discover客户端以广播方式寻找可用的DHCP服务器。出租车司机听到了过来告诉你“你的行李在我车上我可以送给你”——这是DHCP Offer服务器回应一个可分配的IP地址以及相关参数。你确认了这辆车再次告诉司机“好的就你了”——这是DHCP Request客户端向服务器正式申请该地址。司机把行李交到你手上交易完成——这是DHCP Ack服务器确认分配完成客户端开始使用这个IP。这个过程看起来简单但有三个细节值得展开。第一Discover和Request都是广播报文。Discover阶段客户端没有IP当然只能广播但Request阶段客户端已经知道要哪个地址了为什么还要广播因为有可能网络里有多台DHCP服务器广播是为了通知所有服务器“已经选好了”让没被选中的服务器收回自己的Offer。第二如果在同一个广播域里有多台DHCP服务器客户端会优先响应第一个收到的Offer地址分配结果有一定随机性所以生产环境里建议避免广播域内架设多台以相同网段提供服务的DHCP。第三DHCP默认租期是24小时当租期过半约12小时时客户端会尝试续约续约成功就用原来的地址失败的话会在租期到期的87.5%时再次尝试广播整个过程用户是无感知的。1.3 两种配置模式的选择全局模式还是接口模式华为设备上开DHCP有两大配置流派全局地址池模式和接口地址池模式。很多初学者在这里最容易绕晕其实区分很简单。全局模式就是先创建一个全局的IP地址池设定好网段、网关、DNS这些参数然后在接口上执行一条命令让该接口下的主机从这个全局池里拿地址。它最大的优点是灵活一个地址池可以被多个接口复用比如三个网段的接口各自使用相同网段地址池的情况下也能配置得很规整。另外全局模式下可以做更细的分配策略比如静态绑定某个MAC到固定IP。接口模式则是直接在某个三层接口下创建接口地址池地址范围自动取该接口的网段你只需要补充配置网关、DNS、租期等参数。它的特点是配置量少、逻辑直观特别适合接口少、网段划分简单的场景。但如果网段较多且需要跨网段分配地址接口模式就不太够用了。我在实际配置中的体会是如果你的网络结构是“核心交换机上做VLAN间路由每个VLAN一个网段”优先用接口模式配置简单高效如果网络里有多个DHCP服务器协同、需要精细控制地址分配规则或者要用中继把不同网段的请求送到同一台服务器上建议用全局模式。下面的实操环节我会把这两种方式都走一遍方便你在自己的场景里选择。2. 实操配置从零到一搭起一个DHCP服务这一节进入正题我们直接在eNSP上搭环境、敲命令。有真实设备的朋友命令格式完全适用只是把模拟器换成真机而已。2.1 环境准备eNSP拓扑设计与接口规划打开eNSP我们先搭一个最小化拓扑一台路由器AR2220、一台交换机S5700、两台PC然后把它们用copper线缆连起来。拓扑逻辑是路由器作为DHCP服务器兼网关交换机做二层透传两台PC作为DHCP客户端验证效果。规划如下设备接口IP地址角色AR1GigabitEthernet 0/0/0192.168.10.1/24DHCP服务器网关PC1自动获取192.168.10.10DHCP客户端PC2自动获取192.168.10.20DHCP客户端连线时注意把路由器接口和交换机接口对应好PC分别接交换机的两个口。全部连完后先把设备都启动起来然后逐个配置别一步到位养成“做一步验证一步”的习惯后面排错会省很多事。2.2 全局模式从零到通一步步敲出可用服务第一步进入路由器配置视图开DHCP开关。华为设备默认DHCP是不开启的很多人配置了半天发现客户端拿不到地址第一步就是检查这个开关。system-view [Huawei] sysname AR1 [AR1] dhcp enable执行完dhcp enable之后设备才会响应来自客户端的DHCP请求。这是新手最容易漏掉的一步。接来下创建全局地址池[AR1] ip pool pool_10 [AR1-ip-pool-pool_10] network 192.168.10.0 mask 24 [AR1-ip-pool-pool_10] gateway-list 192.168.10.1 [AR1-ip-pool-pool_10] dns-list 8.8.8.8 114.114.114.114 [AR1-ip-pool-pool_10] lease day 1 hour 0 minute 0 [AR1-ip-pool-pool_10] excluded-ip-address 192.168.10.1 [AR1-ip-pool-pool_10] quit地址池配置里有几个点需要展开说。network定义的是地址池的网段和掩码这个网段必须和接口的实际网段一致否则客户端拿到的地址可能不可达。gateway-list是分配给客户端的默认网关一定要填网关接口的IP而不是随便写一个。dns-list配置DNS服务器如果内网有DNS就用内网的没有的话用公共DNS也行但注意某些网络环境下公共DNS可能不通实验环境没有DNS也不影响DHCP本身的地址分配验证。lease是租期默认24小时实验时可以设置一两分钟方便观察续约和释放行为生产环境一般保持默认或根据策略调整。excluded-ip-address排除掉不想分配的地址网关地址必须排除否则有可能把网关地址也分配出去导致整个网段不可达这是很经典的坑。地址池配好后进入接口视图把接口IP配上并指定DHCP的工作模式为全局模式[AR1] interface GigabitEthernet 0/0/0 [AR1-GigabitEthernet0/0/0] ip address 192.168.10.1 24 [AR1-GigabitEthernet0/0/0] dhcp select global [AR1-GigabitEthernet0/0/0] quitdhcp select global的意思是让这个接口下接收到的DHCP请求从全局地址池里分配地址。注意这个命令的前提是之前已经在全局开启了dhcp enable并且已经创建了匹配网段的地址池。2.3 接口模式的快捷配置更少命令完成同样效果接口模式适合接口少的场景配置上确实比全局模式精简一些。还是用刚才的拓扑我们把地址池策略切换一下。接口模式下不需要创建地址池直接在接口下配置即可[AR1] interface GigabitEthernet 0/0/0 [AR1-GigabitEthernet0/0/0] ip address 192.168.10.1 24 [AR1-GigabitEthernet0/0/0] dhcp select interface [AR1-GigabitEthernet0/0/0] dhcp server dns-list 8.8.8.8 114.114.114.114 [AR1-GigabitEthernet0/0/0] dhcp server lease day 1 hour 0 minute 0 [AR1-GigabitEthernet0/0/0] dhcp server excluded-ip-address 192.168.10.1 [AR1-GigabitEthernet0/0/0] quit接口模式的地址池范围会自动取接口网段也就是192.168.10.0/24起始地址是接口网段的第二个地址会自动跳过接口本身的IP分配规则相对固定。我把网关、DNS、租期、排除地址这几项通过命令直接设置好。这个模式的好处是“所见即所得”配置集中在接口视图里排查问题就不用翻全局池了。缺点刚才提过如果一个接口下需要绑定多个地址池或者做复杂的分配策略接口模式就力不从心了。2.4 细节打磨排除地址、租期策略、静态绑定和常用查询命令配置基本完成后有几个细节如果现在不做后面使用中多半会踩坑。第一个是排除地址的规划。网关地址必须排除服务器、打印机、网络摄像头这类需要固定IP的设备要么也排除在地址池之外单独给静态IP要么用DHCP静态绑定方式分配固定地址。我习惯的做法是网络里所有服务器的IP都静态配置在地址池里把服务器所在地址段整个排除掉例如excluded-ip-address 192.168.10.2 192.168.10.20剩下的段只分配给终端设备。这样服务器不会因为DHCP地址被占用而不可达排查业务故障时IP管理也更清晰。第二个是租期策略。租期太短会导致DHCP服务器负载增加客户端频繁续约租期太长又可能导致IP在设备下线后迟迟无法回收有大量临时访客的网络里地址池可能不够用。我的建议是办公终端用默认24小时或者更长会议室、访客WiFi这类临时场景可以设置8小时甚至更短。第三个是静态绑定。如果某些设备需要“每次都拿到同一个IP”但又不想手工配静态地址DHCP静态绑定是最优解。实现方式是把MAC地址和IP做绑定[AR1] ip pool pool_10 [AR1-ip-pool-pool_10] static-bind ip-address 192.168.10.50 mac-address 5489-98ad-3f2c [AR1-ip-pool-pool_10] quit注意一点全局模式下静态绑定和动态分配建议使用不同的地址段避免动态池把绑定的IP分配出去导致冲突。你可以把绑定地址集中在某个范围然后把这个范围加入排除列表这样只有绑定设备能拿到该地址。第四个是查询和验证命令。配置完不是终点验证才是关键。以下命令是排查时的高频选手# 查看所有地址池状态 display ip pool # 查看指定地址池详细信息 display ip pool name pool_10 # 查看已分配出的地址 display ip pool name pool_10 used # 查看接口上DHCP运行状态 display dhcp server interface GigabitEthernet0/0/0 # 查看当前DHCP统计信息 display dhcp statistics实验时配完就执行display ip pool name pool_10 used能看到每台客户端拿到的地址、剩余地址数、绑定类型等信息如果发现地址没分配成功这里能定位大部分问题。3. 进阶玩法中继、DNS联动与安全防护基础的DHCP通了之后把视野放远一点。实际网络里DHCP服务不会只服务一个网段也不会孤立地存在。这一节把热词里提到的几个进阶方向挨个讲透包括DHCP中继、DNS联动、DHCP Snooping。3.1 DHCP中继的原理与配置跨网段分配不再难先想一个问题DHCP Discover是广播报文路由器默认不会跨网段转发广播。那如果公司有两个网段192.168.10.0/24和192.168.20.0/24DHCP服务器放在10网段20网段的客户端怎么拿地址两个办法每个网段各放一台DHCP服务器成本高且管理散乱网络的边界设备上用DHCP中继技术把其他网段的DHCP请求单播转发给服务器。这个场景非常适合有VLAN划分的园区网络——核心交换机上做VLAN间路由DHCP服务器集中在核心或独立服务器各VLAN网关接口开启DHCP中继即可。H3C和华为设备的配置思路很类似在网关接口下指定DHCP服务器的方向。华为的命令方向如下假设两台路由器通过G0/0/1相连需要让R2的DHCP服务器为R1下联的20网段分配地址在R1上配置中继模式指向R2的接口地址[AR1] interface GigabitEthernet 0/0/0 [AR1-GigabitEthernet0/0/0] ip address 192.168.20.1 24 [AR1-GigabitEthernet0/0/0] dhcp select relay [AR1-GigabitEthernet0/0/0] dhcp relay server-ip 10.0.12.2 [AR1-GigabitEthernet0/0/0] quit [AR1] interface GigabitEthernet 0/0/1 [AR1-GigabitEthernet0/0/1] ip address 10.0.12.1 24注意中继配置的关键点dhcp select relay开启中继后原来的dhcp select global或者dhcp select interface就不再生效同时在服务器上必须为20网段单独创建匹配的地址池否则服务器无法给中继上来的客户端分配地址。很多人在中继场景里排错半天最后发现是服务器上忘了配20网段的地址池。3.2 DHCP与DNS联动从“能上网”到“按名访问”DHCP地址池里的dns-list参数是DHCP服务“顺手”完成DNS配置的方式——客户端拿到地址的同时也能拿到一个或多个DNS服务器IP。这看起来只是个小参数但实际影响很大如果客户端的DNS填错了表现是“网络通微信能发网页打不开”排查起来能绕一大圈。在eNSP环境里搭一个DHCPDNS联动的拓扑是热词里很多人搜的方向。拓扑加一台设备充当DNS服务器或者在路由器上直接启用DNS服务然后在DHCP地址池里指定内网DNS的IP。这样客户端拿到地址后能用域名访问内网服务器也能正常解析外网域名。我在eNSP里习惯这么搭再添加一台AR2220当作内网DNS服务器与DHCP路由器通过G0/0/1互联地址规划为192.168.10.2/24。然后在DHCP路由器上做DNS代理并配置域名与IP的对应关系[AR1] dns resolve [AR1] dns server 192.168.10.2 [AR1] ip host test.com 192.168.10.100dns resolve开启DNS解析功能dns server指定上游DNS服务器地址ip host建立静态域名解析记录。这样PC从DHCP地址池里拿到dns-list配置的DNS地址后pingtest.com就能解析到192.168.10.100实现完整的域名访问链路。实验时要注意PC需要先把DNS地址更新一下如果之前在DHCP分配时没带DNS参数可以在PC的命令行里用ipconfig /renew重新续约拿到新的DNS配置。这个操作也提示了一点DHCP不止分配IPDNS配置也是它的核心能力排错时别忘了查看客户端拿到完整的网络参数。3.3 DHCP Snooping防私接路由和DHCP仿冒的利器网络里最让人头疼的安全问题之一就是有人私接了一台小路由器或者野生DHCP服务器导致整个网段的用户轮番掉线IP乱跳。应对这个问题的标准方案是DHCP Snooping。DHCP Snooping的原理是在交换机上开启信任机制接口分为信任接口和非信任接口。信任接口通常是连接合法DHCP服务器的接口可以接收和转发所有DHCP报文非信任接口上只允许转发DHCP Discover和Request报文但过滤掉所有来自非信任方向的Offer和Ack报文——也就是说如果非信任接口方向有人尝试发DHCP应答交换机直接丢弃。华为交换机上的配置思路很清晰[Huawei] dhcp snooping enable [Huawei] interface GigabitEthernet 0/0/1 [Huawei-GigabitEthernet0/0/1] dhcp snooping trust [Huawei-GigabitEthernet0/0/1] quit [Huawei] interface GigabitEthernet 0/0/2 [Huawei-GigabitEthernet0/0/2] dhcp snooping disable其中连向DHCP服务器的接口配成trust其余接终端的接口保持默认的非信任状态。做完之后在交换机上可以用display dhcp snooping user之类的命令查看Snooping的表项验证是否记录了合法DHCP分配的信息。这个功能在纯二层接入网络里尤其重要。建议所有接入交换机都开启同时配合端口安全策略能有效减少私接路由和DHCP仿冒带来的故障。4. 常见问题与排查技巧实录DHCP服务搭建不难难的是出了问题后快速定位。这一节把我在实际环境中踩过的坑、处理过的故障整理出来对照着看能少走很多弯路。结合热词里被搜到最多的几个问题挨个说清楚。4.1 DHCP Client错误5与“DHCP关闭后连不上WiFi”的真实原因DHCP client错误5是Windows系统里比较典型的DHCP相关报错。很多人在事件查看器里看到它第一反应是“完了网卡坏了”。其实错误5的含义通常是“DHCP客户端服务无法正确初始化或访问注册表”常见诱因有三个网卡驱动异常、DHCP Client系统服务被禁用、杀毒软件或安全软件做了拦截。排查顺序我建议这样走先在services.msc里确认DHCP Client服务是否启动如果被禁用就改为自动并启动再进设备管理器把网卡驱动重装一次最后检查安全软件是否有禁网动作。需要提醒的是网卡启用DHCP和Windows的DHCP Client系统服务不是一回事——前者是获取IP地址的开关后者是Windows自己管理地址租约的服务进程。很多人把这两者混为一谈导致排查方向跑偏。热词里另一个高频问题“DHCP关闭后连不上WiFi”现象很常见家里路由器管理页面里把DHCP关了手机和电脑就连不上网了。原因很简单家庭网络里DHCP通常是设备获取IP的唯一途径关闭它后终端在连接WiFi时无法获取地址只能等待地址分配超时自动放弃表现就是“一直在转圈提示无法连接”。如果你确实需要关闭DHCP比如想把路由器当纯AC用正确做法是给所有终端配置静态IP。但我不太推荐普通用户这么折腾因为DHCP开关的收益通常很低风险却很高。如果只是想避免两个路由器都开DHCP造成冲突关闭其中一个的DHCP即可同时确保这个被关的路由器工作在AP模式下而不是仅关掉DHCP。4.2 地址池“神秘耗尽”谁偷走了我的IP实验和实际运维中还有一类问题出现的频率极高地址池明明分配不多但显示所有地址都已用完。排查思路大体可以按以下流程展开现象可能原因检查命令地址池显示空闲地址为0但在线设备不多地址租期过长设备下线后地址没及时释放display ip pool name pool_10 used查看哪些地址长期占用大量地址被同一MAC反复获取有异常设备循环续约或网络环路检查绑定的MAC和时间戳定位异常端口地址池被分配完但实际用户少存在私接路由器或DHCP中继的广播域用Wireshark抓包分析Discover流量来源使用 DHCP Snooping 定位攻击源所有设备突然获取不到新地址DHCP服务器宕机或对端设备重启导致地址族会话异常display dhcp statistics看报文统计实际处理过一个很经典的外网使用场景公司一个网段只有254个地址但在线终端超过300台导致后来的人怎么也拿不到地址。当时我把故障定位到地址池太小、租期设置过长然后将租期从24小时缩短到8小时并把固定设备全部挪到独立网段或改用静态绑定地址池很快就缓解了。事后复盘发现还有一个深层原因是这台DHCP服务器还承担着另一个网段的中继请求部分终端跨网段获取地址导致本网段地址池被占了一部分。解决方法是把中继请求导向独立的地址池或者对各网段的地址池做清晰的划分与隔离。4.3 eNSP重启后配置全丢怎么办单机版eNSP有个非常折磨人的特性默认情况下设备配置是存在仿真内存里的关闭eNSP或者断电后配置全部丢失。很多人辛辛苦苦搭了一整套DHCPDHCP中继拓扑改了一堆参数重启后需要从零再来那种感觉真的糟糕。这个问题的解法有两个方向。第一个是保存配置并导入配置完成后在路由器上执行save然后在拓扑上右键设备选择saved config里的合适选项保存或导出配置文件。重开eNSP后双击设备选择导入配置即可。第二种是主动记录离散配置自己做一份文档这样即便eNSP模拟器环境出问题配置也能快速恢复。我在实验时习惯把每一步命令都记录下来标上注释配完一个功能点就复制一份到笔记。这不只是为了防丢也是让自己对配置结构形成清晰记忆。等你实际排错时手上的记录就是第一手参考资料。4.4 问题速查表核心报错快速定位把前面提到的问题和排查命令整理成一张速查表方便实际使用中对照故障现象常见原因排查方向客户端一直“获取IP中”DHCP服务未开启确认是否已执行dhcp enable有客户端拿到169.254开头的地址DHCP服务器不可达或地址池耗尽在服务器上display ip pool查看剩余地址网关地址被分配出去了网关地址未加入排除列表在地址池中增加excluded-ip-address部分网段拿不到地址但服务器正常未配置匹配网段的地址池或多个地址池冲突检查路由器上地址池是否包含该网段若用了中继则检查中继配置客户端能拿到地址但上不了网DNS配置错误或网关地址错误查看客户端获取的网关和DNS对照规划核对私接路由导致大量掉线DHCP仿冒或DHCP冲突在交换机上开dhcp snooping重开eNSP后配置消失未保存配置配置完成后执行save并导出排查DHCP问题核心心法就是先确认服务端开了没有再确认地址池和接口配置对不对接着看客户端拿没拿到地址最后抓包看报文交互过程。顺着这个链路走大多数问题都能定位。5. 最后说几点实操心得DHCP服务的搭建从原理到配置再到排错和进阶通篇走下来其实就完成了一件简单而重要的事让网络里的设备能在无人干预的情况下自己获得正确的网络参数。你做的每一步命令、每一项参数本质都是在给这个自动化的过程提供规则。我个人在实际操作中的体会是配置DHCP最容易犯的错误不是命令不会敲而是忘记先检查“服务开关是否开启”和“地址池网段是否对应接口网段”这两个前置条件。很多在群里求助的同行把配置贴出来一看三层接口的网段是192.168.20.0/24地址池却建的192.168.30.0/24客户端当然拿不到地址。所以在写完地址池和接口配置后第一时间执行display ip pool看看地址池状态做个快速自检能省下后面一长串排错时间。最后再分享一个小技巧在你刚搭建完DHCP服务、还没有大量终端接入的窗口期用一台电脑反复执行ipconfig /release和ipconfig /renew同时在路由器上用display dhcp statistics和display ip pool used观察地址分配和释放是否顺畅。这种简单反复的验证比等到正式上线后再发现问题要舒服得多——别问我怎么知道的都是后来补实验验证补出来的教训。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进