ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

H3C模拟器DHCP地址池配置实战:从DORA流程到排错指南

H3C模拟器DHCP地址池配置实战:从DORA流程到排错指南 1. 从零认识H3C模拟器里的DHCP实验环境先聊个比较实际的问题很多朋友把“华三模拟器”和华为eNSP搞混命令行还没敲就卡在环境上。我最早做DHCP实验时也犯过这个错——拿eNSP的指令往华三里灌结果命令不识别不说拓扑结构还完全不同。这里先给小白钉死一个坐标华三模拟器一般是指H3C官方出的HCLH3C Cloud Lab对应的是Comware V7/V5命令体系和华为eNSP的VRP体系虽然“长得像”但不少细节命令格式截然不同千万别想当然。HCL模拟器对电脑配置的要求比eNSP低这一点在老旧笔记本上特别有优势。我用一台8G内存、i5四代的老机器跑通了包含三台路由器和一台三层交换机的拓扑整体还算流畅。装好之后你会在界面上看到设备拖拽区里面有路由器、交换机、防火墙和主机节点版本型号选MSR36-20这种常用款就行。值得提醒的是HCL依赖VirtualBox装新版HCL前如果电脑里已经有老版本VirtualBox建议先卸载干净否则设备启动时报错能折腾半天。做DHCP实验的拓扑非常简单一台路由器加一台主机中间用网线连上没了。我这里建议把路由器接口选在GigabitEthernet0/0主机的网线也接到同一台交换机或者直连。很多教程喜欢在中间再加一台傻瓜交换机那不是必须的直连反而更容易排查问题。等拓扑搭完先别急着写配置双击路由器进入命令行界面先确认设备能正常启动、没有报错。如果设备启动失败优先检查VirtualBox版本和电脑的虚拟化开关这属于模拟器环境的坑和DHCP配置本身没关系。等设备稳定运行后我建议你先看一眼接口状态R1display interface brief看到GigabitEthernet0/0的链路状态是UP再往下走。这一步能帮你把“模拟器链路问题”和“后面的DHCP配置问题”隔离出来后面排查时少跑冤枉路。说实话我见过很多人配置怎么检查都对结果就是拿不到地址最后发现主机根本没连到路由器的这个接口上这种低级错误在模拟器里反而最常见。2. 先把DHCP的干活逻辑捋清楚配置才能不踩坑很多人配置DHCP就是照抄命令三条两条敲完就完事地址拿不到就懵了。要真正会排错还是得先明白DHCP在后台到底干了什么事。你完全可以把它理解成酒店前台办入住客户终端进门想住店它先喊一嗓子“有没有前台”前台听到后拿出一间空房空闲IP地址告诉客户“这间房给你了”客户确认入住前台在登记本上记下一笔。只是在这个场景里客户和服务员互相对话用的是四个特殊报文Discover、Offer、Request、Ack业界管这个叫DORA过程。Discover阶段是客户端在网络上广播“我要地址”路由器收到后从地址池里挑一个空闲IP通过Offer报文回应客户端可能同时收到多个DHCP服务器的Offer它会选择第一个到达的再发Request确认服务器收到Request后下发Ack客户端这才正式启用这个地址。看似简单但这里有个特别容易忽略的点Offer和Ack不是广播而是单播前提是客户端已经有IP地址可以接收首次获取时客户端还没有IP所以有些报文还得仰仗广播或特殊处理。这也就是为什么模拟器里如果链路桥接不对报文转发不到客户端整个流程就卡在第一步。明白了DORA流程你就能理解地址池配置的本质本质上就是告诉路由器“我手上哪些IP可以拿来分、网关是谁、DNS是谁、租期多久”。CIDR网段定义了酒店的房间范围网关列表就是告诉房客“出门走哪条路”DNS是告诉房客“外面怎么查路”。配置时你设置的所有参数最终都是通过DHCP Option字段下发给客户端的。华三的DHCP配置还涉及两种模式全局地址池和接口地址池。全局地址池dhcp select global是“所有接口统用一个地址池”适合网络规模不大、只有一个网段的场景接口地址池dhcp select interface是“这个接口只负责分它自己网段里的地址”适合一个设备上多个接口各管一段的场景。标题里说的“DHCP地址池配置”默认就用全局地址池简单直接也方便后面的错误排查。搞清楚这个基本逻辑之后下面的配置操作就是水到渠成的事。3. 三分钟跑通DHCP地址池配置全流程3.1 拓扑搭建与基础连接先把拓扑搭好拖一台MSR36-20路由器和一台Host主机到画布上用网线把路由器的GigabitEthernet0/0和主机的网卡连起来。然后双击路由器进入CLI先把设备名称设成R1方便后面看配置时能分清是哪台设备。H3Csystem-view [H3C]sysname R1 [R1]接着给GigabitEthernet0/0配上IP地址这是整个DHCP实验的“地基”。地址池可以分出去但接口本身必须有一个同网段的IP否则客户端的网关就没着落。[R1]interface GigabitEthernet0/0 [R1-GigabitEthernet0/0]ip address 192.168.10.1 255.255.255.0 [R1-GigabitEthernet0/0]undo shutdown [R1-GigabitEthernet0/0]quit这个192.168.10.1就是你之后给客户端指定的网关地址。接口掩码必须是24位也就是说这个接口管的是192.168.10.0/24这一整段后面地址池的网段也要和它保持一致否则客户端拿到一个跨网段的地址根本没法跟网关通信。3.2 全局地址池配置命令逐条讲接下来是重头戏配置DHCP地址池。先全局打开DHCP服务这个步骤很多人会漏掉——虽然部分华三设备默认开启DHCP服务但在模拟器里我强烈建议你手动执行一次图个安心。[R1]dhcp enable然后创建全局地址池。地址池名称可以随便起但建议有语义比如叫lan表示局域网[R1]dhcp server ip-pool lan [R1-dhcp-pool-lan]network 192.168.10.0 mask 255.255.255.0 [R1-dhcp-pool-lan]gateway-list 192.168.10.1 [R1-dhcp-pool-lan]dns-list 223.5.5.5 114.114.114.114 [R1-dhcp-pool-lan]expired day 1 hour 0 minute 0 [R1-dhcp-pool-lan]quit这里每一条都有它的意义。network命令定义了可分配地址的范围是192.168.10.0/24也就是从192.168.10.1到192.168.10.254这254个地址。gateway-list指定客户端拿到的默认网关是192.168.10.1就是接口地址。dns-list填了两个国内DNS主备模式保证客户端解析域名时不会因为单一DNS故障而彻底断网。expired命令把租期设成1天方便观察租约变化。如果你不写expired华三默认租期就是1天所以这条命令可以省略但我还是建议写出来养成显式配置的习惯也方便日后维护时一眼看清租期策略。配置完地址池之后最关键的收尾动作来了在接口上启用DHCP服务。光有地址池而接口没启用DHCP客户端照样拿不到地址这个坑的隐蔽程度之高我后面专门讲。[R1]interface GigabitEthernet0/0 [R1-GigabitEthernet0/0]dhcp select global [R1-GigabitEthernet0/0]quitdhcp select global的意思是让这个接口走全局地址池分配。与之对应的是dhcp select interface表示用接口自身的地址池分配。这里我们选全局模式与刚才创建的lan地址池对应。搞完这些别忘了保存配置[R1]save force模拟器里重启设备后配置会丢save force是无交互强制保存省得一问一答。3.3 验证让终端真正拿到地址配置写完了关键是要亲眼看到客户端拿到地址这才能证明整个链路是通的。HCL模拟器里的Host节点有个小坑部分版本的主机模块只支持静态IP配置点了DHCP也不一定真能自动获取。更稳妥的办法是再拖一台路由器R2进来当作DHCP客户端用命令行验证。先给R2的接口配上自动获取R2system-view [R2]interface GigabitEthernet0/0 [R2-GigabitEthernet0/0]ip address dhcp-alloc [R2-GigabitEthernet0/0]quit等待几秒后查看接口地址[R2]display ip interface brief如果看到GigabitEthernet0/0上已经有192.168.10.x的地址说明DHCP服务流程已经打通了。如果你想看更直观的证据可以切到R1上查地址池分配记录[R1]display dhcp server ip-in-use输出结果里会列出分配给客户端的IP地址、MAC地址、租期剩余时间看到这些就稳了。我在实测里从敲第一行命令到客户端拿到地址全程不超过三分钟所以“三分钟搞定”这个说法真不是标题党。4. 模拟器里拿不到地址五个高频坑的逐层排查4.1 先按层级排查法从物理链路到DHCP服务配置看起来都对但客户端就是拿不到地址这种问题我碰到太多次了。DHCP涉及链路层、IP层和应用层三个层面排错就得一层层来从下往上打。我自己的固定流程是四步第一步查链路。在R1上执行display interface brief确认GigabitEthernet0/0状态是UP。如果显示DOWN大概率是网线没连好或者主机模块没正确启动。模拟器里偶尔还会出现设备启动完但接口假死的情况把设备重启一次就好。第二步查接口IP。接口没有IPDHCP服务就没有“根据地”。执行display current-configuration interface GigabitEthernet0/0确认有ip address 192.168.10.1 255.255.255.0并且有dhcp select global这行。这里有个隐蔽坑如果你的接口上配的是undo dhcp select相当于禁用了DHCP那地址池再完美也没用。第三步查地址池配置。执行display dhcp server pool检查地址池的网络号、掩码、网关列表是否和接口IP在同一网段。地址池写成了192.168.20.0接口却是192.168.10.1客户端收到Offer一看网关和自己不在一个网段直接丢弃这是非常典型的问题。第四步查防火墙/ACL。模拟器默认没有防火墙拦截但如果你手贱配过ACL又在接口上packet-filter了那DHCP报文就可能被拦了。我现在习惯先全局查一遍ACL配置[R1]display acl all有就逐条看有没有deny udp端口67/68的规则DHCP走的是UDP 67服务器和68客户端这两端口被屏蔽一切白搭。4.2 五个高频坑的定位和修复除了上面的整体思路我再把平时被问得最多的五个坑单拎出来每个都是真实踩过的你别再踩一遍。坑一客户端拿到169.254.x.x地址。这是Windows系统在DHCP失败时自动生成的APIPA地址。拿到这个地址说明客户端发出Discover后没人回应或者是回应报文被丢了。优先查dhcp enable有没有全局开启其次查接口上有没有dhcp select global。我在模拟器里最常遇到的原因是地址池配了但忘了在接口下调用dhcp select整整排查了二十分钟才反应过来。坑二能拿到地址但Ping不通网关。这个问题多半出在“网关地址和接口地址不一致”。地址池里的gateway-list写了192.168.10.254但接口IP是192.168.10.1客户端拿到192.168.10.254当网关数据包发给一个根本不存在的地址自然Ping不通。把gateway-list改成192.168.10.1问题立刻消失。坑三地址池里明明有空闲地址但客户端就是分配不到。这种情况建议看display dhcp server statistics你会发现“Exhausted”计数在涨说明地址池被占满了。有可能是你之前做实验时客户端租了地址没释放租期又设成无限配置成expired unlimited导致地址一直被占着。解决办法是用reset dhcp server ip-in-use强制清理租约或者把地址池范围扩大。坑四配置完保存了重启设备后地址池不见了。模拟器设备重启后如果不重新加载配置刚才的配置全部丢失。你明明敲了save force但设备重启时加载的却是另一个配置文件或者启动时直接跳过了配置文件。这里我建议用display saved-configuration检查保存的配置是否包含DHCP相关命令如果空白就得重新保存。另外HCL的老版本有概率出现保存文件损坏的问题配置复杂的话干脆把配置导出到本地设备重启后重新导入。坑五路由器上有多个接口客户端通过另一个接口接入拿不到地址。这在只有一台路由器的实验环境里最容易犯。你用GigabitEthernet0/1连接了主机但只在GigabitEthernet0/0上配了dhcp select global其他接口默认没有启用DHCP。解决方案有两个一是把每个接入接口都配dhcp select global二是用dhcp select global在系统视图下给所有接口统一启用[R1]dhcp select global all注意这个命令在不同版本里的格式略有差异如果报错就逐接口配。这个坑在模拟器里不明显因为模拟器接口少但放到真实网络里同一个路由器的多个VLAN接口都跑DHCP时这就是标配操作了。5. 真实场景进阶地址保留、中继与地址池微调5.1 静态绑定让指定设备永远拿到固定地址DHCP不只是“从Range里随机捞IP”这么简单。打印机、服务器、网络摄像头这类设备需要固定的IP但你不想去设备上手工配地址维护麻烦这时就能用静态绑定。华三的地址池支持把某个MAC地址和IP地址强行绑定绑定之后这个设备每次请求都会拿到同一个IP。配置方法是在已有的地址池里加两条绑定命令或者单独创建一个地址池[R1]dhcp server ip-pool printer [R1-dhcp-pool-printer]static-bind ip-address 192.168.10.200 mask 255.255.255.0 [R1-dhcp-pool-printer]static-bind mac-address 00e0-fc00-0001 [R1-dhcp-pool-printer]quit这样MAC为00e0-fc00-0001的设备每次都会拿到192.168.10.200。需要注意这个地址必须落在接口网段内同时最好在普通地址池里排除掉它以免同一个IP被动态分配出去造成冲突[R1]dhcp server forbidden-ip 192.168.10.200静态绑定和动态分配混用时这个“forbidden-ip排除”的操作特别关键很多人漏掉后出现IP冲突排查半天才发现是绑定地址和动态地址池重叠了。5.2 DHCP中继跨网段也能分地址真实网络里客户端的网段和DHCP服务器往往不在同一个广播域比如办公楼的每个楼层一个VLAN路由器在核心机房。DHCP Discover报文是广播的路由器不会跨网段转发广播这时候就需要一台设备充当“传话筒”——DHCP中继。中继收到客户端的广播请求后以单播形式转给远端DHCP服务器再把服务器的回应转回客户端。模拟器里验证这个场景非常方便两台路由器R1和R2R1是DHCP服务器R2连接客户端VLANR1和R2之间互联R2上配中继指向R1[R2]interface GigabitEthernet0/1 [R2-GigabitEthernet0/1]ip address 192.168.20.1 255.255.255.0 [R2-GigabitEthernet0/1]dhcp select relay [R2-GigabitEthernet0/1]dhcp relay server-address 192.168.10.1注意R2连接客户端的接口要启用中继模式连接R1的接口保持普通接口就行。R1上的地址池要包含192.168.20.0这个网段并且把网关指到192.168.20.1。这样客户端在192.168.20.0网段里发广播请求R2会把请求转给R1R1从地址池里挑192.168.20.x的地址回应。这个配置我一开始总记不住后来简化成一句口诀客户端在哪个网段地址池就建哪个网段中继指向服务器接口模式要切换。5.3 地址池的微调租期、排除和Option调试DHCP时把租期改短能让测试节奏明显加快。模拟器里实验默认租期1天太长了你可以把租期改成1分钟方便反复观察客户端获取、续租、释放的完整过程[R1-dhcp-pool-lan]expired day 0 hour 0 minute 1这样配置后客户端地址到期马上释放你就能在短时间内反复测试整个DHCP生命周期验证租约过半续租T1、租约87.5%续租T2这些细节。现场抓包时短租期还能省掉你手动释放地址的时间。排除地址也是一定要掌握的技巧。网络里总有那么几个手工配置的固定IP比如网关、管理地址这些地址不应该被DHCP分配出去。在地址池创建前先用forbidden-ip把它门阉割掉[R1]dhcp server forbidden-ip 192.168.10.1 192.168.10.10这条命令的意思是从192.168.10.1到192.168.10.10这10个地址都不能动态分配。注意forbidden-ip要在创建地址池之前或者之后配置都行但必须在分配地址前生效如果已经分配出去了再配置forbidden-ip也没法回收已分配的地址。Option配置属于进阶玩法但也挺实用。比如给IP电话下发TFTP服务器地址Option 66给无盘工作站指定启动文件名Option 67华三里用option命令就能下发的。这么说吧DHCP不只是“发IP地址”它本质上是你管控终端配置的一种手段地址池里能带的信息比你想的多得多我现在给公司内部的智能设备做初始化时很大一部分配置就是靠DHCP Option完成的。6. 写在最后我踩过的那几个“老坑”说句实话我在模拟器上第一次做DHCP实验时最深刻的教训不是命令不会敲而是“以为配置完就结束了”。DHCP是个“慢半拍”的服务接口刚配好DHCP select global时客户端网卡如果已经缓存了旧的租约可能要等租约过期才会重新请求你以为配置错了其实只是时机没到。这种情况可以用ipconfig /release和ipconfig /renewWindows快速刷新模拟器里对应就重启一下客户端设备比干等半小时强。还有一点经验之谈HCL模拟器里敲命令如果出现% Unrecognized command先别怀疑设备版本多半是你把命令格式记错了。华三的V7命令对缩写支持得很克制比如gateway-list不能缩写成gatewaystatic-bind不能缩写成static多敲一个单词或少敲一个单词都会报错。我在模拟器环境里最常看到的报错不是配置逻辑不对而是这些“手滑”级别的命令拼写问题。所以遇到报错时先逐字检查一遍命令拼写再上网搜通常能省不少时间。最后再分享一个建议模拟器练DHCP时不要只盯着“拿到地址”这一结果把debugging dhcp server packet打开看一遍完整的DORA报文交互过程记住每个报文从哪里来、到哪里去、携带了什么关键字段。等你在模拟器里把DHCP的每个细节都看熟了再到真实路由器上配地址池你会觉得一切轻车熟路遇到问题也能从根上判断原因。这也是我为什么一直推荐模拟器学习的原因——它把真实网络里那些容易出错的细节压缩到一个可控的范围内让你低成本地积累经验。
RELATED READING

延伸阅读

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