📌 前言

最近在搭建一个企业无线网络环境时,遇到一个典型的“DHCP Discover报文无法转发”的问题。拓扑结构是:AP → LSW交换机 → AC(无线控制器,作为DHCP中继)→ LSW核心交换机 → AR3路由器(作为DHCP服务器) 。配置完成后,AP始终无法获取IP地址,AC上抓包能看到AP发来的Discover报文,但DHCP服务器毫无反应。

经过一系列排查,最终定位到三个层面的问题:AC的中继配置不完整VLAN规划与三层接口不匹配DHCP服务器侧路由缺失。整个过程涉及华为AC、交换机、路由器三款设备,把DHCP中继从零到一的完整踩坑经历记录下来,希望能帮到遇到类似问题的同行。


🔧 第一部分:问题背景与拓扑

拓扑结构

AP1/AP2/AP3/AP4(接入层)
        │
        ▼
   LSW汇聚交换机
        │
        ▼
   AC(无线控制器)    ← 充当DHCP中继角色
        │
        ▼
   LSW核心交换机(10.0.8.1)
        │
        ▼
   AR3路由器(10.0.8.3) ← DHCP服务器

需求

  • AP的管理VLAN为 VLAN 100,需要从DHCP服务器获取IP地址。

  • AC的 Vlanif100 接口IP为 192.168.100.1,作为AP的网关和中继源地址。

  • DHCP服务器地址池:192.168.100.0/24,网关 192.168.100.1,DNS 8.8.8.8


🔍 第二部分:问题排查全过程

问题现象

  1. AP启动后无法上线,获取不到IP地址。

  2. 在AC连接AP的接口抓包,能看到 DHCP Discover(目的地址255.255.255.255) 报文。

  3. 在AC连接核心交换机的上行口抓包,看不到任何发往 10.0.8.3 的单播报文

  4. 在DHCP服务器(AR3)上抓包,能收到Discover报文,但没有发送Offer回应

🧠 排障思路(逐步推进)

步骤 排查点 检查结果 处理措施
1 AC是否收到AP的Discover报文 ✅ 收到(抓包确认) 物理链路正常
2 AC是否将广播“翻译”成单播发给DHCP服务器 ❌ 上行口无单播包 AC缺少Vlanif100三层接口和DHCP中继配置
3 AC是否创建了Vlanif100接口 ❌ 只有Vlanif1(169.254.1.1) 创建Vlanif100,配置中继指向10.0.8.3
4 DHCP服务器是否能收到经过中继的Discover ✅ 收到(抓包确认) 网络层已通
5 DHCP服务器是否回应Offer ❌ 无回应 地址池未绑定接口 + 回程路由缺失
6 修复后DHCP是否正常工作 ✅ AP成功获取IP 全网打通

📝 第三部分:关键配置汇总

1️⃣ LSW汇聚交换机(连接AP和AC)

交换机端口配置

bash

# AP接入端口(G0/0/0)—— 允许AP的管理VLAN 100通过
interface GigabitEthernet0/0/0
 port hybrid tagged vlan 2 to 4094
 lldp dot3-tlv power 802.3at

# AC连接端口(G0/0/2)—— Trunk透传管理VLAN和业务VLAN
interface GigabitEthernet0/0/2
 port link-type trunk
 port trunk pvid vlan 100          # 管理VLAN设为PVID
 port trunk allow-pass vlan 100 to 101

📌 关键点:AP端口的PVID要与AC端的Vlanif接口对应。本例中AP发来的不带标签的报文会被归入VLAN 100,AC需要创建Vlanif100来处理这些报文。


2️⃣ AC(无线控制器)—— DHCP中继配置

这是本次排障的核心修复点。AC原本只有 Vlanif1(169.254.1.1),这是一个链路本地地址,无法作为中继源,且缺少Vlanif100三层接口。

修复配置:

bash

system-view

# 1. 创建管理VLAN
vlan batch 100

# 2. 创建Vlanif100三层接口(作为AP的网关和中继源地址)
interface Vlanif100
 ip address 192.168.100.1 255.255.255.0
 dhcp select relay                 # 开启中继功能
 dhcp relay server-ip 10.0.8.3     # 指向DHCP服务器(AR3)

# 3. 删除无用的Vlanif1(避免干扰)
undo interface Vlanif1

# 4. 保存配置
save

📌 关键点

  • dhcp select relay 和 dhcp relay server-ip 缺一不可,否则AC不会执行“广播→单播”的翻译动作。

  • AC的Vlanif100 IP地址必须与DHCP服务器上地址池的 gateway-list 保持一致(都是 192.168.100.1)。


3️⃣ AR3路由器(DHCP服务器)配置

AR3作为独立的DHCP服务器,物理口 GigabitEthernet0/0/0 配置管理IP 10.0.8.3/24,连接核心交换机。

DHCP服务配置:

bash

system-view

# 1. 全局开启DHCP服务
dhcp enable

# 2. 创建地址池 vlan100(匹配AP的管理VLAN网段)
ip pool vlan100
 gateway-list 192.168.100.1
 network 192.168.100.0 mask 255.255.255.0
 dns-list 8.8.8.8

# 3. 在物理接口下指定使用全局地址池(关键!)
interface GigabitEthernet0/0/0
 dhcp select global

# 4. 添加回程路由(关键!)
ip route-static 192.168.100.0 255.255.255.0 10.0.8.1

# 5. 保存
save

📌 关键点

  • 物理接口必须执行 dhcp select global,否则AR3虽然收到Discover报文,但不知道用哪个地址池分配IP。

  • 回程路由是本次排障的最后一块拼图。Offer报文的目标IP是 192.168.100.1(AC的Vlanif100),AR3必须知道去往该网段的下一跳是核心交换机(10.0.8.1),否则Offer包会被丢弃。


4️⃣ LSW核心交换机(10.0.8.1)配置

核心交换机需要配置回指路由,将DHCP Offer报文从AR3转发给AC。

bash

system-view

# 添加静态路由:去往192.168.100.0/24网段的下一跳是AC的Vlanif100 IP
ip route-static 192.168.100.0 255.255.255.0 192.168.100.1

# 或者在核心交换机上创建Vlanif100(如果AC的网关在核心交换机上)
# 根据实际拓扑二选一

🧪 第四部分:验证与测试

1. 在AC上检查中继状态

bash

display dhcp relay interface Vlanif100

正常输出应显示:

text

DHCP relay agent running information of interface Vlanif100 :
 Server-IP                   : 10.0.8.3

2. 在AC上查看AP上线状态

bash

display ap all

AP状态应从 Idle 变为 Normal,表示成功获取IP并与AC建立CAPWAP隧道。

3. 在DHCP服务器上查看地址分配情况

bash

display ip pool name vlan100

可以看到已分配的IP地址列表,Idle 字段减少,Used 字段增加。

4. 连通性测试

在AR3上ping AC的Vlanif100 IP:

bash

ping -a 10.0.8.3 192.168.100.1

能通,说明回程路由正常,Offer报文可以正确送达。


💡 第五部分:排障总结与经验教训

🎯 核心收获

  1. DHCP中继的两个必要条件缺一不可

    • 在VLANIF接口下必须同时配置 dhcp select relay 和 dhcp relay server-ip

    • 缺少任何一条,AC只会收包,不会翻译转发。

  2. VLAN三层接口必须与物理端口PVID对应

    • 交换机端口PVID是VLAN 100,AC就必须有对应的 Vlanif100

    • 如果AC只有 Vlanif1,报文会被丢弃或无法路由。

  3. DHCP服务器的地址池绑定和路由是关键

    • 物理口必须执行 dhcp select global 或 dhcp select interface,否则地址池不会生效。

    • 回程路由最容易遗漏:服务器回复的Offer是单播给 giaddr(即AC的Vlanif100 IP),如果服务器没有去往该网段的路由,Offer包就发不出去。

  4. 抓包是排障的第一利器

    • AC下行口(接AP)抓包:看到Discover(广播)→ 说明AP→AC链路正常。

    • AC上行口(接核心)抓包:看到发往10.0.8.3的单播包 → 说明中继生效。

    • DHCP服务器抓包:看到Discover但无Offer → 问题在服务器侧(地址池绑定或路由)。

📚 思维导图式排障路径

text

AP无法获取IP
  ├─ 物理层/二层排查
  │   ├─ AP与交换机端口链路正常?
  │   ├─ 交换机端口PVID是否对应管理VLAN?
  │   └─ 交换机Trunk是否放行了管理VLAN?
  │
  ├─ 中继设备(AC)排查
  │   ├─ 是否存在对应的VLANIF接口?
  │   ├─ VLANIF接口IP是否与地址池网关一致?
  │   ├─ 是否配置了 dhcp select relay ?
  │   └─ 是否配置了 dhcp relay server-ip ?
  │
  └─ DHCP服务器排查
      ├─ 全局 dhcp enable 是否开启?
      ├─ 是否存在匹配的地址池?
      ├─ 物理接口是否绑定了 dhcp select global/interface ?
      └─ 是否有去往 giaddr 网段的回程路由?

🏆 最终效果

经过上述修复,AP成功从AR3获取到 192.168.100.x 网段的IP地址,与AC建立CAPWAP隧道并正常上线。无线终端连接SSID后,也能通过AC的中继从AR3获取业务地址,全网无线业务恢复正常。


🔗 附录:参考命令速查

设备 用途 命令
交换机 配置Trunk端口 port link-type trunk
port trunk pvid vlan 100
port trunk allow-pass vlan 100 101
AC 配置DHCP中继 interface Vlanif100
ip address 192.168.100.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 10.0.8.3
AR3 配置全局地址池 dhcp enable
ip pool vlan100
gateway-list 192.168.100.1
network 192.168.100.0 mask 255.255.255.0
dns-list 8.8.8.8
AR3 接口绑定地址池 interface GigabitEthernet0/0/0
dhcp select global
AR3 添加回程路由 ip route-static 192.168.100.0 255.255.255.0 10.0.8.1
核心交换机 添加回指路由 ip route-static 192.168.100.0 255.255.255.0 192.168.100.1
通用 验证中继状态 display dhcp relay interface Vlanif100
通用 查看地址池分配 display ip pool name vlan100
通用 查看AP上线状态 display ap all

📮 写在最后

这次排障让我深刻体会到,DHCP中继看似简单,实则涉及二层VLAN透传、三层接口配置、中继功能开启、地址池绑定、路由回指等多个环节,任何一环缺失都会导致“能抓到包但就是不通”的诡异现象。

希望这份排障记录能给遇到类似问题的同行一些启发。如果有更好的思路或建议,欢迎交流讨论!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐