摘要

  • RFC 9928 把旧式 IPv4 客户端无法执行的 DHCPv4-over-DHCPv6 封装工作交给 4o6RA,因此客户端不用改造也能穿过 IPv6 网络取得 IPv4 配置。
  • 角色替代也改变了观察点:一次格式正确的往返不能证明二层接入口信息到达服务器、拓扑策略选择正确,或客户端最终可达。

迁移验收表里有四个绿色结果:客户端发出了 DHCPv4,请求被装进 DHCPV4-QUERY,服务器返回了响应,中继又把内部 DHCPv4 消息交给客户端。于是结论栏写上“配置成功”。

真正缺失的不是第五个绿色结果,而是一条来源链。记录没有说明请求从哪个端口或 VLAN 进入,也没有说明服务器依据哪一组拓扑信息选择地址和参数。响应可能完全符合协议,却是根据不完整的接入位置作出的正确计算。中继事务成立,不等于配置含义成立;配置被客户端接受,也不等于后续路径可用。

RFC 7341 让 DHCPv4 消息可以借 DHCPv6 传输,在 IPv6 网络中动态取得 IPv4 地址和参数。原来的做法要求客户端自身理解 DHCP 4o6。现实里有些嵌入式终端只会 IPv4,寿命很长,无法换软件甚至无法更换设备。RFC 9928 因此把封装和解封装移到交换机或路由器中的 DHCPv4-over-DHCPv6 Relay Agent,也就是 4o6RA。

终端仍以为自己只在使用普通 DHCPv4;对 RFC 7341 而言,4o6RA 却接过了客户端角色。它选择充当 DHCPv6 客户端的接口,寻找合适的 DHCPv6 服务器或中继,取得必要的 IPv6 配置,并请求 DHCP 4o6 Server Address option。随后,它把终端请求封装为 DHCPV4-QUERY,再从 DHCPV4-RESPONSE 中取出内部响应。

RFC 9928 刻意没有创造新消息格式,也没有给合规的 DHCP 4o6 服务器增加额外要求。返回消息缺少 DHCPv4 message option 或格式错误时,4o6RA 必须丢弃;内部响应正确且实际可转发时,才应取出并交还请求方。这些规则能被实现、测试和审计,是一层很薄的共同机制。

但地址分配可能依赖拓扑。RFC 7969 说明了 DHCPv4 与 DHCPv6 表达路径的不同。DHCPv4 通常只有第一个中继填写 giaddr,多级中继只带来部分拓扑;DHCPv6 则可由各级中继提供 link-address 和 Interface-ID,把客户端到服务器之间的路径交给服务器。

客户端自行执行 DHCP 4o6 时,DHCPv6 中继知道封装消息从哪个接口到来。若把 4o6 工作移到 IPv6 边缘的中间节点,DHCPv6 一侧看见的“客户端”就成了 4o6RA,4o6RA 背后的二层网络被遮住了。RFC 9928 对此并不含糊:只有 4o6RA 的方案不会在封装消息中提供那段接口信息,因此会破坏拓扑传递。

标准建议把 RFC 6221 的 LDRA 与 4o6RA 背靠背组合,让 LDRA 把 Interface-ID 放进出站查询。可标准同时划清了边界:两个功能之间怎样交换接口信息、用什么格式、是否标明 4o6RA 参与,都不在 RFC 9928 的范围内。

这不是规范留下的“空白支票”。它把共同协议与本地实现分开。Heng Lu 的最小初始规范原则要求共同层只承载互操作所必需、参与者能本地验证的内容;后续选择留给承担后果的本地运行者。因而运营方必须自行证明 4o6RA 与 LDRA 之间的映射,而不能用“符合 RFC”替代这份证明。

另一个本地义务是把客户端的全部 DHCPv4 广播和单播都导向 4o6RA。RFC 9928 提到把中继置于必经位置,或对单播使用 NAT。若同一二层范围内仍可直接访问普通 DHCPv4 服务器,消息可能绕开 4o6RA,客户端和服务器各自形成错误状态,甚至产生影响可达性的误配置。RFC 把它归类为部署错误而非新增安全问题;这一分类不会自动承担停机代价。

因此,可靠证据包应分层保存:客户端事务标识与请求哈希;入口端口、VLAN 或等价接入事实;4o6RA 选择的 DHCPv6 接口与服务器发现结果;查询和响应哈希;有序的中继链、link-address 与 Interface-ID;服务器实际收到的策略输入;所选地址与参数;中继的格式检查和转发决定;客户端接受的租约与选项;冲突检查;最后是独立的路由、可达性或服务观测。

每层还要有自己的责任人。接入团队证明终端出现在哪里;中继团队证明消息如何变换;DHCP 服务团队证明哪项规则作出分配;终端负责人证明本地安装了什么;业务运维证明结果是否真的可用。即使这些角色属于同一部门,也不能合并记录,因为它们的失效时刻、回滚方法和证据保留期不同。

运行代码优先并不是相信任何绿色面板,而是尊重程序实际计算出的范围。中继成功证明中继事务,服务器响应证明服务器决定,客户端绑定证明本地配置,探针证明某一时刻的路径观察。把四者连接起来,才是闭环;把第一项改名为“网络已配置”,只是用标签借走了后面三层的权威。

来源