在现代企业网络环境中,为了提升网络性能、安全性和管理效率,通常会使用VLAN(虚拟局域网)技术将一个物理网络划分为多个逻辑上隔离的子网,这种设计也带来了新的挑战:DHCP(动态主机配置协议)请求是基于广播的,而路由器默认不会转发广播包到其他VLAN,这意味着,如果将DHCP服务器放置在某个VLAN中,它将无法为其他VLAN的客户端分配IP地址,为了解决这一难题,DHCP中继(或称为DHCP中继代理)应运而生。

DHCP中继的核心功能是在不同子网之间转发DHCP请求和响应报文,从而允许网络管理员集中管理DHCP服务器,实现跨网段的IP地址自动分配,在CentOS系统中,这一功能可以通过dhcrelay服务轻松实现。
工作原理
DHCP中继的工作流程清晰高效,可以概括为以下几个步骤:
- 客户端广播请求:当一个位于VLAN 10中的DHCP客户端启动时,它会发送一个DHCP Discover广播报文,目的地址为255.255.255.255。
- 中继代理接收并转发:作为DHCP中继代理的CentOS路由器,在其连接VLAN 10的接口上接收到这个广播报文,它不会丢弃该报文,而是将其重新封装成一个单播报文,然后转发给预先配置好的、位于VLAN 20的DHCP服务器,在转发过程中,中继代理会在报文中插入
giaddr(Gateway IP Address)字段,填入其接收到请求的接口IP地址(即VLAN 10的网关地址),以便DHCP服务器能确定应该从哪个地址池分配IP。 - 服务器响应:DHCP服务器收到单播请求后,根据
giaddr字段信息,从对应的地址池中选择一个可用的IP地址,并将DHCP Offer报文以单播形式发回给中继代理。 - 中继代理广播响应:中继代理收到服务器的响应后,会将其转换为广播报文,在接收原始请求的VLAN 10内进行广播。
- 客户端确认:客户端接收到Offer报文后,会发送一个DHCP Request广播请求,后续的确认(ACK)报文也遵循相同的转发路径,最终客户端成功获取IP地址。
实施场景与配置步骤
假设我们有如下网络拓扑:
| 角色 | 网络接口 | IP地址 | 所属VLAN |
|---|---|---|---|
| DHCP 客户端 | 168.10.0/24 | VLAN 10 | |
| 中继代理 (CentOS) | eth0 | 168.10.1 | VLAN 10 |
| eth1 | 168.20.1 | VLAN 20 | |
| DHCP 服务器 | 168.20.10 | VLAN 20 |
环境准备
确保作为中继代理的CentOS系统已开启IP转发功能,编辑/etc/sysctl.conf文件,添加或修改以下行:
net.ipv4.ip_forward = 1
然后执行 sysctl -p 使配置立即生效,安装DHCP软件包,它包含了dhcrelay服务:

yum install dhcp -y
配置DHCP中继代理
dhcrelay的核心配置文件位于/etc/sysconfig/dhcrelay,使用文本编辑器打开此文件,并进行如下配置:
# Command line options here
INTERFACES="eth0 eth1"
DHCPSERVERS="192.168.20.10"
OPTIONS=""
配置项说明:
INTERFACES:指定dhcrelay服务监听的网络接口,在本例中,即eth0(面向客户端)和eth1(面向服务器)。DHCPSERVERS:指定DHCP服务器的IP地址,可以指定多个服务器,用空格隔开。
配置完成后,启动并设置dhcrelay服务开机自启:
systemctl start dhcrelay
systemctl enable dhcrelay
验证与排错
配置完成后,可以通过以下方式进行验证:
- 检查服务状态:确保
dhcrelay服务正在运行。systemctl status dhcrelay - 查看日志:实时监控
dhcrelay的日志,观察其是否成功转发DHCP报文。journalctl -u dhcrelay -f - 客户端测试:将VLAN 10中的一台客户端设置为DHCP获取IP,检查其是否能成功获得
168.10.0/24网段的地址。 - 防火墙检查:确保中继代理和DHCP服务器上的防火墙(如
firewalld)允许UDP端口67(服务器端口)和68(客户端端口)的流量通过。
相关问答FAQs
问题1:DHCP中继和DHCP服务器的核心区别是什么?

回答: 核心区别在于它们的功能角色,DHCP服务器是IP地址的“仓库”,它负责维护地址池,并根据客户端的请求直接分配、管理和回收IP地址,而DHCP中继则是一个“快递员”,它本身不分配任何IP地址,其唯一职责是在不同子网之间“传递”DHCP请求和响应报文,将客户端的广播请求“打包”成单播发送给服务器,再将服务器的回复“拆包”广播给客户端,服务器是决策者,中继是通信的桥梁。
问题2:配置完成后,客户端依然无法获取IP地址,可能是什么原因?
回答: 这是一个常见的排错问题,可能的原因包括:
- 防火墙拦截:检查DHCP服务器、中继代理以及客户端所在网络的防火墙策略,确保UDP 67和68端口未被阻止。
- SELinux限制:如果CentOS系统开启了SELinux,它可能会阻止
dhcrelay转发数据包,可以尝试临时设置为宽松模式(setenforce 0)测试,或通过setsebool -P dhcprelay_allow_connect 1设置SELinux布尔值以允许DHCP中继。 - IP转发未开启:再次确认中继代理服务器的
net.ipv4.ip_forward参数是否已设置为1。 - DHCP服务器配置错误:检查DHCP服务器的配置文件(
dhcpd.conf),确保其中包含了为中继代理所在VLAN网段(即giaddr对应的网段)定义的subnet声明,并且地址池可用。 - 网络连通性问题:使用
ping和traceroute命令从中继代理测试到DHCP服务器的网络连通性是否正常。