(1)使用多宿主DHCP服务器,连接多个独立的子网。
/NIC1:192.168.1.1---交换机组1---子网1
DHCP server/
\NIC2:10.0.0.1---交换机组2---子网2
(2)使用DHCP relay
假如 DHCP server有多个 DHCP 作用域,网关 ip 地址字段 (GIADDR) 中的地址会标识将从哪个 DHCP 作用域提供 IP 地址租约。
那就是说A子网的client向子网B的DHCP server请求IP时,会向A本地子网发送255.255.255.255的广播,路由器的端口或DHCP中继服务器的网卡接收到广播,将该报文加入GIADDR段(即路由器将接收报文的端口地址加到报文里,DHCP中继服务器将自身IP加到报文里),最后将该报文转发给子网B的DHCP server,DHCP server根据GIADDR来给client分配何子网作用域的IP。
了解中继代理中继代理是在不同子网上的客户端和服务器之间中转 DHCP/BOOTP 消息的小程序。根据征求意见文档 (RFC),一种描述协议设计和相关操作的标准文档,DHCP/BOOTP 中继代理是 DHCP 和 BOOTP 标准和功能的一部分。
DHCP/BOOTP 路由器支持
在 TCP/IP 网络中,路由器用于连接称作“子网”的不同物理网段上使用的硬件和软件,并在每个子网之间转发 IP 数据包。要在多个子网上支持和使用 DHCP 服务,连接每个子网的路由器应符合在 RFC 1542 中描述的 DHCP/BOOTP 中继代理功能。
要符合 RFC 1542 并提供中继代理支持,每个路由器必须能识别 BOOTP 和 DHCP 协议消息并相应处理(中转)这些消息。由于路由器将 DHCP 消息解释为 BOOTP 消息(例如通过相同的 UDP 端口编号发送并包含共享消息结构的 UDP 消息),具有 BOOTP 中继代理能力的路由器中转网络上发送的 DHCP 数据包和任何 BOOTP 数据包。
假如路由器不能作为 DHCP/BOOTP 中继代理运行,则每个子网都必须有在该子网上作为中继代理运行的 DHCP 服务器或另一台计算机。假如配置路由器支持 DHCP/BOOTP 中继不可行或不可能,您可以通过安装 DHCP 中继代理服务来配置运行 Windows NT Server 4.0 或更高版本的计算机充当中继代理。
大多数情况下,路由器支持 DHCP/BOOTP 中继。假如您的路由器不支持,则应与路由器制造商或供给商联系以查明是否有软件或固件升级提供对该功能的支持。
中继代理的工作原理
中继代理将它连接的其中一个物理接口(如网卡)上广播的 DHCP/BOOTP 消息中转到其他物理接口连至的其他远程子网。下图显示了子网 2 上的客户端 C 是如何从子网 1 上的 DHCP 服务器 1 获得 DHCP 地址租约的。
DHCP 客户端 C 使用众所周知的 UDP 服务器端口 67 在子网 2 上以“用户数据报协议 (UDP)”的数据报广播 DHCP/BOOTP 查找消息 (DHCPDISCOVER)。端口 67 是 BOOTP 和 DHCP 服务器通信所保留和共享的。
中继代理,在 DHCP/BOOTP 答应中继的路由器的情况下,检测 DHCP/BOOTP 消息头中的网关 IP 地址字段。假如该字段有 IP 地址 0.0.0.0,代理文件会在其中填入中继代理或路由器的 IP 地址,然后将消息转发到 DHCP 服务器所在的远程子网 1。
远程子网 1 上的 DHCP 服务器 1 收到此消息时,它会为该 DHCP 服务器可用于提供 IP 地址租约的 DHCP 作用域检查其网关 IP 地址字段。
假如 DHCP 服务器 1 有多个 DHCP 作用域,网关 IP 地址字段 (GIADDR) 中的地址会标识将从哪个 DHCP 作用域提供 IP 地址租约。
例如,假如网关 IP 地址 (GIADDR) 字段有 10.0.0.2 的 IP 地址,DHCP 服务器会检查其可用的地址作用域集中是否有与包含作为主机的网关地址的类别 A IP 网络匹配的地址作用域范围。在这种情况下,DHCP 服务器将对 10.0.0.1 和 10.0.0.254 之间的地址作用域进行检查。假如存在匹配的作用域,则 DHCP 服务器从匹配的作用域中选择可用地址以便在对客户端的 IP 地址租约提供响应时使用。
当DHCP 服务器 1 收到 DHCPDISCOVER 消息时,它会处理 IP 地址租约 (DHCPOFFER) 并将其直接发送给在网关 IP 地址 (GIADDR) 字段中标识的中继代理。
路由器然后将地址租约 (DHCPOFFER) 转发给 DHCP 客户端。
客户端的 IP 地址仍然无人知道,所以它必须在本地子网上广播。同样,根据 RFC 1542,DHCPREQUEST 消息从客户端中转发服务器,而 DHCPACK 消息从服务器转发到客户端。