这次作业我选了DHCP,原本只是课程安排里的一道题,配置完才发现,DHCP没有想象中那么简单。它表面上是“自动发IP”,实际上牵扯到地址池规划、租期管理、中继转发、交换机与服务器的角色分工,甚至还有虚拟机虚拟网卡这种平常不注意的坑。这篇就把我这台华为交换机的完整配置过程、踩过的坑、以及兜底的排查思路都写出来,给同样在做DHCP配置作业、或者刚接手内网维护的朋友做个参考。
1. 先把DHCP解决的问题想明白,再动手敲配置
很多教程一上来就让你配地址池、配租期,但我建议你先花十分钟搞清楚一个问题:如果没有DHCP,你会遇到什么?
在一个稍微像样点的网络里,设备数量一多,手工配置静态IP就是一场灾难。比如一个办公室有三十台电脑、二十部手机、十几台网络打印机,每台都要手动填IP、子网掩码、网关、DNS。新设备上线要找人要IP段,IP写错了就冲突,设备搬去别的办公室又要重配。更麻烦的是,你根本不知道哪段地址是空闲的,哪些已经被占用。
DHCP解决的问题就是把这些工作集中到一个节点上,由它统一管理IP资源、自动分配、自动回收。设备接入网络后说一句“我需要一个地址”,服务器从地址池里挑一个可用的给它,同时告诉它网关、DNS这些配套参数,租期到了再续约或者回收。对使用者来说,插上网线就能上网,什么都不用设置。
这次作业让我重新理解了它为什么是网络运维里最基础、但最不能出错的服务之一。基础是因为几乎每个网络都在用,不能出错是因为一旦它挂掉,整个办公区就“断网”了——不是线路断了,是所有人都拿不到IP。
DHCP的核心机制可以概括成四个报文的交互,俗称DORA流程:
- Discover:客户端广播“谁有DHCP服务?我需要IP”
- Offer:服务器回应“我这有地址,你看这个IP行不行”
- Request:客户端说“我就要这个IP”
- Acknowledge:服务器确认“好,这个IP归你用,租期X小时”
这里面有个细节值得注意,Offer阶段服务器只是“预占”这个IP,并没有正式分配;只有收到Request并回复Ack之后,地址才算正式租给客户端。这也是为什么客户端多、并发高的时候,地址池规划不合理就会出问题——预占的IP还没释放,新的请求就来了。
还有两个概念必须懂,一个是租期(Lease Time),一个是地址池(Pool)。租期决定客户端能用多久,一般办公网络设置成8到24小时比较合理;地址池则是你划出来给DHCP自动分配的IP范围,必须避开手动配置的服务器、打印机等固定设备。
2. 华为交换机上的DHCP:先分清“服务器模式”和“中继模式”
做这次作业之前,我一直以为DHCP是“服务器”的事,跟交换机没关系。后来被一道题问住了——如果你的内网已经有一台物理DHCP服务器,交换机应该怎么配?我才发现交换机在这里有两种完全不同的角色,很多人一开始都搞混。
第一种角色,交换机本身作为DHCP服务器。这种场景适合小型网络,不想单独架一台服务器,直接在交换机上开DHCP服务,给终端分配地址。华为交换机上配置的核心命令大致是:
system-view dhcp enable ip pool office network 192.168.10.0 mask 24 gateway-list 192.168.10.1 dns-list 223.5.5.5 lease day 1 interface vlanif 10 dhcp select global这段配置的意思很直白:全局开启DHCP服务,定义一个名为office的地址池,网段是192.168.10.0/24,网关指向192.168.10.1,DNS用公共DNS,租期一天,然后在VLAN 10的三层接口上启用DHCP,让它使用全局地址池。
第二种角色,交换机做DHCP中继(DHCP Relay)。当网络里已经有独立的DHCP服务器、但服务器和客户端不在同一个网段时,广播报文过不了三层,就需要交换机把客户端的请求转给服务器。这个场景在真实企业网里非常常见,大家常说的“内网有物理DHCP服务器,交换机如何配置”其实就是指这个。
华为交换机中继模式典型配置如下:
system-view dhcp enable interface vlanif 10 dhcp select relay dhcp relay server-ip 192.168.200.10 ip address 192.168.10.1 255.255.255.0这里的关键就是把接口原本的dhcp select global改成dhcp select relay,再指定服务器的地址。注意,中继模式不会自己分配IP,它只管“传话”——把客户端的Discover报文单播转发给服务器,再把服务器的Offer报文传回客户端。
为了把这两个模式彻底区分开,我做了一个对比表,也建议你在做作业的时候先填一遍这个表再动手:
| 对比项 | 交换机DHCP服务器模式 | 交换机DHCP中继模式 |
|---|---|---|
| IP地址来源 | 交换机本地地址池 | 内网独立DHCP服务器 |
| 适用场景 | 小型网络、临时网段 | 多网段共用一套DHCP服务 |
| 核心命令 | dhcp select global | dhcp select relay |
| 三层转发 | 无需额外配置 | 必须指定dhcp relay server-ip |
| 运维复杂度 | 低,适合单网段 | 略高,需配合服务端地址池策略 |
| 常见问题 | 地址池耗尽 | 中继不生效、服务器未授权网段 |
为什么要强调先分清这两种模式?因为它们的排查方向完全不同。服务器模式下,你只需要看交换机本地配置;中继模式下,你得同时检查交换机、服务器两端。我在作业里犯的第一个错就是把这两种模式混着用,后面排查了很久才发现是模式没选对。
3. 实操记录:完整配置一台华为交换机,管住整个办公室的三个网段
我们这次作业的背景是这样的:三层交换机一台,下面分了三个VLAN,分别是员工办公网192.168.10.0/24、访客网192.168.20.0/24、服务器区192.168.30.0/24。要求是配置一台DHCP服务器,让所有终端自动获取IP。
这其实就是一个非常典型的问题:一个DHCP服务器,到底能给几个网段发地址?
答案取决于你怎么设计。最简单的做法是交换机上用三个不同的全局地址池,分别对应三个VLAN的网关接口,用dhcp select global各自生效;另一种做法是内网单独一台服务器,交换机做中继,服务器上为三个网段各配置一个作用域(Scope)。
我这次用的是第一种方案,直接在华为交换机上做。配置思路如下:
3.1 创建VLAN并配置VLANIF网关地址
system-view vlan batch 10 20 30 interface vlanif 10 ip address 192.168.10.1 255.255.255.0 interface vlanif 20 ip address 192.168.20.1 255.255.255.0 interface vlanif 30 ip address 192.168.30.1 255.255.255.0网关是DHCP给终端下发的默认网关,必须跟客户端在同一个网段。如果你的网关写错了,最典型的现象就是终端“明明有IP却上不了网”,所以这个地址一定要仔细核对。
3.2 开启DHCP并定义三个地址池
dhcp enable ip pool vlan10_pool network 192.168.10.0 mask 255.255.255.0 gateway-list 192.168.10.1 dns-list 223.5.5.5 8.8.8.8 excluded-ip-address 192.168.10.1 192.168.10.50 ip pool vlan20_pool network 192.168.20.0 mask 255.255.255.0 gateway-list 192.168.20.1 dns-list 223.5.5.5 8.8.8.8 ip pool vlan30_pool network 192.168.30.0 mask 255.255.255.0 gateway-list 192.168.30.1 dns-list 223.5.5.5 8.8.8.8这里有一个操作值得单独讲一讲,就是excluded-ip-address。它的意思是把地址池里的某些IP排除掉,不让DHCP分配。为什么?因为192.168.10.1是网关,如果你不排除它,地址池里的1号IP可能会被分配给某台电脑,一旦和网关冲突,那台电脑就上不了网,整个网段都会出现间歇性故障。我把1到50都排除了,是为了后续给打印机、监控等固定设备预留手动配置空间。
3.3 在VLANIF下启用DHCP
interface vlanif 10 dhcp select global interface vlanif 20 dhcp select global interface vlanif 30 dhcp select global这一步是把地址池和接口绑定。global表示使用全局配置的地址池,交换机按接口IP所在的网段自动匹配对应的ip pool。这个自动匹配是靠network字段和VLANIF的IP网段对齐来实现的,所以配置地址池时,network的网段必须和VLANIF地址在同一个子网,否则客户端拿不到地址。
3.4 验证配置是否生效
华为交换机查看DHCP配置,我有几个常用命令推荐:
display dhcp status display ip pool name vlan10_pool display ip pool all display dhcp server statisticsdisplay ip pool all可以看到地址池的总地址数、已分配数、空闲数、排除数和过期数。如果你发现已分配数接近总数,那说明地址池快耗尽了,得考虑扩大网段或缩短租期。display dhcp server statistics则能看到交换机收到了多少Discover报文、回复了多少Offer、丢弃了多少非法报文,排查问题时非常有用。
另外还要验证客户端是不是真的拿到了IP。我自己习惯的做法是在电脑或手机上ipconfig /all查看一下IP、网关和DNS是否都对得上,然后从终端Ping一下网关,通了就说明三层转发没问题。
3.5 别忽略虚拟机的虚拟网卡
这次作业里还有一个插曲,就是热词里提到的“DHCP服务器为虚拟网卡发地址”。我们在VMware或VirtualBox里建虚拟机时,默认用的是NAT或仅主机模式,虚拟网卡会自动从VMware的虚拟DHCP获取IP,这个IP往往是一个内部网段,比如192.168.100.x、192.168.83.x。你在物理机上用真实网卡看IP没问题,但虚拟机里却不在同一个网段,就特别容易搞混。
如果你想让虚拟机也使用交换机刚刚配置的DHCP服务,有两条路:
- 把虚拟机的网络模式改成“桥接模式(Bridge)”,让虚拟网卡直接绑定物理网卡,从而接入真实局域网,由物理交换机做DHCP分配。
- 或者在VMware的虚拟网络编辑器中,关闭/修改虚拟DHCP的设置,指定虚拟网卡使用自定义网段。
我在实际操作中遇到的坑是,虚拟机桥接之后,它拿到的是物理交换机分配的IP,这本身没问题,但如果你开启了VMware自带的DHCP服务,它会在另一个虚拟网段上抢答,造成虚拟机拿到的IP不是你预期的那个。所以做网络实验时,建议先把虚拟软件的DHCP服务关掉,只保留物理交换机的DHCP。
4. 内网已有物理DHCP服务器,交换机该怎么配合
前面说了,如果内网已经有一台独立的物理DHCP服务器,交换机的主要工作就不是分配地址,而是转发请求。这里最常见的业务场景有两种,我分别展开说一下。
第一种场景,服务器和终端在同一个网段。这种情况下交换机几乎不用做任何DHCP相关配置,只需要保证客户端广播能到达服务器。默认情况下,客户端发广播,交换机在同一个VLAN内广播转发,服务器收到请求后分配地址,整个过程交换机不需要开DHCP功能。很多朋友在这个场景下画蛇添足,给交换机也开了一个地址池,结果内网出现两个DHCP响应源,反而造成IP分配混乱。
第二种场景,服务器和终端跨网段。例如服务器在192.168.200.10,终端在192.168.10.0网段,这时候就必须配置DHCP中继。华为交换机上的操作前面已经给了命令,这里我想补充一个很多人不知道的细节:中继模式下,服务器必须能识别这个报文是从哪个中继接口转过来的,并且为对应网段配置作用域。也就是说,你不仅仅要配置交换机,还要在DHCP服务器上为192.168.10.0/24这个网段单独建立一个Scope,否则服务器收到中继转来的请求时,不知道该从哪个地址池分配。
还有一点要特别注意,如果内网这个物理DHCP服务器的接口IP、网关、VLAN划分都比较复杂,建议先画一张简单的拓扑图再开始配。我自己做作业时画了一张三层结构的图,交换机在中间,客户端VLAN在下,服务器VLAN在侧,标清楚哪个接口接哪个VLAN、哪个IP是网关,操作起来就清晰多了。否则命令敲到最后自己都容易忘记刚才配的是哪个接口。
5. 这次作业踩过的坑,直接整理成排查清单
做DHCP配置,不是在模拟器里敲一遍命令就结束了。客户端拿不到IP的原因非常多,我把这次作业和平时帮朋友解决网络问题时遇到的典型情况整理成一个速查表:
| 故障现象 | 可能原因 | 排查命令/操作 |
|---|---|---|
| 客户端始终拿不到IP | DHCP全局未开启 | display dhcp status,确认状态为Enable |
| 拿到的IP不在预期网段 | 网关/地址池网段不匹配 | 对比VLANIF IP和ip pool的network字段 |
| 偶尔能拿到IP,偶尔不能 | 地址池剩余地址不足 | display ip pool all,查看空余地址数 |
| 能拿到IP但无法上网 | 网关没下发或写错 | 客户端ipconfig /all核对网关,Ping网关测试 |
| 部分固定设备IP冲突 | 排除地址没配全 | 在地址池里添加excluded-ip-address |
| 多VLAN环境下只有个别VLAN正常 | VLANIF接口未绑定DHCP | 检查是否漏了dhcp select global |
| 虚拟机一直拿不到IP | 虚拟网卡模式或虚拟DHCP冲突 | 改成桥接模式,关闭虚拟软件自带DHCP |
| 中继模式下拿不到IP | 服务器端缺少对应作用域 | 在物理DHCP服务器上为网段建Scope |
| DHCP频繁续约,日志飘红 | 租期设置过短 | 将lease day调整到1或2天 |
再分享几个我挨过打才记住的细节。
第一个是广播域的问题。DHCP的Discover是广播报文,而广播无法跨VLAN传播。所以如果你把客户端划到了VLAN20,把DHCP服务器留在VLAN10,却不做任何中继配置,那客户端永远拿不到IP。这不是配置错了,是原理上就不通。
第二个是租期和实际使用量的关系。假设一个网段有254个可用地址,却排除了50个,那实际可用就是204个,如果终端数量接近这个数,就要考虑缩短租期或扩充地址池。我见过一个办公室的DHCP日志密密麻麻全是地址分配失败,就是因为地址池不够还硬撑了两周。
第三个是“重启大法”其实也适用于DHCP。客户端如果拿到过旧租约,继续使用旧IP直到租约过期才算真正释放。遇到客户端一直拿着过期IP的情况,可以试试ipconfig /release之后再ipconfig /renew,比反复重启电脑要快得多。
第四个是关于防环和欺骗的。如果在非信任接口上接了一台小路由器或别人的设备,它也开了DHCP服务,那么整个网络就可能出现“抢答”——谁的响应先到客户端,客户端就用谁的。这时交换机接口上可以配置DHCP Snooping,只信任连接合法服务器的端口,其余的接口丢弃DHCP响应报文。这个功能在作业里可能不会考,但真实网络中价值非常大:
dhcp enable dhcp snooping enable dhcp snooping trusted interface GigabitEthernet0/0/1 interface GigabitEthernet0/0/2 dhcp snooping enable把连接合法DHCP服务器的端口设置为trusted,其他接口启用DHCP Snooping,就可以有效防止私接小路由带来的地址混乱。
6. 最后,给做作业的人留几句话
DHCP这一章,很多人觉得配置量不大,随便敲敲就过了,但这次作业做完我有一个很真切的体会:DHCP学得好不好,不在于你能不能背出命令,而在于地址池、排除地址、租期、中继、网关这些概念有没有串成一条线。
建议你再往下练三个方向:
- 一个是把前面配置的交换机DHCP服务改成中继模式,内网单独起一台物理或虚拟DHCP服务器,亲手体验一次跨网段分配。
- 第二个是把DHCP Snooping打开,看看当网络中混入了非法DHCP设备时,交换机会怎么处理。
- 第三个是可以写几个脚本来模拟地址池使用率的变化,或者用Wireshark抓一次DORA四个报文,亲眼看看客户端和服务器是怎么“讨价还价”的。
H3 6.1 一条命令引发的思考:display ip pool all
如果你时间有限,至少学会用display ip pool all这把“照妖镜”,它能把地址池利用率、分配情况、租约剩余时间全摆在你面前。我这次配置完三个地址池之后跑了这条命令,一眼就看到VLAN10的地址池已经分出去一百多个,而VLAN30几乎没人用。没有它,你就像没有仪表盘的司机,只知道车在跑,却不知道还剩多少油。
H3 6.2 我的作业收尾建议
最后一个小技巧:交作业之前,记得把交换机配置导出备份。华为交换机可以用display current-configuration查看完整配置,再用FTP或TFTP保存下来。这样一来即使配置被误改,也能快速恢复。我当时就是靠备份文件,才在调试虚拟机虚拟网卡时把交换机配置折腾坏了之后十分钟内恢复了现场。
DHCP不难,但细节不少。把这次作业吃透,后面再遇到“一个DHCP服务器发几个网段”“内网物理DHCP服务器如何配合交换机”这种实际问题,你就能从原理到命令都讲得头头是道了。