通常情况下,链路本地地址的接口 ID 是由 MAC 地址来生成的,标准叫做 EUI-64 。( RFC 2373 ) 生成的 64bit 接口 ID,叫做接口标识符。 SLAAC (无状态分配)所产生的地址,其接口 ID 也会使用接口标识符。与链路本地地址的接口 ID 一样。 而这只是在 Windows Vista 和 Windows 2008 之前的情况下。 为了安全,Windows 开始使用了随机化接口 ID 和临时地址。( RFC 3041 )
由于 EUI-64 生成的接口标识符,是由 MAC 地址生成。所以很容易根据 IPv6 地址来推断出设备的 MAC 地址。 EUI-64 是将 48bit 的 MAC 地址,其第七位取反,然后中间填充 FFFE 组成 64bit 的接口 ID 。 所以 Windows 会随机生成 64bit 的接口标识符。看下面的输出,链路本地地址明显是和 MAC 地址无关的。 此地址是固定,一般生成之后,不会改变。
C:\Users\admin> ipconfig /all
描述. . . . . . . . . . . . . . . : Intel(R) Wi-Fi 6 AX200 160MHz
物理地址. . . . . . . . . . . . . : 46-68-5C-AA-41-11
DHCP 已启用 . . . . . . . . . . . : 是
自动配置已启用. . . . . . . . . . : 是
本地链接 IPv6 地址. . . . . . . . : fe80::1e2:5910:14f3:a9d5%13(首选)
由于 SLAAC 产生的地址的接口 ID ,是接口标识符的,所以后 64bit 是基本不变的,这样很容易被跟踪。 所以需要临时地址。 临时地址也是一样随机生成 64bit 接口 ID ,用于主机作为源 IP 主动访问网站和应用。但为了安全,会经常变化。 如在接口重新连接的时候,或者临时 IPv6 生存期到期的时候。会重新随机生成另一个临时 IPv6 地址。 在某种情况下,你会看到多个临时 IPv6 地址。这是因为旧的临时地址过期的时候,旧地址还有建立的连接。
使用 Powershell 命令 get-netipv6protocol
DefaultHopLimit : 128
NeighborCacheLimit(Entries) : 256
RouteCacheLimit(Entries) : 4096
ReassemblyLimit(Bytes) : 262676960
IcmpRedirects : Enabled
SourceRoutingBehavior : DontForward
DhcpMediaSense : Enabled
MediaSenseEventLog : Disabled
MldLevel : All
MldVersion : Version2
MulticastForwarding : Disabled
GroupForwardedFragments : Disabled
RandomizeIdentifiers : Enabled //随机接口 ID 开启
AddressMaskReply : Disabled
UseTemporaryAddresses : Enabled //临时 IPv6 地址开启
MaxTemporaryDadAttempts : 3 //临时 IPv6 的重复地址检测尝试次数
MaxTemporaryValidLifetime : 7.00:00:00 //临时地址最大有效时间。
MaxTemporaryPreferredLifetime : 7.00:00:00
TemporaryRegenerateTime : 00:00:05
MaxTemporaryDesyncTime : 00:10:00
DeadGatewayDetection : Enabled
源于一个较新的 IPv6 标准(RFC 8106)。从 Windows 10 1703 开始,Windows 支持使用无状态获取 DNS 服务器了。 不过,DHCPv6 获取的 DNS 服务器优于通过 RA 报文获取的 DNS 服务器。 Android 从 4.2 开始支持,iOS 从 4.1 开始支持,MacOS 从 10.7 开始支持。
PS:Android 至今都不支持 DHCPv6 ,可能是为了安全考虑。
来源: https://en.wikipedia.org/wiki/Comparison_of_IPv6_support_in_operating_systems
https://datatracker.ietf.org/doc/html/rfc8106 https://www.networkacademy.io/ccna/ipv6/ipv6-on-windows https://docs.microsoft.com/en-us/powershell/module/nettcpip/get-netipv6protocol?view=windowsserver2022-ps
PS:随机标识符和临时地址,其他系统也会使用,如 MacOS 从 10.7 也开始使用了,Android iOS Linux 等系统较新版本可能会支持。
1
Jirajine 2023-06-15 22:54:26 +08:00
有没有玩过部署纯 ipv6 内网,ipv4 的访问通过 NAT64 实现。
但 ipv6 一直有两个痛点没有好的办法解决:一是大部分应用不支持动态前缀,如 docker 。二是无状态的地址分配无法管理,在内网针对不同设备分流流量非常难搞。 |
2
lcdtyph 2023-06-16 07:50:55 +08:00 via iPhone
|
3
Jirajine 2023-06-16 12:35:15 +08:00
@lcdtyph EUI64 产生的地址你可以手动添加到列表上,那隐私扩展产生的随机地址呢?
这里开启有状态的 dhcpv6 也不行,纯 dhcpv6 下 Android 没法用。 |
6
TsukiMori 2023-06-17 02:17:17 +08:00 via Android
我目前还好 多 ISP 就一个有 v6 不然 mwan3 没法配
|