wsl2网络问题最终解决方案

linux   2024-04-08 21:14   134   0  

微软今天属于是史诗级更新 WSL2 到 2.0 版本,带来了以下特性:

  1. 支持自动回收内存

  2. 支持自动释放 WSL2 虚拟硬盘空间

  3. 支持和 Windows 使用相同的网络(镜像网络)

  4. 支持 DNS Tunneling

  5. 支持 Windows 设置的代理

  6. 支持 Windows 防火墙

  7. 支持 Multicast

    详细可以前往:Windows Subsystem for Linux September 2023 update

微软更新了 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。


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。