Windows 上的 IPv6

2023-06-15 21:50:38 +08:00
 Songxwn

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 地址无关的。 此地址是固定,一般生成之后,不会改变。


 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 地址。这是因为旧的临时地址过期的时候,旧地址还有建立的连接。

查看 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

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 等系统较新版本可能会支持。

个人博客

https://songxwn.com/ipv6-Windows/

2251 次点击
所在节点    分享创造
8 条回复
Jirajine
2023-06-15 22:54:26 +08:00
有没有玩过部署纯 ipv6 内网,ipv4 的访问通过 NAT64 实现。
但 ipv6 一直有两个痛点没有好的办法解决:一是大部分应用不支持动态前缀,如 docker 。二是无状态的地址分配无法管理,在内网针对不同设备分流流量非常难搞。
lcdtyph
2023-06-16 07:50:55 +08:00
@Jirajine
无状态 v6 地址分流可以用 mac 地址做
应用不支持动态前缀很蛋疼,我也不知道有没有好的方案,我现在是用 nat6
Jirajine
2023-06-16 12:35:15 +08:00
@lcdtyph EUI64 产生的地址你可以手动添加到列表上,那隐私扩展产生的随机地址呢?
这里开启有状态的 dhcpv6 也不行,纯 dhcpv6 下 Android 没法用。
lcdtyph
2023-06-16 12:42:42 +08:00
@Jirajine
不是啊,直接匹配 mac 地址啊。跟 ip 层地址没关系,因为你要分流的是设备
Jirajine
2023-06-16 13:12:12 +08:00
@lcdtyph 哦哦,这样确实可以。
不过 mac 地址在很多设备上也是随机化的,虽然同网络一般不会变,稍微麻烦一点点。
TsukiMori
2023-06-17 02:17:17 +08:00
我目前还好 多 ISP 就一个有 v6 不然 mwan3 没法配
testcaoy7
2023-06-17 17:33:50 +08:00
@Jirajine 很想这么做,但是不会
Jirajine
2023-06-17 17:54:14 +08:00
@testcaoy7 如果我的局域网完全自用不需要处理访客设备,可能会考虑折腾一下。国外很多 ISP 已经开始只提供接入 nat46 的纯 ipv6 网络了,正常使用还是没问题的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/949113

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX