摘要

  • RFC 3011 允许请求方指定一个不同于报文到达网络的地址分配子网,从而把观察到的来源拓扑与请求消耗的地址池分开。
  • 服务器原样回送选项 118,只能证明这一处理环节进入了交互;它不能证明请求者身份、地址池使用权、路由可达性、地址无冲突或最终服务结果。

DHCP 服务器在挑选地址之前,首先要知道该看哪个地址池。RFC 2131 给出了一个符合直觉的答案:若中继填写了 giaddr,服务器据此识别客户端所在子网;若该字段为零,就看报文从服务器的哪个本地接口进入。报文走过的路径,通常足以代表资源应当落在哪个网络。

远程接入设备暴露了这个推论的边界。设备可以通过内部专网访问 DHCP 服务器,却替连接在多个外部网络上的用户分配地址。内部网与外部网甚至可能不存在普通 IP 连通。请求只能从内部送出,地址却必须来自外部池。若服务器忠实地按到达路径选池,它做得越“正确”,分配结果反而越错误。

2000 年 11 月发布的 RFC 3011 把这项例外变成公共协议。IPv4 Subnet Selection Option 携带一个四字节子网地址:把该子网内任意 IPv4 地址与掩码相与,使主机位归零。今天的 IANA BOOTP/DHCP 参数登记表 仍将它列为长度为四的 DHCP 选项 118。

对明确启用该能力的服务器而言,这不是可有可无的提示。选项 118 优先于依据 giaddr 或接收接口进行的普通判断。服务器必须从指定子网,或同一网络段上的另一个子网中提供地址,不得跨出这个边界。

因此,选项 118 并没有否定报文来源。内部接口仍然是服务器实际观察到的入口,giaddr 仍然可以描述可达的返回点。它只是拒绝让这项观察自动拥有地址池选择权。来源是事实;目标子网是请求;是否批准则是服务器的本地决策。

RFC 3011 特别保留了第三层事实:回复路径。续租时,服务器可能把 DHCPACK 直接发往已分配地址,但外部地址未必能从服务器所在的内部网路由到达。因此,凡携带选项 118 的请求,都必须在 giaddr 中给出一个请求方能够接收 DHCP 报文的 IPv4 地址。用于取地址的子网与用于收回复的地址,从此可以明确不同。

规范还设计了一张很窄的处理回执。服务器若启用并支持选项 118,就必须在回复中原样复制它,即使客户端没有在参数请求列表里另行索取。依赖该机制的客户端必须丢弃不含该选项的 DHCPOFFER 或 DHCPACK。

这项“拒收”规则解决的是混合部署问题。旧服务器可能不认识 118,按普通逻辑从内部池给出地址;认识它但被管理员配置为忽略的服务器,也会如此。两种回复在 DHCP 语法上都可能完全有效,却没有执行请求方需要的跨子网选择。缺少回送选项,就说明这项特殊合同并未成立。

但是,字节被原样回送并不等于全部事实都获证明。它不认证远程接入设备,不赋予该设备消耗任何外部池的权利,也不证明分配地址存在路由、没有冲突或真正交给了用户。回执只覆盖“服务器按这一能力处理了交互”这一小段链路。

安全风险正来自这个新自由。当时的 DHCP 本身没有认证机制。一个原本只能耗尽本地池的恶意请求方,若能任意指定目标子网,就可能把攻击扩展到多个远端池。选项没有创造稀缺,但扩大了一个请求者可以触及的稀缺面。

因此,RFC 3011 要求该功能默认关闭,必须通过配置主动启用;服务器还应能按客户端标识、请求来源或允许的目标子网进行限制。协议标准化了表达方式,却没有把表达能力升级为资源授权。

RFC 2132 提供了代码—长度—值的选项语法。RFC 3011 让代码 118 具有共同含义。可解析性解决了实现互通,服务器配置才决定是否行动。把二者混在一起,就像认为一句话只要语法正确便必须执行。

后续标准把相似的拓扑声明向受运营方控制的中继侧移动。RFC 3046 定义 DHCP Relay Agent Information,让中继加入电路标识与远端标识。RFC 3527 又增加 Link Selection 子选项,使分配网络可以不同于服务器联系中继所用的地址。

RFC 3527 延续而不是消除了三分结构。giaddr 可继续承担返回中继的地址;Link Selection 决定分配网络;最终地址属于客户端一侧。若客户端的选项 118 与中继的 Link Selection 同时出现,后者优先。优先级来自运营信任边界,而不是两项声明看起来有多相似。

即便如此,“在回复中又看见该子选项”也不总能证明服务器理解了它,因为 Relay Agent Information 容器可能被机械复制。RFC 3527 要求通过管理手段确保中继只把请求发送给支持能力的服务器。RFC 3118 定义了 DHCP 认证,但标准存在不能证明某个网络已经部署并正确使用它。

RFC 7969 后来梳理了按拓扑定制 DHCP 的多种工具,包括 Subnet Selection、Link Selection 与 Virtual Subnet Selection。机制增多不是因为拓扑失去意义,而是因为单一到达位置再也无法同时代表物理链路、逻辑网络、VPN、地址池、中继返回点与用户归属。

因此,可信记录不能只留一个租约结果。它应分别保存入接口、观察到的源、giaddr、客户端标识、选项 118、命中的策略版本、所选地址池、报价地址、回送选项与回复目的地。租约建立之后,还需要路由、邻居、用户会话与应用结果的独立证据。

按照 Lu Heng 对运行代码与现实层次的要求,RFC 3011 的价值恰恰在于它很小。它没有接管整个 DHCP 流程,只在管理员允许时替换“从哪个子网取地址”这一输入。共同标准保留了本地决策,却要求本地决策不能再伪装成网络路径的自然结果。

报文确实来自内部网;地址确实应来自外部网;回复仍需回到可达点。RFC 3011 的历史贡献,是让这三件同时成立的事实各自留下凭据,而不让其中任何一件冒充另外两件。

Sources