← 回到技术随笔
· 8050 字

H3C交换机DHCP Snooping配置实例

以教学实验网络为例,在 H3C S5570S 和 Comware V7 上配置 DHCP Snooping,演示可信端口、非法 DHCP 应答拦截和动态终端绑定。

本文是教学示例,不是我们公司当前生产网络的实际配置。仍在使用 DHCP 的公司如果需要防止非法 DHCP 服务器,可以参考本文思路,并根据真实网络调整后再上线。

一、现场场景

我们公司以前也使用 DHCP,电脑接入网络后会自动取得地址。后来出于安全管理方面的考虑,公司把终端全部改成了静态 IP 地址,所以这个案例不是当前生产网络的实际配置。

为了演示 DHCP 网络中的一种防护方法,我搭建了一个简化的办公网络实验:电脑通过 DHCP 自动获取地址,合法 DHCP 服务器位于上级网络。如果在普通接入口连接另一台提供 DHCP 服务的设备,它也可能向实验电脑分配错误的地址、网关和 DNS。

DHCP Snooping 可以把端口分成两类:

  • 可信端口:允许 DHCP 服务器的应答报文进入;
  • 非可信端口:普通电脑使用的接入口,不允许它向网络发送 DHCP 服务器应答。

这个拓扑是为了教学而简化的:DHCP 应答经过聚合上联 Bridge-Aggregation1 进入接入交换机,实验电脑连接 GigabitEthernet1/0/1GigabitEthernet1/0/48,使用 VLAN 10。端口数量、VLAN 和上联方式不是我们公司的实际配置,有需要的公司可以根据自己的网络规划替换。

项目 示例值
交换机 HQ-Access-01
设备系列 H3C S5570S
软件版本 Comware V7
办公 VLAN VLAN 10
DHCP 应答进入端口 Bridge-Aggregation1
办公终端端口 GigabitEthernet1/0/1GigabitEthernet1/0/48
IPv4 地址分配 DHCP
IPv6 地址分配 按现场情况启用 DHCPv6

如果 DHCP 服务器直接连接这台交换机,可信端口应该是服务器所在端口,而不是本例中的聚合上联。

二、配置目标

  1. 在 VLAN 10 开启 DHCP Snooping;
  2. 只把 DHCP 应答实际进入的聚合上联设为可信端口;
  3. 在办公终端端口记录 IPv4 和 IPv6 动态绑定;
  4. 确认电脑仍能取得正确的地址、网关和 DNS;
  5. 确认交换机能看到真实的 IP、MAC、VLAN 和接入端口。

三、配置前检查

1. 确认 DHCP 应答从哪里进入

可信端口不是固定的“上联口”,而是合法 DHCP 服务器应答进入交换机的端口。先根据拓扑和现有配置确认实际方向:

# 查看 VLAN 10 包含哪些端口,确认办公端口和上联都在正确的 VLAN 中。
<HQ-Access-01> display vlan 10

# 查看聚合接口状态,确认 Bridge-Aggregation1 正常工作。
<HQ-Access-01> display link-aggregation summary

# 查看聚合上联的当前配置,确认 VLAN 10 可以通过。
<HQ-Access-01> display current-configuration interface Bridge-Aggregation1

# 查看设备上已有的 DHCP Snooping 配置,避免覆盖旧策略。
<HQ-Access-01> display current-configuration | include dhcp

# 查看当前 IPv4 和 IPv6 可信端口。
<HQ-Access-01> display dhcp snooping trust
<HQ-Access-01> display ipv6 dhcp snooping trust

如果现场经过 DHCP Relay 转发,应把面向 Relay 的端口设为可信端口。不能因为不确定就把所有端口设为可信,否则普通接入口上的非法 DHCP 服务器也会被放行。

2. 记录测试电脑当前信息

选择一台允许短暂断网的测试电脑,在 Windows 命令提示符中执行:

# 记录电脑当前的 IPv4、IPv6、网关、DNS、DHCP 服务器和物理地址。
ipconfig /all

同时记录电脑连接的交换机端口。第一次只在这个端口启用绑定记录,确认没有问题后再扩大范围。

四、Comware V7 配置实例

代码块中以 # 开头的是文章注释,不需要输入交换机。

1. 在 VLAN 10 开启 DHCP Snooping

<HQ-Access-01> system-view

# 只在办公 VLAN 10 开启 IPv4 DHCP Snooping,减少对其他 VLAN 的影响。
[HQ-Access-01] dhcp snooping enable vlan 10

开启后,VLAN 10 中的端口默认都是非可信端口。此时还没有指定合法 DHCP 应答的入口,不能停在这里,应继续配置可信上联。

2. 把聚合上联设为可信端口

# 进入办公 VLAN,把合法 IPv4 DHCP 应答进入的聚合上联设为可信端口。
[HQ-Access-01] vlan 10
[HQ-Access-01-vlan10] dhcp snooping trust interface Bridge-Aggregation 1
[HQ-Access-01-vlan10] quit

本例的上联由两个物理端口组成,但可信配置要下在 Bridge-Aggregation1,不能分别配在聚合成员端口上。

3. 先在一个办公端口记录绑定

# 先选择已经核对过的测试电脑端口。
[HQ-Access-01] interface GigabitEthernet 1/0/1

# 记录这个端口上通过 DHCP 获取的 IPv4、MAC、VLAN 和端口信息。
[HQ-Access-01-GigabitEthernet1/0/1] dhcp snooping binding record
[HQ-Access-01-GigabitEthernet1/0/1] quit
[HQ-Access-01] return

在测试电脑上重新获取 IPv4 地址:

# 这两条命令会让测试电脑短暂断网,只在允许测试时执行。
ipconfig /release
ipconfig /renew

# 检查新取得的地址、网关、DNS 和 DHCP 服务器是否正确。
ipconfig /all

回到交换机查看绑定:

# 应看到测试电脑真实的 IPv4、MAC、VLAN 10 和 GigabitEthernet1/0/1。
<HQ-Access-01> display dhcp snooping binding

4. 扩大到已经确认的办公端口

测试端口正常后,再给其他办公端口启用绑定记录。本例确认 1/0/11/0/48 全部是 VLAN 10 的电脑接入口,所以使用端口范围:

<HQ-Access-01> system-view

# 只选择已经核对过的办公终端端口,不能把上联、服务器或其他业务端口混进来。
[HQ-Access-01] interface range GigabitEthernet 1/0/1 to GigabitEthernet 1/0/48

# 记录这些端口上的 IPv4 DHCP 动态绑定。
[HQ-Access-01-if-range] dhcp snooping binding record
[HQ-Access-01-if-range] quit
[HQ-Access-01] return

现场端口不连续时,应分组配置实际端口,不要为了使用一条范围命令而把无关端口一起选中。

5. 网络使用 DHCPv6 时再配置 IPv6

如果办公网确实通过 DHCPv6 分配 IPv6 地址,可以同时启用 DHCPv6 Snooping:

<HQ-Access-01> system-view

# 只在 VLAN 10 开启 DHCPv6 Snooping。
[HQ-Access-01] ipv6 dhcp snooping enable vlan 10

# 把合法 DHCPv6 服务器应答进入的聚合上联设为可信端口。
[HQ-Access-01] vlan 10
[HQ-Access-01-vlan10] ipv6 dhcp snooping trust interface Bridge-Aggregation 1
[HQ-Access-01-vlan10] quit

# 在已经确认的办公终端端口记录 DHCPv6 动态绑定。
[HQ-Access-01] interface range GigabitEthernet 1/0/1 to GigabitEthernet 1/0/48
[HQ-Access-01-if-range] ipv6 dhcp snooping binding record
[HQ-Access-01-if-range] quit
[HQ-Access-01] return

如果 IPv6 地址由路由通告自动生成,而不是由 DHCPv6 分配,DHCPv6 绑定表可能没有记录。这不代表命令失效。DHCPv6 Snooping 也不能阻止伪造的 IPv6 路由通告,这类问题要另外规划防护。

五、Comware V5 配置差异

本文参考的 H3C S5500 Comware V5 Release 2208,IPv4 DHCP Snooping 使用的是旧命令 dhcp-snooping,并且是全局开启:

<HQ-Access-01> system-view

# V5 使用 dhcp-snooping 全局开启 IPv4 DHCP Snooping。
[HQ-Access-01] dhcp-snooping

# 合法 DHCP 应答从聚合上联进入,因此只信任这个接口。
[HQ-Access-01] interface Bridge-Aggregation 1
[HQ-Access-01-Bridge-Aggregation1] dhcp-snooping trust
[HQ-Access-01-Bridge-Aggregation1] quit
[HQ-Access-01] return

# 查看 IPv4 可信端口、绑定记录和报文统计。
<HQ-Access-01> display dhcp-snooping trust
<HQ-Access-01> display dhcp-snooping
<HQ-Access-01> display dhcp-snooping packet statistics

V5 Release 2208 的 IPv4 Snooping 会根据收到的 DHCP 报文记录动态绑定,不使用 V7 的 dhcp snooping binding record

需要 DHCPv6 Snooping 时,V5 的 VLAN 开启方式也不同:

<HQ-Access-01> system-view

# 全局开启 DHCPv6 Snooping。
[HQ-Access-01] ipv6 dhcp snooping enable

# 在 VLAN 10 中启用 DHCPv6 报文处理和绑定记录。
[HQ-Access-01] vlan 10
[HQ-Access-01-vlan10] ipv6 dhcp snooping vlan enable
[HQ-Access-01-vlan10] quit

# 在合法 DHCPv6 应答进入的聚合接口上配置可信。
[HQ-Access-01] interface Bridge-Aggregation 1
[HQ-Access-01-Bridge-Aggregation1] ipv6 dhcp snooping trust
[HQ-Access-01-Bridge-Aggregation1] quit
[HQ-Access-01] return

# 查看 DHCPv6 可信端口和动态绑定。
<HQ-Access-01> display ipv6 dhcp snooping trust
<HQ-Access-01> display ipv6 dhcp snooping user-binding dynamic

V5 和 V7 的命令不能混用。聚合上联同样应配置在聚合接口上,不要配在它的物理成员端口上。

六、验证方法

1. 检查可信端口

# IPv4 结果中应只有经过确认的合法 DHCP 应答入口。
<HQ-Access-01> display dhcp snooping trust

# 配置了 DHCPv6 时再检查 IPv6 可信端口。
<HQ-Access-01> display ipv6 dhcp snooping trust

普通办公端口不应出现在可信列表中。发现多余的可信端口,应先查明用途,再删除错误配置。

2. 检查动态绑定

# 查看 IPv4 DHCP 客户端的 IP、MAC、VLAN 和端口。
<HQ-Access-01> display dhcp snooping binding

# 使用 DHCPv6 的网络再查看 IPv6 动态绑定。
<HQ-Access-01> display ipv6 dhcp snooping binding

绑定表中的端口、MAC 和地址要与测试电脑一致。刚开启功能但客户端还没有重新申请地址时,表中可能暂时没有记录,可以等待续租或在测试窗口手动更新。

3. 检查报文统计

# 查看 IPv4 DHCP Snooping 收到、转发和丢弃的报文数量。
<HQ-Access-01> display dhcp snooping packet statistics

# 使用 DHCPv6 时查看对应统计。
<HQ-Access-01> display ipv6 dhcp snooping packet statistics

统计中的丢弃数量增加不一定就是故障,需要结合发生时间、端口和现场接线判断。不要在生产网络接入家用路由器测试拦截效果;这类测试应放在隔离的测试 VLAN 或实验环境中。

4. 检查实际业务

至少选择几台不同端口的电脑重新获取地址,确认:

  • 能取得实验中规划的地址;
  • 默认网关和 DNS 正确;
  • 能访问内网和互联网;
  • 交换机绑定表显示的端口和 MAC 与现场一致;
  • 原有电话、打印机、无线 AP 等终端没有受到影响。

验证正常后再保存配置:

# 确认 DHCP 分配和实际业务正常后保存。
<HQ-Access-01> save force

七、常见问题与处理

1. 开启后所有电脑都拿不到地址

最常见的原因是可信端口配错,合法 DHCP 应答被交换机丢弃。先确认 DHCP 服务器或 Relay 的实际方向,再检查对应端口是否出现在可信列表中。

2. 聚合上联的两个物理端口要不要分别配置

不要。本例应配置 Bridge-Aggregation1。配置在聚合成员物理端口上的 DHCP Snooping 功能不会生效。

3. 绑定表为什么是空的

先确认客户端使用 DHCP,而不是手动设置地址;再确认终端端口已经配置 dhcp snooping binding record,并让测试电脑重新申请地址。

IPv6 还要确认现场是否真的使用 DHCPv6。通过路由通告自动生成的 IPv6 地址不会形成 DHCPv6 租约。

4. 配置后能不能阻止电脑手动设置静态地址

不能。DHCP Snooping 主要拦截非可信端口上的非法 DHCP 服务器应答并记录动态绑定。要限制终端冒用静态 IP,还需要根据现场设计配置 IP Source Guard、ARP 检测等策略,不能只靠本文配置。

5. 为什么不能把所有上联都设为可信

“上联”只是端口用途,不代表它一定会收到合法 DHCP 应答。只信任 DHCP 服务器或 Relay 的真实方向,才能避免错误链路上的非法应答被放行。

八、回退方法

如果配置后合法客户端无法获取地址,可以先关闭 VLAN 10 的 Snooping,让业务恢复,再清理本次配置并重新核对可信方向:

<HQ-Access-01> system-view

# 先关闭 VLAN 10 的 IPv4 和 IPv6 Snooping,停止本次策略对业务的影响。
[HQ-Access-01] undo dhcp snooping enable vlan 10
[HQ-Access-01] undo ipv6 dhcp snooping enable vlan 10

# 删除聚合上联上的可信配置。
[HQ-Access-01] vlan 10
[HQ-Access-01-vlan10] undo dhcp snooping trust interface Bridge-Aggregation 1
[HQ-Access-01-vlan10] undo ipv6 dhcp snooping trust interface Bridge-Aggregation 1
[HQ-Access-01-vlan10] quit

# 删除办公端口上的绑定记录配置。
[HQ-Access-01] interface range GigabitEthernet 1/0/1 to GigabitEthernet 1/0/48
[HQ-Access-01-if-range] undo dhcp snooping binding record
[HQ-Access-01-if-range] undo ipv6 dhcp snooping binding record
[HQ-Access-01-if-range] quit
[HQ-Access-01] return

如果现场只配置了 IPv4,不需要执行 IPv6 的回退命令。回退后先确认电脑重新取得地址和业务恢复,再决定是否保存。

九、小结

DHCP Snooping 的关键不是把命令复制到每个端口,而是找准合法 DHCP 应答进入交换机的方向。上联聚合接口设为可信,普通办公端口保持非可信,非法 DHCP 服务器的应答才会被拦截。

配置时先用一台测试电脑和一个端口验证,再扩大到已经核对过的办公端口。完成后既要看可信端口和绑定表,也要检查电脑实际取得的地址、网关、DNS 和业务访问是否正常。

十、完整配置汇总

下面汇总本教学实验的 Comware V7 配置。它对应文中的简化拓扑:VLAN 10 的合法 DHCP 和 DHCPv6 应答都从 Bridge-Aggregation1 进入,GigabitEthernet1/0/1GigabitEthernet1/0/48 都作为实验终端端口。有需要的公司可以参考,但要把 VLAN、可信上联和终端端口换成自己的实际配置。

<HQ-Access-01> system-view

# 在办公 VLAN 10 开启 IPv4 和 DHCPv6 Snooping。
[HQ-Access-01] dhcp snooping enable vlan 10
[HQ-Access-01] ipv6 dhcp snooping enable vlan 10

# 只信任合法 DHCP 和 DHCPv6 应答进入的聚合上联。
[HQ-Access-01] vlan 10
[HQ-Access-01-vlan10] dhcp snooping trust interface Bridge-Aggregation 1
[HQ-Access-01-vlan10] ipv6 dhcp snooping trust interface Bridge-Aggregation 1
[HQ-Access-01-vlan10] quit

# 在已经核对过的办公终端端口记录 IPv4 和 DHCPv6 动态绑定。
[HQ-Access-01] interface range GigabitEthernet 1/0/1 to GigabitEthernet 1/0/48
[HQ-Access-01-if-range] dhcp snooping binding record
[HQ-Access-01-if-range] ipv6 dhcp snooping binding record
[HQ-Access-01-if-range] quit
[HQ-Access-01] return

# 检查可信端口、动态绑定和报文统计。
<HQ-Access-01> display dhcp snooping trust
<HQ-Access-01> display dhcp snooping binding
<HQ-Access-01> display dhcp snooping packet statistics
<HQ-Access-01> display ipv6 dhcp snooping trust
<HQ-Access-01> display ipv6 dhcp snooping binding
<HQ-Access-01> display ipv6 dhcp snooping packet statistics

# 确认客户端获取地址和业务访问正常后保存。
<HQ-Access-01> save force

如果现场没有使用 DHCPv6,应删除完整配置中的 IPv6 命令,不要为了形式完整而开启不需要的功能。

参考资料