刚开始我用Hyper-V 自定义内部网络网段和IP地址配置Hyper-V并创建了几台虚拟机, 但是和WSL的网络不通, 解决方案可以是将Hyper-V虚拟机只接使用WSL的网络适配器。不过2023年9月的WSL更新添加了一些新的实验性功能,其中包括一些关于新的网络模式“镜像”。镜像网络带来了一些实用的特性,例如将WSL中的服务开放到局域网(之前是NAT网络,只有主机可以通过localhost访问)。
更新日志中提到,镜像网络带来的新特性如下:

  • IPv6支持
  • 在Linux中通过127.0.0.1访问Windows服务
  • 通过局域网直接连接WSL
  • 对 VPN 更好的兼容性
  • 多播支持

安装使用

首先,这项特性需要22621.2359及以上版本的Windows 11以及2.0以上版本的WSL。使用wsl --version命令可以检查是否符合需求,wsl --update命令可以更新WSL。

1
2
3
4
5
6
7
8
C:\Users\iuxt>wsl --version
WSL 版本: 2.1.5.0
内核版本: 5.15.146.1-2
WSLg 版本: 1.0.60
MSRDC 版本: 1.2.5105
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows 版本: 10.0.22631.3296

确认满足版本需求后, 在windows的个人文件夹下创建.wslconfig文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[wsl2]
autoProxy=false # 是否强制 WSL2/WSLg 子系统使用 Windows 代理设置(请根据实际需要启用)
dnsTunneling=true # WSL2/WSLg DNS 代理隧道,以便由 Windows 代理转发 DNS 请求(请根据实际需要启用)
firewall=true # WSL2/WSLg 子系统的 Windows 防火墙集成,以便 Hyper-V 或者 WPF 能过滤子系统流量(请根据实际需要启用)
guiApplications=true # 启用 WSLg GUI 图形化程序支持
ipv6=true # 启用 IPv6 网络支持
localhostForwarding=true # 启用 localhost 网络转发支持
memory=4GB # 限制 WSL2/WSLg 子系统的最大内存占用
nestedVirtualization=true # 启用 WSL2/WSLg 子系统嵌套虚拟化功能支持
networkingMode=mirrored # 启用镜像网络特性支持
# pageReporting=true # 启用 WSL2/WSLg 子系统页面文件通报,以便 Windows 回收已分配但未使用的内存
processors=8 # 设置 WSL2/WSLg 子系统的逻辑 CPU 核心数为 8(最大肯定没法超过硬件的物理逻辑核心数)
vmIdleTimeout=-1 # WSL2 VM 实例空闲超时关闭时间,-1 为永不关闭,根据参数说明,目前似乎仅适用于 Win11+

[experimental] # 实验性功能(按照过往经验,若后续转正,则是配置在上面的 [wsl2] 选节)
autoMemoryReclaim=gradual # 启用空闲内存自动缓慢回收,其它选项:dropcache / disabled(立即/禁用)
hostAddressLoopback=true # 启用 WSL2/WSLg 子系统和 Windows 宿主之间的本地回环互通支持
sparseVhd=true # 启用 WSL2/WSLg 子系统虚拟硬盘空间自动回收
useWindowsDnsCache=false # 和 dnsTunneling 配合使用,决定是否使用 Windows DNS 缓存池

sparseVhd=true 生效需要稀疏vhdx, 转换命令 wsl --manage 'Ubuntu-24.04' --set-sparse true

详细配置说明:https://learn.microsoft.com/en-us/windows/wsl/wsl-config#wslconfig

然后重启WSL

1
2
wsl --shutdown
wsl

WSL网卡变化

image.png

参考文档

在WSL2中访问Windows服务的另一种选择——mirrored镜像网络
Windows Subsystem for Linux September 2023 update
Advanced settings configuration in WSL