eNSP子网DHCP配置详解:网关地址池与中继转发两种实现
很多人第一次在eNSP里做DHCP实验都是从单个网段开始的一台路由器、一台交换机、几台PC配置一个地址池PC自动获取收工。真正让我意识到问题没有那么简单是第一次在做了子网划分的拓扑里配DHCP——PC的网卡一直显示正在获取地址抓包能看到PC在一遍遍发DHCP Discover广播但根本没人回应。那次之后我认真把这个场景从头到尾梳理了一遍也就是今天要聊的eNSP里的子网DHCP。这篇文章会覆盖两种最常用的实现方式一种是把DHCP地址池直接建在终端网段的网关设备上一种是集中式DHCP服务器配合中继转发并给出可以照着敲的配置、验证命令和排错思路。无论你是正在准备网络方向认证的考生、要做课程设计的学生还是刚入行的网络运维这篇内容应该都能帮你少走一些弯路。1. 子网DHCP的第一步是把广播范围这件事想透1.1 DHCP天然依赖广播可子网恰恰要隔离广播DHCP从工作原理上讲就是一个依赖广播的过程。PC开机后不知道谁是DHCP服务器所以在网卡上发出DHCP Discover广播包凡是能听到这个广播的设备都有机会回应服务器回Offer、PC再发Request确认、服务器最后回Ack整个四步交互才算完成。问题恰恰出在广播这两个字上。子网划分的本质是把一个大的广播域切成了多个小的广播域不同网段之间默认不转发广播。你可以把每个子网想象成一个独立的房间PC在房间里喊有没有人给我发IP地址——隔壁房间的人不是不想回答而是根本听不见。DHCP服务器就算近在隔壁也只能干瞪眼。这个矛盾在单网段实验里完全暴露不出来因为你把PC、网关、服务器都放在同一个广播域里。一旦做了VLAN划分、多网段规划PC的广播请求默认到不了远端的DHCP服务器现象就是PC一直在获取中服务器侧却收不到任何请求。想解决这个问题要么让服务器出现在广播能到达的地方要么想办法让广播跨过三层边界——后者就是我们常说的DHCP中继。1.2 两种破局思路网关站出来发或者找信使替它传话理解了广播隔离解决方案其实就水到渠成了。思路A把DHCP服务做在终端网段的网关设备上。PC发出的Discover广播本来就能到达网关只要网关自己就是DHCP服务器分配直接在这里完成不需要跨网段。这种方案配置简单适用于小规模网络比如一台三层交换机同时承担VLAN网关和DHCP服务。思路BDHCP服务器集中部署在一台设备上各个子网的网关设备配置DHCP中继把收到的Discover广播转成单播报文转发给真正的DHCP服务器服务器回应后中继再把应答传回给PC。这种方案地址池统一管理适合多子网、多VLAN的园区或办公网络。两种思路没有绝对的优劣关键看使用场景。为了方便对比我把它们的差异整理成了表格方案优点缺点适合场景网关设备直接分配配置量小、不依赖跨网段路由地址池分散多台网关都要改管理不集中小网络、单设备同时做网关和DHCP服务集中式服务器DHCP中继地址统一管理便于扩展和审计依赖三层连通性中继配置要细心多VLAN、多子网的园区网和办公网后面的内容会按这两种思路各做一遍配置命令都可以直接抄但更重要的是把原理和排查链路搞清楚。2. 一套完整的实验规划拓扑、地址与设备选型2.1 一个贴近真实的多子网场景为了让实验贴近实际我构造了一个典型的业务场景某公司内部规划了三个网段办公区、研发区和设备管理网段终端都希望自动获取IP同时各网段之间还要能互相访问。对应的网络规划如下VLAN 10办公区网段192.168.10.0/24网关192.168.10.1VLAN 20研发区网段192.168.20.0/24网关192.168.20.1VLAN 99管理/设备互联网段网段192.168.99.0/24网关192.168.99.1拓扑上我使用一台S5700系列三层交换机作为核心PC分别接入属于各自VLAN的端口一台AR系列路由器作为集中式DHCP服务器通过互联链路与三层交换机相连。PC所在的VLAN 10和VLAN 20的网关都在三层交换机的VLANIF接口上DHCP服务器则放在VLAN 99网段。这个拓扑的关键之处在于PC发出的广播首先到达的是三层交换机而不是DHCP服务器。如何处理广播就成了整个实验的核心看点。如果你用的是思路A三层交换机要负责分配如果你用思路B三层交换机要负责中继把请求转发给路由器。2.2 eNSP设备选型与启动的准备工作在eNSP里我建议这样选设备三层交换机选S5700系列的型号它支持VLANIF接口、DHCP全局地址池和中继功能。路由器选AR2220或同系列较新的型号作为集中式DHCP服务器。二层交换机可选S3700系列用于模拟接入层也可以省掉直接让PC连三层交换机。PC准备两台以上分别分配到VLAN 10和VLAN 20。eNSP启动设备需要一定的模拟启动时间很多人一拖完设备就开始敲配置结果命令要么没反应要么敲进去后设备重启又丢了。我习惯在设备启动日志基本结束后先检查接口物理状态是否已经UP再做配置。如果看到端口颜色还是灰色说明设备没有完全初始化耐心等几秒避免边启动边敲命令。另外提醒一点eNSP不同版本对设备型号的模拟程度有差异。如果某条命令在当前型号上提示不支持先检查是不是设备型号选错了而不是怀疑命令本身。S5700如果遇到个别命令不支持的情况可以尝试换成AR系列路由器来做网关实验思路不变。3. 思路A网关设备直接分配地址全局与接口两种地址池怎么选3.1 第一步先把DHCP服务总开关打开在设备上启用DHCP服务是后面一切配置的前提。系统视图下执行dhcp enable这条命令执行不成功后面配置再多地址池、再多接口策略都不会生效。这是个很小但很常见的坑——我在帮别人排查时真的遇到过有人在设备上没有执行这条命令然后PC在各网段之间反复刷新的情况。接着给三层交换机的VLANIF接口配置IP地址作为终端网段的网关interface Vlanif10 ip address 192.168.10.1 255.255.255.0 interface Vlanif20 ip address 192.168.20.1 255.255.255.0到这里VLAN 10和VLAN 20的终端已经可以分别ping通自己的网关。接下来要解决的就是DHCP分配问题。3.2 全局地址池适合需要精细管控的场景在S5700上我推荐先用全局地址池。全局地址池的意思是先把可分配的地址段、网关、DNS、排除地址、租期这些参数一一列出来然后在网关接口上指定从这些池子里分配。配置命令如下ip pool vlan10 gateway-list 192.168.10.1 network 192.168.10.0 mask 255.255.255.0 dns-list 192.168.99.2 excluded-ip-address 192.168.10.1 192.168.10.20 lease day 1 hour 0 minute 0 ip pool vlan20 gateway-list 192.168.20.1 network 192.168.20.0 mask 255.255.255.0 dns-list 192.168.99.2 excluded-ip-address 192.168.20.1 192.168.20.10 lease day 1 hour 0 minute 0 interface Vlanif10 ip address 192.168.10.1 255.255.255.0 dhcp select global interface Vlanif20 ip address 192.168.20.1 255.255.255.0 dhcp select global关键参数我重点说一下gateway-list必须写成终端所在网段的网关地址也就是交换机VLANIF接口的IP不能随手写一个别的地址。dns-list可以填写模拟环境里的DNS服务器地址也可以先留空实验阶段不太影响分配结果。excluded-ip-address用来排除网关、打印机、服务器等需要静态占用的地址避免DHCP把网关地址分出去造成终端无法上网。lease设置租期默认为1天模拟环境不用改但要知道它代表客户端可以持有这个IP多久。配置完成后在VLAN 10下的PC选择DHCP获取方式应该能拿到192.168.10.21网段内的地址因为前20个地址被排除了。用display ip pool可以在设备上看到每个地址池的分配情况包括空闲地址数、已分配数和冲突地址数。3.3 接口地址池一个网段对应一个接口时的省力方案接口地址池是另一种分配方式它不需要单独写network、gateway-list而是自动以接口的主IP地址所在的网段作为可分配地址池。以VLAN 20为例配置如下interface Vlanif20 ip address 192.168.20.1 255.255.255.0 dhcp select interface dns-list 192.168.99.2这段配置的效果和上面全局地址池中VLAN 20的部分是一样的终端会从192.168.20.0/24网段里获取地址网关自动指向192.168.20.1。接口地址池的优势是配置量小适合一个接口只对应一个简单网段的小规模场景。但我个人建议在学习阶段多使用全局地址池养成显式写参数的习惯。原因很简单全局地址池的所有参数集中在一个地方日后排查时用display ip pool一眼就能看到地址池范围、租期、排除地址而接口地址池的参数散落在各个接口里网络规模一大排查负担明显增加。两种方式的对比我整理成了表格维度全局地址池接口地址池配置项数量较多需显式写network/gateway/排除地址较少配置相对省事适用范围一个接口下多个子网、需要精细排除的场景每个网段有独立接口且结构简单可维护性地址池集中管理排查方便分散在各个接口可读性一般适用人群有规划习惯的网络工程师小规模测试环境快速搭建4. 思路B集中式DHCP服务器加中继跨网段分配的正确姿势4.1 中继解决的是广播不可达问题思路B的核心是在真正DHCP服务器和客户端之间引入一个传话筒。客户端的Discover广播先到达自己所在网段的网关网关配置了中继功能后会把这个广播报文重新封装成单播报文转发给指定的DHCP服务器。服务器处理完信息后回包中继设备再把它转回给客户端。可以这样理解DHCP中继相当于办公室里的前台。你在会议室喊了一句谁负责发门禁卡前台听清楚了然后打电话告诉另一个楼层的行政专员行政专员把门禁卡送到前台前台再转交给你。整个过程里喊话的人并没有直接见到行政专员全靠前台在中间搭桥。配置中继的前提是网关设备到DHCP服务器之间必须三层可达。如果中间链路或路由不通中继发出的单播报文就到不了服务器整个流程一样会卡住。4.2 在S5700上把终端VLAN的网关接口改成中继模式在S5700三层交换机上配置中继的位置是PC所在网段的VLANIF接口。命令如下vlan batch 10 20 99 interface Vlanif10 ip address 192.168.10.1 255.255.255.0 dhcp select relay dhcp relay server-ip 192.168.99.2 interface Vlanif20 ip address 192.168.20.1 255.255.255.0 dhcp select relay dhcp relay server-ip 192.168.99.2 interface Vlanif99 ip address 192.168.99.1 255.255.255.0 ip route-static 0.0.0.0 0.0.0.0 192.168.99.2注意几个关键点dhcp select relay必须配置在终端网段的网关接口上。PC发送的广播只有到达网关接口后才能被中继处理配置在物理口上没有任何意义。dhcp relay server-ip指向真正的DHCP服务器IP这里就是AR路由器与交换机互联的接口地址192.168.99.2。交换机到服务器必须写路由我用一条默认路由指向192.168.99.2保证回包也能找到路径。交换机连接路由器的链路需要放通VLAN 99通常使用trunk口interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 994.3 AR路由器上的服务器配置与常见坑AR路由器作为DHCP服务器配置相对直接。先配置互联接口的IP再创建多个全局地址池并在接口上启用DHCP服务interface GigabitEthernet0/0/0 ip address 192.168.99.2 255.255.255.0 dhcp select global ip pool vlan10 gateway-list 192.168.10.1 network 192.168.10.0 mask 255.255.255.0 dns-list 192.168.99.1 ip pool vlan20 gateway-list 192.168.20.1 network 192.168.20.0 mask 255.255.255.0 dns-list 192.168.99.1 dhcp enable这里最容易踩坑的地方是gateway-list的写法。AR路由器虽然作为DHCP服务器但它并不直接是PC的网关PC的网关是三层交换机上的VLANIF地址。所以地址池里的gateway-list必须写成192.168.10.1和192.168.20.1写成路由器自己的接口地址192.168.99.2就错了。为什么这么强调因为一旦gateway-list写错PC依然能拿到IP但拿到的网关地址不对终端会发现自己根本无法ping通网关更别提访问其他网段。这种问题通常不会在DHCP分配阶段暴露网络出现拿到地址却上不了网的怪象时优先查这里。4.4 补充没有三层交换机时用单臂路由加中继有些学习者手头没有三层交换机但想模拟跨子网的DHCP。这时可以用两台AR路由器其中一台通过子接口做单臂路由同时兼任DHCP中继另一台做DHCP服务器。在作为网关的路由器上配置子接口并启用中继interface GigabitEthernet0/0/0.10 dot1q termination vid 10 ip address 192.168.10.1 255.255.255.0 arp broadcast enable dhcp select relay dhcp relay server-ip 192.168.99.2 interface GigabitEthernet0/0/0.20 dot1q termination vid 20 ip address 192.168.20.1 255.255.255.0 arp broadcast enable dhcp select relay dhcp relay server-ip 192.168.99.2子接口默认不处理广播所以必须执行arp broadcast enable开启广播终结否则PC连ARP都做不通更不用说DHCP广播了。这是单臂路由方案里非常容易忽略的一步配置完之后检查一下这个命令是否存在能省下很多排查时间。5. 验证与排错从PC到设备的完整排查链路5.1 先确认PC真的在自动获取听起来像废话但这是我见过的高频错误。eNSP的PC默认并没有开启DHCP需要在PC的配置界面里勾选DHCP选项。如果PC还停留在手动IP状态无论服务器配置多正确它都拿不到地址。开启DHCP后PC可能需要一点时间完成请求。如果迟迟没有IP可以在PC的命令行窗口执行ipconfig /release ipconfig /renew先释放旧地址再重新申请效果通常比反复重启PC要好。你可以在PC上看到类似这样的输出Windows IP Configuration Ethernet adapter Ethernet0: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 192.168.10.21 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.10.1拿到IP后先ping网关192.168.10.1。如果网关能通说明DHCP和链路都正常如果不通优先怀疑地址池里的网关参数和VLANIF地址不一致。5.2 看设备侧数据判断问题卡在哪一环只靠PC端的信息不足以定位问题。我最常用的三条命令display ip pool display dhcp statistics display dhcp relay statisticsdisplay ip pool用于查看全局地址池的状态重点关注Idle和Used数量。如果Idle数量充足且Used为0说明地址池本身没问题问题出在客户端请求没有到达服务器如果地址池出现冲突检查excluded-ip-address是否排除了网关和静态占用地址。display dhcp statistics在DHCP服务器上执行用来查看DHCP报文计数。关键看Discover、Offer、Request、Ack四类报文的数值。如果Discover不断增加但Offer始终为0说明服务器认为没有可用的地址池来回应这个请求优先检查地址池的network和接口是否匹配。display dhcp relay statistics在中继设备上执行确认中继确实把请求转发给了服务器。如果这里的计数不增长说明中继配置没有生效或者服务器IP写错了。5.3 按现象定位问题的三步法根据我自己的排错经验绝大多数问题可以按现象归类直接对照排查现象优先怀疑方向检查动作PC一直获取中服务器侧Discover计数无增长广播没有到达服务器或中继未生效检查网关VLANIF上的dhcp select relay和dhcp relay server-ip服务器看到Discover增长但Offer为0地址池与接口不匹配或服务器到终端网段路由缺失检查pool的network、gateway-list检查服务器回程路由PC拿到IP但ping不通网关或外网网关参数下发错误或VLAN放通不全查看pool的gateway-list与VLANIF地址是否一致检查trunk放通VLAN这套三步法看起来简单实际用起来非常高效。因为它把广播能不能到服务器愿不愿给给了能不能用三个层面彻底分开了不会出现明明问题在路由上却一直在交换机的接入端口上反复折腾的情况。5.4 最容易忽略的广播域走查最后还要检查一个很多人忽略的环节PC所在端口是否真的属于对应的VLAN。DHCP Discover广播能不能到达网关前提是PC和网关的VLANIF处于同一个广播域。比如PC接在交换机的GigabitEthernet0/0/1口但这个端口被划到了VLAN 1而网关配置在VLAN 10PC发出的广播根本到不了VLAN 10的网关其他配置再正确也无济于事。检查命令如下display vlan display port vlan在接入交换机上确认PC端口已经access到正确的VLAN在上联交换机上确认trunk端口放通了对应的VLAN。这个走查动作看起来基础但确实能解决不少明明配置都对为什么就是获取不到地址的诡异问题。6. eNSP模拟环境下的几个翻车点与避坑经验6.1 设备没有完全启动就开敲eNSP的设备启动是一个需要等待的过程不是拓扑一拖完就能直接敲命令。我见过有人把设备图标拖出来后马上进入命令行结果命令敲了半天毫无反应以为是软件坏了其实就是设备还在启动中。建议在设备启动日志大体结束、接口状态从灰色变为绿色之后再操作。实验做完以后如果不想配置丢失在关闭工程前记得保存。模拟器重启后配置丢失也是常见的心酸事。6.2 接口默认总shutdown模拟器里部分设备模板的接口默认是shutdown状态。拓扑连线后如果接口状态始终不UP先检查这个接口下有没有undo shutdown。PC侧也一样PC没有开机的时候交换机对应端口也可能一直down先把PC开机再观察端口状态。6.3 PC的IP刷新很慢不要干等eNSP的PC参与DHCP的流程和真实主机一样会受到STP收敛、设备响应速度的影响等十几秒才拿到地址并不奇怪。如果超过这个时间还一直获取中别反复重启PC执行ipconfig /release和ipconfig /renew手动刷新一次速度通常更快。6.4 回程路由是中继场景的隐形杀手中继转发看起来只是把Discover发出去但DHCP服务器回给中继的应答报文同样需要路由。服务器如果没有到达终端PC网段的路由Offer报文就发不出来表现是服务器侧明明收到了Discover却没有后续动作。排查时很有用的一个习惯是先用静态IP把PC、网关、DHCP服务器之间的链路全部打通确认三层可达再把PC切回自动获取。这样能把链路问题和DHCP配置问题迅速隔离。不要嫌麻烦这一步能帮你节省大量时间。这套实验我在eNSP里面反复敲了很多遍最有价值的体会就是一句话DHCP排错不要盯着服务器看要先顺着广播的路径走一遍从终端到网关再到服务器每一步都能通三层中继才能正常工作。最后再分享一个小习惯做这类多子网DHCP实验我一般会先用静态IP把各段的链路全部调通再把PC切回自动获取这样即使后面出现故障也能立刻判断是链路问题还是DHCP配置问题。这两个习惯帮我省了不少时间。