微软今天属于是史诗级更新 WSL2 到 2.0 版本,带来了以下特性:
支持自动回收内存
支持自动释放 WSL2 虚拟硬盘空间
支持和 Windows 使用相同的网络(镜像网络)
支持 DNS Tunneling
支持 Windows 设置的代理
支持 Windows 防火墙
支持 Multicast
微软更新了 WSL2,允许用户自行指定用于 WSL2 的网卡,因此不再需要任何的脚本等等即可固定 WSL2 地址甚至支持 IPv6 和外部访问。
注意:此方法需要至少 Windows 11 22H2。
首先需要从 Microsoft Store 里面下载最新的 Windows Subsystem for Linux。
用不了商店的可以前往这里自己下载 msixbundle 部署安装:https://github.com/microsoft/WSL/releases
装好之后可以运行 wsl --version
确认一下是不是 1.0 以上。
如果不是2.0及以上输入此命令更新wsl:wsl --update --pre-release
WSL 2 发布了最新版本 2.0.0,这个版本开始,自带支持新的镜像网络解决所有的网络相关问题。
你需要做的就是:
在用户目录 %USERPROFILE%
下面创建一个配置文件 .wslconfig
,写入以下内容:
[experimental] autoMemoryReclaim=gradual # 可以在 gradual 、dropcache 、disabled 之间选择 networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true sparseVhd=true hostAddressLoopback=true
然后运行 wsl --manage 发行版名字 --set-sparse true
启用稀疏 VHD 允许 WSL2 的硬盘空间自动回收,比如 wsl --manage Ubuntu --set-sparse true
最后你会发现,WSL2 和 Windows 主机的网络互通而且 IP 地址相同了,还支持 IPv6 了,并且从外部(比如局域网)可以同时访问 WSL2 和 Windows 的网络。这波升级彻底带回以前 WSL1 那时候的无缝网络体验了,并且 Windows 防火墙也能过滤 WSL 里的包了,再也不需要什么桥接网卡、端口转发之类的操作了。并且 WSL2 的内存占用和硬盘空间都可以自动回收了!
另外,使用 VSCode - WSL
插件的,建议去 VSCode 设置里把自动端口转发关掉(Remote: Auto Forward Ports
),避免冲突,因为 WSL2 更新之后新的网络已经是和你的 Windows 使用相同网络了,不再需要端口转发了。
最后,如果你在 WSL 里使用 docker,那需要将 autoMemoryReclaim
配置为 dropcache
或者 disabled
,然后在 /etc/docker/daemon.json
里添加一句 "iptables": false
,否则你可能无法正常使用 docker。