事情得从我重装了这个沟槽的 Windows 11 开始。
苦于 WSL 没有 ipv6 用,而我是 ipv6 的深度用户,我决定尝试使用 mirror 网络模式让 wsl 用上 ipv6.
在启用 mirror 模式后,起初 wsl 无法上网。按照网上教程打开了“Windows 虚拟机监控程序平台”功能后,wsl 用上了 ipv6, 不过几分钟就开始连不上了。重启以后 wsl 甚至无法启动。我不得不关掉 mirror 模式改回 nat 模式。nat 模式可以上网了,但是宿主机开始出问题:每次 dns 查询都要等 10-11s 才能返回结果。关闭“Windows 虚拟机监控程序平台”功能也无济于事。
经过抓包,我发现所有 DNS 请求都是第一时间发出并收到回复的,但是 Windows 迟迟不给出回复。Hyper-V 虚拟交换机的子分支也抓到了包,证明 Hyper-V 虚拟交换机没有问题。当且仅当查询的名称只有 ipv4 记录或 ipv6 记录时会出问题,同时有 ipv4 记录和 ipv6 记录则会立即返回。同时,系统启动前几分钟是没问题的,后面会开始出问题,而且出问题后不会自动恢复。
打开熟悉的网络与共享中心,找到适配器设置,我发现所有的旧适配器都被安装了“桥驱动程序”和“嵌套网络虚拟化”。禁用这两个驱动后,网络恢复了正常。
后续零星时候还会出现 DNS 超长延时的情况。一般是某几个网络适配器的“桥驱动程序”和“嵌套网络虚拟化”驱动没有被禁掉导致的。禁用以后就恢复正常了。我尝试删除这两个驱动,会报错无法删除。
坠机了,失败了。
卸载了 WSL 也不行。
不过在重装 WSL 时发现它用 dism.exe 按照了 VirtualMachinePlatform
正在安装 Windows 可选组件: VirtualMachinePlatform
可能跟这个有关。
下次把 Hyper-V 和 WSL 和其它东西一起卸载一遍试试,还有 docker 和 Sandbox.
在删掉 Hyper-V 和 Docker for Windows 后两个驱动消失不见了,症状也没有复发,是好事。不过如何彻底关掉 Hyper-V(VBS) 又是一个新的问题了,下一篇文章再讲。
发表回复