干了这么多年网络,接到最多的求助就是:为什么新买的电脑插上网线拿不到IP?或者,为什么分公司那边明明建了VLAN,设备却一直上不了网?这两个问题看着无关,其实都指向同一个东西:DHCP,以及与之配套的DHCP中继。今天我就把这两个底层原理拆开讲清楚,再给出可以直接抄作业的实战配置。不管你是在校学生、刚入行的运维,还是被公司网络折腾到崩溃的兼职网管,这篇内容都能帮你少走弯路。
1. DHCP到底在解决什么问题:先理解广播与地址分配
1.1 手动配IP为什么会劝退:网段、掩码、网关、DNS的关联
很多人第一次接触网络时,觉得给电脑设置IP是一件很简单的事。你打开网络适配器,填一个IP地址,填一个子网掩码,填一个默认网关,再填一个DNS服务器,好像就完事了。但等你真的负责一个几十台、几百台设备的网络时,手动配IP就是灾难。
举个例子:一个办公室有60台电脑,按192.168.10.0/24这个网段划分,你要从192.168.10.10一直配到192.168.10.70。先不说你要一台一台点鼠标的时间成本,光是“哪台机器用了哪个IP”这个台账,就很难维护。今天有人离职,电脑被收走,明天有人带来一台笔记本临时上网,后天打印机需要固定IP,你会发现IP冲突是迟早的事。一旦冲突,两台设备同时掉线,重启也好、换网口也好,问题依旧顽固,最后只能挨个排查ARP表。
而IP地址背后还挂着另一串参数:子网掩码决定这个地址属于哪个网段,默认网关决定访问外网时把数据包交给谁,DNS服务器决定域名怎么解析。这四个参数任何一个填错,结果都可能是“能上内网但上不了外网”或“能上外网但打不开网页”。手动配置的工作量不只是填IP,而是要把这四件套全部填对,这在实际操作中几乎不可能长期维持。
1.2 DHCP的核心价值与适用场景
DHCP,全称Dynamic Host Configuration Protocol,动态主机配置协议,就是为解决上面的问题而生的。它的思路很直接:每台设备接入网络时,自动向网络中的DHCP服务器申请IP地址,服务器从预先规划好的地址池里挑一个空闲地址分配出去,同时把子网掩码、网关、DNS这些参数一并通过报文下发。客户端整个操作过程不需要人工干预,插上网线或者连上Wi-Fi就能拿到一套合法参数。
这种方式带来的最大好处是集中管理。你只需要在DHCP服务器上维护一张地址池表,哪个网段分配哪些地址、保留哪些地址给打印机和服务器,都在一个界面里搞定。设备来了就分,走了就回收,避免了手工维护台账的麻烦。DHCP还能配合Option参数下发更多信息,比如PXE引导文件让电脑网络启动装系统、Option 42下发NTP服务器地址让设备自动对时,这些都是手动配IP很难做到的。
适用场景也很清楚:终端数量多、流动性大、网络参数需要统一管理的环境,都应该使用DHCP。办公网络、学校机房、商场Wi-Fi、酒店客房,都是典型场景。但注意,并不是所有设备都适合DHCP,核心交换机、路由器、防火墙的互联地址、服务器地址,通常建议使用静态IP。这类设备数量少、地址固定、需要被其他设备稳定访问,一旦被DHCP改掉,整个网络就乱了。
1.3 DHCP与静态IP的关系:使用静态IP还需要DHCP吗
有人会问:我用静态IP,还需要DHCP吗?我的建议是:大部分终端设备不要用静态,但关键设备必须用静态。这不是矛盾,而是分层思路。把DHCP理解成“自动分配终端地址的机制”,把静态IP理解成“关键节点的人工钉死”,两者是配合关系,不是替代关系。
实际网络中常见做法是:终端统一走DHCP,服务器、打印机、网络设备通过DHCP保留地址绑定MAC,实现“看起来是静态、管理起来是DHCP”的效果。这样既保证了终端接入灵活,又保证特殊设备地址固定。DHCP服务器上配置一个MAC与IP的绑定,客户端每次获取到的都是同一个地址,效果等同于静态配置,但管理成本更低。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. DHCP工作机制深度拆解:四步交互与租期管理
2.1 67/68端口与四步交互:Discover、Offer、Request、Ack
DHCP通信基于UDP协议,客户端使用68端口,服务器使用67端口。整个过程大家习惯叫“四步握手”,但实际报文交互里还包含续租和释放,远不止四个包。我刚入行时最喜欢用抓包看这个过程,看完一次基本就不会忘记。
第一步,客户端发送DHCP Discover报文。这个报文是广播的,源IP是0.0.0.0,目标IP是255.255.255.255,客户端想通过广播找到网络里所有能提供地址的DHCP服务器。
第二步,服务器收到Discover后,会从配置好的地址池里选一个可用地址,回应一个DHCP Offer报文。Offer同样是广播或单播,里面带着拟分配的IP地址、掩码、租期、网关和DNS等参数。如果网络里有多个DHCP服务器,客户端可能会收到多个Offer。
第三步,客户端从收到的多个Offer中选择一个,通常是第一个到达的,然后发送DHCP Request报文,明确告诉网络“我要用哪个服务器给的哪个地址”。这个报文的特殊之处在于,它仍然以广播形式发出,目的是让其他DHCP服务器也能听到并收回自己预分配的地址。
第四步,被选中的服务器发送DHCP Ack报文,确认租约生效。客户端收到Ack之后,把网络参数套在自己身上,开始正常通信。
如果客户端在发送Discover之后迟迟收不到Offer,它会重试四次,间隔分别为1秒、2秒、4秒、8秒。全部失败后,Windows客户端会自动配置一个169.254.x.x地址,也就是APIPA地址,表示网络里没有可用的DHCP服务。这个地址只能用于局域网内小范围的临时通信,无法访问外网。
2.2 租期、T1、T2与续租机制
DHCP分配的地址是有有效期的,这就是租期,英文叫Lease Time。租期不是一个摆设,它的核心作用是回收长时间未使用的地址,避免地址耗尽。
客户端拿到地址后,并不是等到租期结束才去续租,而是在租期用到一半时就开始续租。这个时间点叫T1,默认是租期的50%。到T1时,客户端会以单播形式向当初分配地址的服务器发送DHCP Request,请求续租。如果服务器同意,会回复DHCP Ack,租期重新计算。
如果T1时服务器没有响应,客户端会继续使用地址,等到租期的87.5%时进入T2状态。T2之后,客户端不再只找原服务器,而是以广播形式发送DHCP Request,让网络中任意一台DHCP服务器都能响应。只有到了T2之后还拿不到响应,租期彻底到时,客户端才会放弃这个地址,重新开始完整的四步交互。
这里有个实际经验:租期太短,比如5分钟,会导致网络里充斥着大量续租报文,增加无线AP、交换机的CPU压力;租期太长,比如30天,又会导致地址回收不及时,设备流动性大的环境下地址池容易耗尽。办公网络一般建议设置24小时到7天之间,酒店或者商场等高流动场景,可以缩短到2到4小时。
2.3 客户端如何选择地址池与网关:Option参数解析
DHCP最容易被低估的功能就是Option参数。地址只是DHCP下发内容的一部分,真正让设备实现“零配置”的,是各种各样的Option字段。
最常见的Option是3号(路由器)和6号(DNS服务器)。客户端拿到Ack后,不仅要配置自己的IP地址和掩码,还要从Option 3里获取默认网关地址,从Option 6里获取DNS服务器地址。如果你的网络没有下发这两个Option,就会出现“IP是拿到的,但网站就是打不开”的诡异问题。
网络启动场景下,Option 66和Option 67也很实用。Option 66指定TFTP服务器地址,Option 67指定启动文件名,客户端设置网络启动后,会从DHCP服务器拿到这两个参数,然后去TFTP服务器下载引导文件完成系统部署。还有Option 42用于下发NTP服务器地址,Option 121用于下发静态路由表,这些都是生产环境中常用的利器。
在配置DHCP服务器时,除了管好地址池本身,一定还要检查下发了哪些Option。不少网络故障其实不是地址不够用,而是服务器没有给客户端下发默认网关和DNS,导致设备能拿到IP却无法路由。
3. 为什么需要DHCP中继:跨网段分配的核心矛盾
3.1 广播被隔离后发生了什么:广播域与VLAN
前面讲DHCP工作时,反复出现一个词:广播。Discover报文是广播,Request报文也是广播。广播报文只能在同一个二层广播域内传播,不能跨越路由器或者三层交换机。
现代企业网络为了提高安全性和管理效率,都会通过VLAN把网络切成多个广播域。财务部一个VLAN,办公区一个VLAN,服务器区一个VLAN,各VLAN之间通过核心交换机或路由器做三层路由。这样一来,部门之间不能直接互相访问,网络流量也被隔离,安全性明显提升。
但问题来了:如果你的DHCP服务器放在服务器区的VLAN 100里,而办公区的PC在VLAN 20里,PC发出的DHCP Discover广播根本到不了服务器。服务器收不到请求,自然就不会回应。结果就是办公区所有电脑都拿不到地址,全部变成169.254.x.x。
要让跨网段客户端正常获取地址,有两种解决思路。第一种,每个VLAN都放一台DHCP服务器,但这几乎不现实,地址池分散、管理复杂、成本高。第二种,让某个设备帮客户端把DHCP请求以单播方式转给真正的DHCP服务器,这台设备就是DHCP中继。这也是绝大多数企业网络采用的标准方案。
3.2 DHCP中继原理:giaddr字段与单播转发
DHCP中继的原理,简单说就是“把广播转成单播”。当客户端在本地VLAN发出DHCP Discover广播时,配置了中继功能的交换机或路由器会监听这个广播,然后把报文中的giaddr字段改成自己的接口地址,把目标地址改成DHCP服务器的IP,重新封装成单播报文发送出去。
这个giaddr字段非常关键。服务器收到中继转发的请求后,会查看giaddr字段,确定客户端所在网段,然后从对应网段的地址池里分配一个合适的IP。如果没有这个字段,服务器只能看到中继设备的IP,根本不知道客户端到底在哪个VLAN,也就无法判断应该从哪个地址池分配地址。所以giaddr本质上是给服务器指路的坐标。
服务器回应Offer和Ack时,同样先发送给giaddr对应的地址,也就是中继设备的接口地址。中继设备收到后,再根据自己记录的客户端MAC地址和接口信息,把响应报文在本地VLAN内广播出去。整个过程对客户端来说完全透明,客户端甚至感觉不到自己访问的是一个位于几十台设备之外的DHCP服务器。
需要注意的是,DHCP中继不光要配置在客户端所在VLAN的三层接口上,还要保证中继设备和DHCP服务器之间的三层路由是通的。中继设备要把单播转发给服务器,服务器也要能把响应报文路由回中继设备,任何一环不通,DHCP都会失败。
3.3 中继部署位置与选择:全局地址池和接口地址池怎么选
配置DHCP中继前,要先想清楚DHCP服务器的地址池策略。以华为设备为例,在配置DHCP时,服务器上可以配置全局地址池,也可以配置接口地址池,两者用起来差别很大。
全局地址池的地址范围是独立于接口配置的,服务器根据giaddr字段判断客户端所在的网段,然后去全局池里查找匹配的地址池。它的好处是灵活,一个地址池可以被多个网段复用,适合地址池数量多、网段划分复杂的场景。缺点是需要手动维护地址池与网段之间的对应关系,配置量稍大。
接口地址池则绑定在具体三层接口上,接口收到DHCP请求后,直接从接口所在网段分配地址。这种方式配置简单,一个接口对应一个网段,逻辑很直观。但它不适合做中继场景,因为接口地址池面对的是本地接入的客户端,中继来的请求默认不会走接口地址池匹配,除非做特殊调用。
我个人在规划中继网络时,更倾向于在DHCP服务器上使用全局地址池。原因很简单:地址池和VLAN的对应关系一目了然,排障时看配置就能判断服务器有没有为该网段分配正确地址。尤其是网络规模超过几十个VLAN后,全局地址池的维护效率明显更好。
4. 实战:在华为eNSP上配置DHCP与DHCP中继
4.1 组网规划:核心路由器、接入交换机、两台PC、一台DHCP服务器
接下来进入正题,我用华为eNSP模拟器手把手带大家配置一遍DHCP和DHCP中继。很多朋友总说eNSP里配置DHCP和RIP这类功能时容易出错,其实只要把报文转发路径想清楚,配置起来就是顺手的事。
先看组网需求。模拟一个典型的企业网络:一台核心路由器AR1,连接两个VLAN下的终端。VLAN 10属于办公区,VLAN 20属于研发区。DHCP服务器放在核心路由器旁边,模拟一个192.168.99.0/24的服务器网段。现在要让VLAN 10和VLAN 20下的PC都自动获取IP地址,并要求所有地址都由这台DHCP服务器统一分配。
设备规划如下:
- AR1(核心路由器):作为VLAN 10、VLAN 20、服务器网段的三层网关,同时作为DHCP服务器。
- SW1(接入交换机):负责把PC1划分到VLAN 10,PC2划分到VLAN 20。
- PC1:位于VLAN 10,需要自动获取192.168.10.0/24网段地址。
- PC2:位于VLAN 20,需要自动获取192.168.20.0/24网段地址。
- DHCP服务器:位于192.168.99.0/24网段,这里先用AR1自身模拟,实战中也可以用独立服务器。
这个方案的巧妙之处在于,AR1既充当各网段的网关,又同时扮演DHCP服务器和中继的角色。小型网络这样配置是合理的。如果网络规模更大,建议把DHCP服务独立部署到Windows Server或Linux服务器上,便于统一管理。
4.2 在核心设备上配置DHCP服务端:全局地址池模式
先在AR1上启用DHCP服务,并配置三个全局地址池。地址池名称可以自己定义,但建议用网段命名,方便后期维护。
text复制[AR1] dhcp enable
[AR1] ip pool vlan10
[AR1-ip-pool-vlan10] network 192.168.10.0 mask 255.255.255.0
[AR1-ip-pool-vlan10] gateway-list 192.168.10.1
[AR1-ip-pool-vlan10] dns-list 223.5.5.5 114.114.114.114
[AR1-ip-pool-vlan10] lease day 1 hour 0 minute 0
[AR1-ip-pool-vlan10] quit
[AR1] ip pool vlan20
[AR1-ip-pool-vlan20] network 192.168.20.0 mask 255.255.255.0
[AR1-ip-pool-vlan20] gateway-list 192.168.20.1
[AR1-ip-pool-vlan20] dns-list 223.5.5.5 114.114.114.114
[AR1-ip-pool-vlan20] quit
[AR1] ip pool server
[AR1-ip-pool-server] network 192.168.99.0 mask 255.255.255.0
[AR1-ip-pool-server] gateway-list 192.168.99.1
[AR1-ip-pool-server] quit
注意,这里的dns-list和lease参数是可选配置,但实际生产环境中非常推荐写清楚。DNS不写,终端只能拿IP不能上网。租期不写,默认值可能是1天,按需调整更合理。
然后配置三个网段的VLANIF接口,每个接口都要开启DHCP选择全局地址池,并配置中继指向DHCP服务器。AR1本身作为DHCP服务端时,可以不需要中继,因为请求直接到了本设备。但为了让后续步骤演示中继效果,我把AR1模拟成“核心路由器 + 远端DHCP服务器”的组合,在VLANIF接口上把中继指到AR1自己的某接口地址,模拟跨网段转发。
text复制[AR1] interface GigabitEthernet0/0/0.10
[AR1-GigabitEthernet0/0/0.10] dot1q termination vid 10
[AR1-GigabitEthernet0/0/0.10] ip address 192.168.10.1 255.255.255.0
[AR1-GigabitEthernet0/0/0.10] dhcp select global
[AR1-GigabitEthernet0/0/0.10] quit
[AR1] interface GigabitEthernet0/0/0.20
[AR1-GigabitEthernet0/0/0.20] dot1q termination vid 20
[AR1-GigabitEthernet0/0/0.20] ip address 192.168.20.1 255.255.255.0
[AR1-GigabitEthernet0/0/0.20] dhcp select global
[AR1-GigabitEthernet0/0/0.20] quit
在AR1上执行dhcp select global后,这个接口收到的DHCP请求会交给全局地址池去匹配。由于服务器有vlan10和vlan20两个池,根据giaddr字段就能正确区分来源网段,不会分配错地址。
4.3 配置DHCP中继:让VLAN 20的请求转发到服务器
现在我们分拆另一个场景:假设DHCP服务不在AR1上,而是部署在远端独立服务器192.168.99.10上。AR1需要为VLAN 20配置DHCP中继,把PC2发来的广播请求单播转发给这台服务器。配置命令如下:
text复制[AR1] interface Vlanif20
[AR1-Vlanif20] ip address 192.168.20.1 255.255.255.0
[AR1-Vlanif20] dhcp select relay
[AR1-Vlanif20] dhcp relay server-ip 192.168.99.10
[AR1-Vlanif20] quit
这里的dhcp select relay表示该接口启用DHCP中继功能。dhcp relay server-ip后面指定的是远端DHCP服务器的地址。这样一条配置,就把原本广播域隔离导致的“找不到服务器”问题解决了。
配置完成后,PC2在VLAN 20里发出DHCP Discover广播,AR1收到后把giaddr填成192.168.20.1,并把这个报文以单播形式发给192.168.99.10。服务器看到giaddr是192.168.20.1,就知道客户端位于192.168.20.0/24网段,于是从vlan20地址池里分配地址,并把Offer单播回给AR1,AR1再在VLAN 20内广播,让PC2最终收到。
需要注意的是,用于中继的接口必须配置好IP地址,而且需要在设备上开启dhcp enable,否则中继功能不会生效。这个坑我在实际工程里踩过不止一次。
4.4 验证结果与常用调试命令:检查地址池使用、抓包确认交互
配置完成之后,不能凭感觉说“应该通了吧”,必须用命令验证。华为设备上我常用的三条命令,一定要记牢。
第一,查看地址池分配情况,输入display ip pool。这条命令会显示每个地址池里已经分配了多少个地址,剩余多少地址,哪些地址被占用。如果PC2显示拿到了192.168.20.2这个地址,而这里也显示对应记录,说明分配已经成功。
第二,查看DHCP中继的统计信息,输入display dhcp relay statistics。这条命令能看到中继设备收到了多少Discover,转发了多少Request,有没有错误包。如果计数一直不变,大概率是终端请求没到中继设备,或者接口配置没生效。
第三,抓包确认。如果终端还是拿不到地址,不建议猜,直接用Wireshark在PC端抓包。抓包时重点看有没有DHCP Discover从0.0.0.0发出,有没有DHCP Offer响应。如果只有Discover没有Offer,问题在于响应回不来。如果连Discover都看不到,问题在于终端的物理链路或VLAN划分。
用PC模拟器测试时,可以先把PC的网卡设置成自动获取IP,然后执行ipconfig /release和ipconfig /renew,强制重新走一遍DHCP流程。不要只重启网卡就完事,release和renew是最干净的测试方式。
4.5 如果配合RIP动态路由会怎样:热搜里的真实需求
热搜词里有一条“用华为模拟器来配置RIP而且用DHCP来配IP”,这其实是两个独立又常见的需求叠加。DHCP负责给终端分配IP,RIP负责让路由器之间自动学习路由。
实际场景中,如果你有多台路由器,终端地址靠DHCP下发,路由器之间的接通方式靠动态路由协议,比如RIP或OSPF。这样做的意义是,当网络拓扑变化时,路由器能自动更新路由表,不用人工维护静态路由。
在eNSP里配置的思路是:先在各路由器上配置好接口IP和DHCP地址池,让终端能拿到地址;再启动RIP协议,把直连网段宣告进去。RIP的配置本身不复杂,两条命令就能搞定。要注意的是,RIP只能学习路由,不能告诉终端“网关在哪”,网关信息依然靠DHCP的Option 3下发。所以两者各司其职,并不冲突。
5. 实战补充:Linux和Windows环境下的DHCP配置
5.1 Linux下用ISC DHCP Server配置:dhcpd.conf关键参数
生产环境中,很多人喜欢把DHCP服务跑在Linux服务器上,因为稳定、免费、可定制性强。以Ubuntu/Debian为例,安装dhcp-server包后,核心配置文件是/etc/dhcp/dhcpd.conf。
一个典型的单网段配置如下:
bash复制subnet 192.168.50.0 netmask 255.255.255.0 {
range 192.168.50.100 192.168.50.200;
option routers 192.168.50.1;
option domain-name-servers 223.5.5.5, 114.114.114.114;
default-lease-time 7200;
max-lease-time 21600;
}
range指定了地址池范围,option routers下发网关,option domain-name-servers下发DNS,default-lease-time和max-lease-time控制租期。配置完成后,检查一下语法:
bash复制dhcpd -t -cf /etc/dhcp/dhcpd.conf
语法正常后重启服务:
bash复制systemctl restart isc-dhcp-server
Linux环境配置DHCP最容易出问题的地方是监听网卡。ISC DHCP默认监听所有网卡,如果服务器有多个网卡,可能因为监听范围过宽导致服务启动报错。建议在/etc/default/isc-dhcp-server里明确指定监听网卡,比如INTERFACESv4="ens33",避免莫名其妙的服务异常。
5.2 Windows Server场景:安装DHCP角色与授权
Windows Server环境在企业里同样常见,很多网管习惯用图形界面管理DHCP。安装步骤不复杂:打开服务器管理器,添加角色和功能,勾选DHCP服务器,一路下一步即可。安装完成后,需要先对DHCP服务进行授权。这个是Windows域环境特有的要求,未授权的DHCP服务器无法对外提供服务,主要是防止网络上出现非法DHCP服务器干扰地址分配。
授权完成后,在DHCP管理控制台新建作用域。新建作用域时,需要填写地址池起始和结束地址、排除地址、租期、网关、DNS等参数。Windows的优势是每一步都有向导提示,对新手很友好。
但Windows DHCP同样有坑:如果你同时配置了DNS动态更新,客户端IP变更后,DNS记录可能没有及时更新,导致其他设备通过域名访问时解析到旧的IP。排查时优先检查DNS区域里的记录和DHCP的“名称保护”选项,这两个位置最容易出问题。
5.3 光猫做DHCP、路由器如何配合:热搜词的具体解法
热搜里有“路由器的wifi怎么由光猫来做DHCP”,这是一个典型的家庭网络、小办公室场景。光猫本身带有DHCP功能,默认会分配192.168.1.1这个网段的地址。如果路由器也开启了DHCP,终端连接路由器时可能同时收到两套DHCP服务,混乱就开始了。
解决办法是让整个网络只有一台设备做DHCP服务器,其他设备关闭DHCP。如果你想让光猫继续负责地址分配,那路由器的DHCP服务就要关闭。登录路由器管理页面,找到“DHCP服务器”或“局域网设置”选项,把“启用DHCP”取消勾选即可。此时路由器只做纯交换和无线接入功能,终端地址由光猫统一分配。
反过来也一样,如果你希望路由器来分配地址,那就进入光猫的管理页面,关闭光猫的DHCP功能。实际操作时还应注意网段问题。光猫默认网段是192.168.1.0/24,路由器如果是默认的192.168.1.0/24,两台设备在同一个网段很可能产生地址冲突。稳妥做法是修改路由器的LAN口网段,比如改为192.168.2.1/24,并关闭自带DHCP,让光猫的DHCP只服务192.168.1.0/24设备。
5.4 家用路由器场景:以360 T2为例的DHCP设置与常见误区
家用路由器比如360 T2,也有独立的DHCP设置页面。很多人从来没有打开过这个页面,觉得“买回来插上网线就能用”就够了。直到有一天发现在客厅连接正常、到卧室就频繁掉线,才开始怀疑是不是地址冲突。
家用路由器的DHCP设置,重点关注几个参数:地址池范围、网关地址、租期。默认设置通常是从192.168.0.2到192.168.0.254,租期24小时,这在多数场景够用。但如果你家有很多智能家居设备,建议保留一段地址给它们,并把IP与MAC绑定,避免设备重启后地址变化导致联动失效。
还有一点容易忽略:家用路由器本身既要当路由器,又当DHCP服务器。如果你把光猫设置为桥接模式,路由器就要负责拨号和DHCP;如果你把光猫设置为路由模式,路由器又开启了DHCP,就会出现双层NAT和地址冲突。很多用户遇到过“Wi-Fi能连上但上不了网”的问题,根源就在这里。排查时先把网络拓扑画清楚,确认到底谁在做NAT、谁在做DHCP,再决定怎么修改。
6. 常见问题与排查技巧实录
6.1 客户端获取不到IP,显示169.254.x.x怎么办
这是最经典的DHCP故障。看到169.254.x.x,基本可以断定客户端发了DHCP Discover,但没有收到任何Offer。按经验排查顺序如下。
先看物理链路是否正常,网线是否松动,Wi-Fi是否断开。接着看DHCP服务端有没有开启,Linux服务是不是挂了,Windows服务器是否授权,华为设备是否执行了dhcp enable。再看地址池是否耗尽,用display ip pool或DHCP管理界面查看剩余地址数。最后看VLAN划分,客户端所在VLAN的网关接口有没有开启dhcp select,中继有没有配置。
如果这些都查完了还是不行,就抓包。在客户端上用Wireshark抓取一段时间,如果看到大量Discover重传但没有Offer,问题多数出在服务器到客户端的回程路由,或者服务器没找到匹配的地址池。如果是eNSP模拟环境,特别容易忽略的是交换机接口没有放行对应VLAN,导致广播根本无法到达路由器。
6.2 中继配置了但不生效:giaddr、接口、路由回程问题
中继不生效是跨网段DHCP故障的高发区。配置了dhcp select relay和dhcp relay server-ip,客户端依旧拿不到地址,通常有三个原因。
第一种,中继接口没有配置IP地址。中继设备需要把giaddr设置成自己的接口IP,如果接口没有地址,转发报文时没有源IP可用,服务器无法判断客户端网段。第二种,DHCP服务器回程路由不通。中继设备能把客户端请求单播发给服务器,但服务器不知道192.168.20.0/24网段怎么回去,Offer到了核心路由器却没有路由转发回中继接口。检查时重点看服务器本机和核心设备的路由表,确保回程可达。第三种,DHCP服务器上没有匹配giaddr网段的地址池。服务器收到giaddr=192.168.20.1,但全局地址池里只有192.168.10.0/24,它根本不知道从哪个池分配地址,只能把这个报文丢弃。
这里有一个经验:配置中继时,先手动ping通中继接口到DHCP服务器之间所有三层路径,再谈DHCP。三层不通,后面全部白搭。
6.3 DHCP冲突与检测工具使用
DHCP服务本身是一个“听命令行事”的服务,它无法感知网络中已经有多少人手动配置了同网段IP。当一台设备手动配置了192.168.10.10,而DHCP又把192.168.10.10分配给了另一台设备,冲突就发生了。
冲突的典型症状是断断续续的网络问题:一会儿能上网,一会儿不能,重启路由器后短暂恢复又复发。排查时,重点查看DHCP服务器的租约记录和设备ARP表。Windows下也可以用ping -a探测冲突的IP地址,但更直接的方法是在服务器上执行arp -a,查看同一个IP是否对应多个MAC地址。
市面上也有专门的DHCP检测工具和IP扫描工具,比如一些网络扫描软件可以快速列出局域网内的所有IP和MAC对应关系。使用这类工具时要特别注意,扫描过程本身也可能触发安全设备告警,尽量在网络空闲时段做,避免影响大量在线用户。关键设备的IP与MAC绑定,是防止冲突最有效的手段。
6.4 排障命令与思路:华为、Linux、Windows速查
排障时不要东一榔头西一棒子,按顺序来。我整理了三个平台最常用的命令,建议存下来。
华为设备上,配置完DHCP后最先执行display ip pool查看地址池使用情况,再执行display dhcp relay statistics查看中继转发计数。如果接口配置有疑问,执行display this查看接口下的完整配置。Linux服务器上,先执行systemctl status isc-dhcp-server确认服务状态,再执行journalctl -u isc-dhcp-server查看服务日志。DHCP的日志里会明确写出来自哪个MAC地址的请求被分配到哪个IP,排障效率非常高。Windows环境下,查看DHCP服务器管理界面的租约记录,同时用Wireshark抓包看四步交互是否完成。
请记住一个原则:DHCP排障的本质是确认报文转发路径上的每一个环节是否都在工作。从客户端、接入交换机、中继设备,到DHCP服务器,每一跳都应该能应答。先链路后服务,先路由后协议,按这个顺序排查,大多数问题都能快速定位。
最后再分享一个我个人的习惯。每次配置完DHCP,不论是在企业设备上还是家用路由器上,我都会用手机或者PC强制释放并重新获取一次IP,然后抓包看一眼完整的Discover、Offer、Request、Ack四步流程。看到四个报文齐了,这网络才敢放心上线。这个习惯帮我避开了无数次返工,也推荐给所有正在折腾DHCP的朋友。
