2. 先弄明白:DHCP仿冒者攻击到底是怎么把全网搞瘫的
要理解DHCP Snooping为什么能防仿冒服务器,得先彻底吃透DHCP协议的工作流程,以及攻击者是在哪个环节钻的空子。
2.1 DHCP的四步握手:一个“酒店前台发房卡”的模型
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)做的事情,说白了就是给接入网络的设备自动分配IP地址、网关、DNS这些“网络身份信息”。标准流程是四步广播交互:
- DHCP Discover(发现):终端刚插上网线,发现自己没有IP地址,于是向全网发送广播:“我是新来的,谁能给我分配一个地址?”
- DHCP Offer(提供):网络里的DHCP服务器收到广播后,从地址池里挑一个空闲IP,单播或广播回给终端:“给你这个地址,网关是X,DNS是Y,租期8小时。”
- DHCP Request(请求):终端可能同时收到多台服务器的Offer(没错,网络里可能存在多台合法服务器),它从中选一个,再广播回去:“我选定了某个地址,请大家确认。”这个广播的目的,是通知其他服务器“我不用你的地址了”。
- DHCP Ack(确认):被选中的服务器最后确认:“好,这个地址归你了。”终端拿到Ack之后,才敢真正把IP配置到网卡上。
整个过程完全可以类比成酒店入住:客人到前台说“我要开一间房”(Discover),前台查了一下房态说“有,802房间,这是房卡”(Offer),客人确认“就802吧”(Request),前台登记完给出最终确认“好的,住吧,退房时间是明天中午”(Ack)。
这个流程本身非常高效,但有一个致命的隐含假设:终端无条件相信所有收到的Offer和Ack。协议在设计时,压根没有要求终端去验证“这台服务器到底是不是真的管理员部署的”。这就给仿冒者攻击留下了巨大的空间。
2.2 仿冒服务器攻击:抢答!抢答!先到先得
仿冒者攻击的本质,是攻击者在内网里私接了一个设备(通常是开启了DHCP服务的无线路由器、软路由,或者干脆是一台跑了DHCP服务的笔记本),这个设备会在别人发起Discover广播时,抢在真正的DHCP服务器之前回送Offer。
为什么仿冒者能“抢”赢?因为DHCP应答靠的是广播竞争,终端同时收到两个Offer时,绝大多数操作系统(Windows、Android、iOS)的做法是:谁先到就选谁。仿冒设备就在终端旁边,物理距离近、转发路径短,所以它的Offer几乎总是能赢。
攻击者把Offer里的默认网关设置成自己的IP,把DNS服务器也设置成自己控制的地址,终端傻乎乎地拿着这套配置就上网了。这时候会发生什么?
- 终端所有的上网流量都先经过攻击者的设备,攻击者可以做流量的抓包分析、篡改网页内容、劫持DNS解析,把用户导向钓鱼网站。
- 更隐蔽的是,用户基本感知不到异常:能上网,网速好像也还行,只是偶尔打开网页会弹一些奇怪的广告。
- 终端获取的IP地址可能还不在合法地址池范围内,与合法网络完全隔离,导致内网互访失败、打印服务器连不上、文件共享全断。
而最让人头疼的情况是:如果仿冒服务器和合法服务器同时存在,又都不肯让位,终端就会在合法网络和仿冒网络之间反复横跳,表现出来就是网络“时好时坏”,刚刚还能用的OA系统突然就打不开了,过一会儿又恢复了。这种间歇性故障在排障时极其迷惑人。
2.3 不只是抢应答:DHCP饿死攻击同样要命
除了仿冒服务器应答之外,还有一种常见攻击方式叫DHCP饿死攻击(DHCP Starvation Attack)。攻击者不需要架设服务器,只需要不断发送伪造MAC地址的Discover请求,把合法服务器的地址池大量占用,直到地址池枯竭。
具体来说,攻击者用工具随机生成成千上万个虚拟MAC地址,每个MAC地址都去请求一个IP。DHCP协议本身没有对“同一物理端口能同时在线多少台设备”做限制,所以服务器会傻乎乎地把地址一个个分配出去。当地址池被全部耗尽后,新的合法终端再来请求时,服务器就无地址可发了。结果就是整个办公室新接入的设备上不了网,老设备的租约到期后也无法续租,网络从“瘫痪部分”变成“瘫痪全体”。
这两种攻击一个在“响应端”做手脚,一个在“请求端”做手脚,但根本原因是一致的:网络基础设施对DHCP报文缺乏身份验证和来源检查。而DHCP Snooping恰恰就是用来补齐这个短板的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
3. 建立信任边界:DHCP Snooping的防御原理与适用边界
很多人第一次听到DHCP Snooping这个名字,容易把它当成一个简单的交换机功能开关。其实它背后是一个相当经典的“信任边界”模型——你只要把这个模型想清楚了,后面配置什么命令都不会乱。
3.1 信任端口与非信任端口:先回答“谁配发IP是合法的”
DHCP Snooping的核心思想,是在交换机上区分出两类物理端口:
- 信任端口(Trusted):连接合法DHCP服务器的端口。这个端口上接收到的DHCP Offer、Ack、Nak等响应报文,交换机放行。
- 非信任端口(Untrusted):连接终端用户的普通接入端口。按照默认逻辑,终端端口只能发出Discover和Request请求报文,禁止接收任何来自“服务器方向”的响应报文。
换句话说,交换机不再信
