弹霄博科

小谈谈一亩三分地



RouteOS DHCPv6 固定前缀(DHCPv6 PD)


发布日期: 2024/10/21
更新日期: 2024/10/25
作者: 小谈谈
分类: RouterOS
标签: ros, dhcpv6, prefixhint, 固定前缀, DHCP 协议, Option
阅读时间: 4 分钟
字数: 1101 字


DHCPv6 是 IPv6 环境下地址分配的一种协议,可以将网络配置参数从服务器段分配到客户端。DHCPv6-PD(Prefix Delegation,前缀分配)是 DHCPv6 的扩展,字如其名,其注重的是前缀分配,即服务器端将一个子网范围的前缀地址段和其他网络配置(如 DNS)下发到客户端。

当服务器端将一个前缀下发给客户端(当然这个客户端一般是边界路由器),同时会在这个客户端的上联设备上生成对应的路由,此时你可以在这个客户端(路由器)的本地接口上使用这个前缀下的任意 /64 子网地址。

类比 IPv4,相当于运营商给你了个 /24,这个 /24 内其他地址你说了算,可以在你的网络中任意分配。DHCPv6-PD 描述的就是这样一个过程。

DHCPv6-PD请求过程

请求

续租

释放

动态?固定?

动态和固定似乎是一个冲突的事情,但是 DHCPv6 PD 中为我们提供了一个“机会”,将 DHCPv6 DP 服务器申请前缀。后面会说为什么是“机会”。

Hint 申请固定前缀

一般情况下可以从 PPPoE 接口通过 DHCPv6 协议获取前缀或地址,如下图。

[图片: 20241025003520]
https://static.txisfine.cn/upload/20241025003520.png/pkwatermark

选择接口是 PPPoE 接口,Request 类型为 Prefix(前缀)。为了更好的分配这个前缀,我们可以把它们放到一个地址池中,以我这边为例,地址池的长度为/64,名称是 poolv6cmnet。

Prefix Hint 为你要申请的前缀,你有两种方式可以获取它。1)你对你们当地的网络非常了解,你可以直接写一个没有在用,且合法的地址作为 Hint,相当于自选前缀。2)留空,保存,等待分配一次,将分配的结果写在这里。

通过这个选项,在一定程度上,我们就有了一个相对固定的前缀。

抓包分析

在上面的内容中,我们分析了 DHCPv6-PD 请求过程。下面我们通过抓包的方式来观察一下这个过程。

  • DHCPv6 Solicit,当 ROS 配置 DHCPv6 Client 的 Request 类型为前缀时,IAPD 的 Option 为 25,表示是在请求前缀。Option 26 表示你要进行请求的前缀信息,也就是 Hint 的值。
  • [图片: 20241025082922]
    https://static.txisfine.cn/upload/20241025082922.png/pkwatermark

  • DHCPv6 Advertise,服务器端通过该报文确认 Prefix 可用,返回和上文一致的 IAID。如果不可用则返回一个可用的 Prefix。同时可能通过其它 Option 来下发其它网络信息,例如下图通过 Option 23 下发 DNS 配置。
  • [图片: 20241025083038]
    https://static.txisfine.cn/upload/20241025083038.png/pkwatermark

  • DHCPv6 Request,客户端通过该报文向服务器请求,确认占用 Prefix,IA Prefix 和 IAID 应该和上文一致。
  • [图片: 20241025083141]
    https://static.txisfine.cn/upload/20241025083141.png/pkwatermark

  • DHCPv6 Reply,服务器确认分配,过程结束。
  • [图片: 20241025083242]
    https://static.txisfine.cn/upload/20241025083242.png/pkwatermark

    为什么说只是个机会?

    从实测看,部分地区确实不支持 Option 26。虽然你携带了相关的前缀,但是在 DHCPv6 Advertisese 的过程中会拒绝你申请的前缀,并给你返回一个新的前缀。这样的话,这个功能就没有效果了。

    第二种情况就是,当你长时间不在线的时候,可能会存在 DHCPv6 地址租约过期等原因,前缀会被其它用户所使用。此时你再上线,你也无法和在线用户抢夺之前的前缀,你的前缀也就会变化了。