Windows上的IPv6 - 随机接口ID和临时地址
本文最后更新于 2024年5月27日 上午
Windows和EUI-64
通常情况下,链路本地地址的接口ID是由MAC地址来生成的,标准叫做EUI-64。(RFC 2373)
生成的64bit接口ID,叫做接口标识符。
SLAAC(无状态分配)所产生的地址,其接口ID也会使用接口标识符。与链路本地地址的接口ID一样。
而这只是在Windows Vista和Windows 2008之前的情况下。
为了安全,Windows开始使用了随机化接口ID和临时地址。(RFC 3041)
随机标识符/接口ID
由于EUI-64生成的接口标识符,是由MAC地址生成。所以很容易根据IPv6地址来推断出设备的MAC地址。
EUI-64 是将48bit的MAC地址,其第七位取反,然后中间填充FFFE组成64bit的接口ID。
所以Windows会随机生成 64bit的接口标识符。看下面的输出,链路本地地址明显是和MAC地址无关的。
此地址是固定,一般生成之后,不会改变。
1 |
|
临时地址
由于SLAAC产生的地址的接口ID,是接口标识符的,所以后64bit是基本不变的,这样很容易被跟踪。
所以需要临时地址。
临时地址也是一样随机生成64bit接口ID,用于主机作为源IP主动访问网站和应用。但为了安全,会经常变化。
如在接口重新连接的时候,或者临时IPv6生存期到期的时候。会重新随机生成另一个临时IPv6地址。
在某种情况下,你会看到多个临时IPv6地址。这是因为旧的临时地址过期的时候,旧地址还有建立的连接。
查看IPv6协议配置
使用 Powershell命令 get-netipv6protocol
1 |
|
SLAAC的DNS服务器地址分配–RDNSS
源于一个较新的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等系统较新版本可能会支持。