一般的家用路由器会“傻瓜式”的自动设置 WAN 和 LAN 的 IPv6 获取和分配,而 UniFi 路由器是要自己配置的,然后我不会🤡。通过几天零散的学习终于理清一点 IPv6 的分配原理。
DHCPv6 和 SLAAC
DHCPv6 (Dynamic Host Configuration Protocol for IPv6) 和 SLAAC (Stateless Address Autoconfiguration,无状态地址自动配置) 是两种常见的分配 IPv6 地址的方法。
简单点来说 DHCPv6 的 IPv6 地址分配是有状态的,是通过 DHCP 服务器统一分配的。而 SLAAC 的 IPv6 地址分配是无状态的,是通过设备自己将获取到的 IPv6 前缀和MAC 地址通过 EUI-64 自动生成的一个 IPv6 地址。
DHCPv6
如果知道 DHCPv4的工作原理,就很好理解 DHCPv6,他们都是依赖 DHCP 服务器来分配 IP 地址和其他网络配置的(默认网关、DNS服务器和DNS域名)。他可以更好的集中控制 IP 的分配和其他网络配置信息来实现更精细的网络管理和配置,适合大型企业或数据中心。
中国运营商家宽获取 IPv6 基本是 DHCPv6。下面是粗略的用户家庭网络获取 IPv6 地址前缀的关键过程。
- 前缀分配:
- 运营商的 DHCPv6 服务器配置有一定范围的 IPv6 前缀。
- 当用户的家庭网关(比如路由器)启动时,它会通过 DHCPv6 向运营商请求 IPv6 前缀。
- 前缀委派:
- DHCPv6 服务器接收到请求后,从其可用范围中选择一个前缀,并将其分配给用户的网关。
- 这个分配过程可能会包括其他网络设置,如DNS服务器地址。
- 前缀使用:
- 网关收到IPv6前缀后,会在其本地网络上使用这个前缀来生成IPv6地址。
- 这通常是通过SLAAC(无状态地址自动配置)实现的,其中设备利用网关广播的前缀自动生成IPv6地址。
- 地址管理:
- 虽然 IPv6 前缀是由运营商动态分配的,但通常情况下,这些前缀在一段时间内保持不变。
- 运营商的DHCPv6服务器会记录哪些前缀已经分配给了哪些用户。
SLAAC
正如流程3中所示,在获取到运营商分配的 IPv6 前缀后,大部份路由器是通过 SLAAC 来给设备分配 IPv6 地址的。该方法允许设备根据本地链路的网络前缀和设备的 MAC 地址自动生成自己的 IPv6 地址,无需中央服务器。

得益于 IPv6 充足的地址空间,IPv6 地址可以较为随意地自动生成,终端网络无需小心翼翼的在有限的地址池中为设备分配地址,也不需要使用 NAT 来让网络中的设备共享一个公网地址。IPv6 内置的多播和邻居发现能力也都是支持 SLAAC 的关键要素。
而下面就是网络中设备获取 IPv6 地址的流程。
- 路由请求(Router Solicitation):
- 由需要配置 IPv6 的主机使用 ICMPv6 协议发送的组播包,向网络中的路由器请求路由宣告。
- 路由器通告(Router Advertisement, RA):
- 网络中的路由器使用 ICMPv6 协议发送路由器通告消息向设备宣告网络前缀信息和其他网络参数。
- 地址生成:
- 当一个设备(如电脑、手机)接收到路由器通告时,它会使用通告中的网络前缀与其自己的网络接口卡(NIC)的唯一标识符(通常是 MAC 地址)结合生成IPv6地址。
- 这个过程通常包括 EUI-64 格式的转换,将48位 MAC 地址转换成64位的接口标识符
- 地址检查:
- 生成地址后,设备会进行重复地址检测(Duplicate Address Detection, DAD)以确保新生成的地址在本地网络上是唯一的。
- 如果检测到地址冲突,设备将生成一个新的地址并重复检测过程。
- 地址配置:
- 一旦确认地址唯一,设备就会将这个 IPv6 地址配置为其网络接口的地址。
前缀委派(Prefix Delegation)
PD(Prefix Delegation)是 DHCPv6 的一项扩展,其实IPv6的前缀和IPv4中的子网掩码很像。我们只需要和运营商确定 IPv6 前缀长度,并在路由器上设置对应的数值,就可以获取正确的 IPv6 前缀了。
由于每个地区的运营商 IPv6 前缀长度各不相同,而长度的不同决定了我们的路由器可以分配多少个子网。例如我的运营商提供60位的前缀,这允许有16个子网(128-64-60 = 4,2^4 = 16),而每个子网内有2^64个单独地址,足够一般的家庭使用了。
总结
之前一直习惯于 IPv4,从未仔细了解过 IPv6 之中的细节。本文也只是粗劣的描述了其中的很小的部分,如有错误还请指出。