我学会了自动配置设备 IPv6 地址的方法。它基于 RA(路由器通告)ICMPv6 数据包中的一些标志位。
当使用SLAAC(无状态)时,设备将根据某些算法(不一定是EUI-64)生成最后64位,这些位可以连接到前缀(也是64位)以形成全球单播IPv6地址。
使用 DHCPv6(有状态)时,设备将询问 DHCPv6 服务器,DHCPv6 服务器将为该设备分配 IPv6 地址。
我知道当RA数据包中的所有“A”(自治),“M”(托管),“O”(其他)位都设置为1时,设备将配置自己的无状态地址,同时时间从 DHCPv6 服务器获取分配的地址。
当我在 Linux、macOS、 Windows 上ip addr
运行时,我可以看到我的设备有 2 个具有相同前缀的全球单播 IPv6 地址。其中之一是临时地址。我知道这是出于隐私考虑。ifconfig
ifconfig
ipconfig
我想知道我设备的这2个IPv6地址是否与自动配置地址的2种方式有关?例如,临时地址通过SLAAC配置,非临时地址通过DHCPv6配置。
我自己找到了答案。就像@vidarlo在问题评论中所说,我设备的2个IPv6地址与地址自动配置的2种方式无关。
我检查了路由器中的设置。我使用的是 OpenWRT 路由器,配置文件可以在以下位置找到
/etc/config/dhcp
(请注意,虽然文件名是“dhcp”,但它实际上还包含 SLAAC 的配置)。我发现我的路由器设置了“A”标志位,没有设置“M”标志位,并设置了“O”标志位。这意味着自动配置方法是“无状态 DHCP”。每个设备在 RA 数据包中获取 64 位前缀,并根据某些算法(可能是 EUI-64 或 RFC7217)生成自己的 64 位后缀(接口 ID),即“A”位。每个设备还会在 RA 数据包中获取 DNS 服务器,即“O”位。那么为什么有2个地址呢?这是由于 RFC 4941。您可以在堆栈交换的另一个子站点上参考此问题。