Windows子系统 WSL2 配置教程-Mirrored网络模式

z2025 2026-02-10 22:25 1

Windows子系统 WSL2 配置教程-Mirrored网络模式


wsl 是windows下一个linux子系统,就是一台linux虚机,不过微软给集成的更好。


有wsl1和wsl2版本,现在都用wsl2


有什么用途:




  • 平时你想在linux环境中测试东西




  • Claude Code、Codex 等agent在win下虽然能用,但是调用命令还是容易出错,wsl下会更流畅,工具更丰富




接下来我主要介绍我Mirrored网络模式的使用,如果你默认nat模式用的很好,那就不用调整。


安装 WSL + Debian


需要 Windows 10 2004+ 或 Windows 11。


powershell


# PowerShell 管理员执行,会自动安装 WSL2 内核 + Debian(推荐Debian,你可以安装其他ubuntu发行版)
wsl --install -d Debian
# 安装完重启电脑

重启后会自动弹出 Debian 窗口,提示设置用户名和密码。之后在终端输入 wsl 即可进入。


powershell


# 确认版本是 WSL2
wsl -l -v
# 应显示 Debian Running 2

如果报错提示虚拟化未开启,需要:



  1. 进 BIOS 开启 Intel VT-x / AMD-V

  2. 「启用或关闭 Windows 功能」中勾选「适用于 Linux 的 Windows 子系统」和「虚拟机平台」

  3. 重启后重新执行安装命令


然后就可以在里面装你需要用的软件了。在里面可以/mnt/d/这样访问win下的文件,尽量不要在里面经常访问win下文件,性能差


有可能你win下已经装了docker-desktop, 这时候其实已经有了一个docker-desktop的wsl虚机,下次docker启动可能会提示,最好去docker设置中改为忽略这个其他的虚机


网络模式


默认网络模式是nat模式,相当于一台拥有独立ip的机器,每次重启进入wsl都这个ip都会变


导致在wsl中启动了个服务,win宿主机想访问,还要先找到wsl中的ip地址,用ip:8080访问


比如平时里面启动一个服务,想看下效果,但是还要去找ip,太烦,


所以推荐改为mirroed网络模式,好处就是:



  • WSL 里启动到某个端口的服务,win可以直接localhost:端口访问,反过来也是,互通

  • 不用再查 WSL 的 IP(NAT 模式每次重启 IP 会变)


Mirrored 网络模式配置



Windows 11 22H2 以上可以配置



修改配置为mirrored模式


路径:C:\Users\你的用户名\.wslconfig 修改配置如下


[wsl2]
networkingMode=Mirrored

[experimental]
sparseVhd=true
autoMemoryReclaim=Gradual

配置说明:
























配置项 作用
networkingMode=mirrored WSL 与 Windows 共享网络栈,localhost 互通
autoMemoryReclaim=gradual 空闲时自动回收内存还给 Windows
sparseVhd=true 删除文件后硬盘文件 vhdx 自动缩小,不会只增不减

修改后执行 wsl --shutdown 重启生效。


当然也可以直接按 Win键 ,输入wsl Settings 有个设置界面可以配置,也是改的上面的这个文件


其他的配置项可以看官方文档 Advanced settings configuration in WSL | Microsoft Learn


打开wsl中的项目


vscode和idea等都支持通过wsl打开项目,wsl也可以直接在某个目录输入 code . (注意这个点)的命令来自动弹出vscode打开这个目录,


其他常见问题


TUN 模式的 MTU 问题


如果你Win下使用代理工具的 TUN 模式(v2rayN、Clash Verge 等),开启 mirrored 后大概率会遇到 WSL 内网络极慢甚至无法联网


原因


Mirrored 模式下,WSL 和 Windows 之间通过 Hyper-V 虚拟交换机通信,其 MTU 为 1500。而 sing-box/mihomo 的 TUN 默认 MTU 是 9000。大包穿越虚拟交换机时被分片重组,导致严重的性能下降。


比如你下载一个很小的文件,就卡在那不动,巨卡。


解决


在代理工具的 TUN 配置中将 MTU 改为 1500 不同的软件搜下怎么改


改完重启代理工具和 WSL 即可,对实际代理速度无影响(互联网标准 MTU 本来就是 1500)。


Win下的docker-desktop启动失败,频繁重启


这个我没找到合适的解决方案,看起来是docker也是用wsl,全局改了mirror影响到了他依赖的docker-desktop wsl子系统。


后来想通一件事情,我没必要win下装docker-desktop了,这样现在是两个wsl启动着,完全没必要,直接在我的debian中安装docker-ce就完美了,这样只有一个子系统还节省资源。


Hyper-V 防火墙放行


Mirrored 流量走虚拟交换机,需要放行入站规则,否则可能连不上 WSL 里的服务:


# PowerShell 管理员执行(一次性)
Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow

访问外网的问题


如果你win宿主机的v2rayN这些软件,你平时不开tun模式,那还要解决wsl中访问google的问题,可以配置http_proxy类似环境变量,或者开启autoProxy的配置,可以看下官方的配置,推荐开tun


配置完以上内容,基本上就可以正常使用,其他问题,可以看看官方文档 Accessing network applications with WSL | Microsoft Learn


如果哪里有问题可以回复探讨下,怎么优雅的使用wsl。

如果有帮助给点个赞, ^-^

最新回复 (19)
  • xxpsj 02-10 22:43
    1

    感谢教程

  • 野王996 02-10 22:48
    2

    必须是比较新的版本才可以,老的版本不支持这几个参数

  • linfeline 02-10 22:51
    3

    佬和我折腾WSL2的路径几乎一模一样,nat转发实在太难配置了,改了mirrored后好很多。


    唯一发现的缺点是,mirrored模式下只会映射真实的硬件网卡驱动,如果是例如移动热点开启等生成的虚拟网络不会在WSL2下出现,这点导致局域网内共享数据或者端口服务的时候,必须依托于另外的热点才行


    至于docker重复启动,我改了mirroed模式后wsl2启动加win11打开docker desktop的情况下,依旧可以正常docker compose up -d,不太明白为什么佬的不行。

  • JH M 02-10 22:51
    4

    我尝试把Java项目放在wsl2中,在win端用idea直接打开。

    在mirrored下经常遇到项目在idea下无法正常启动debug的情况。

    虽然大概率是jetbrain的bug,折腾了几天,但最终我还是换回了nat。

  • SodaSizzle 02-10 22:54
    5

    Mirrored模式有个bug好几年了, Error code: CreateInstance/CreateVm/ConfigureNetworking/0x8007054f · Issue #12351 · microsoft/WSL,这个问题困扰我许久了

  • 大帅哥 02-10 23:02
    6

    感谢大佬教程

  • z2025 楼主 02-10 23:14
    7

    我是台式机,还没遇到你热点网络的问题。


    我主要是codex, claude code在win下跑的看着台吃力了,powershell调用的影响效率,决定后续主要在wsl中让他们运行搓代码


    docker反复重启的,我也没搞懂,后来我想通我没必要让docker-desktop也开个wsl子系统,直接docker装到我的debian下多好。就卸了装进去了。


    目前比nat好用多了,我主要打开里面启动的服务,看看网页长什么样子,点评点评,继续让他们跑 ^-^

  • z2025 楼主 02-10 23:17
    8

    我还没遇到,idea打开里面代码卡卡的,懒得用。


    我是想通了,既然趋势是代码都不写了,那我也就不调试了,idea也不开了,直接vscode打开里面的代码,过一眼就行了。让agent在里面编译测试好。


    真要我调试的,我win下再拉代码启动

  • z2025 楼主 02-10 23:21
    9

    还没遇到过,看着下面的人说的像是端口冲突,还真有可能吧,毕竟现在是一个网络,端口共享,


    后续遇到了再看看怎么整

  • ychell 02-10 23:23
    10

    先标记一下,后面遇到问题再看

  • 改名楠 02-10 23:34
    11

    我有个问题,我电脑就是安装不了wsl。

    bios的虚拟化也开了,





    三条命令也强制开启了,



    但我一重启,就下面这个恢复原状了,



    我发现在重启的过程中,屏幕显示这个下面



    这到底该怎么办呢

  • noahmp47 02-11 00:00
    12

    mark,之前wsl2下装Ubuntu从c盘迁移走后各种错误用不了,现在只能老老实实在c盘试着调试

  • hjw_arch 02-11 00:17
    13

    镜像模式的bug感觉还挺多,我碰到一些问题有些一直也没能解决,现在用回nat了,感觉也还挺方便的

  • z2025 楼主 02-11 08:15
    14

    佬,现在系统能进去了吧,看来这个还有点风险的,注意备份。



    1. 先看下你操作系统版本是不是: Windows 10 2004+ 或 Windows 11 以上,不是的话先更新下系统,再尝试开启会更顺利。

    2. 如果刚才已经是这个版本至少报错,看下C:\Windows\Logs\CBS\CBS.log日志中,那个时间点的日志,把日志发给ai让他搜下,看看可能的问题,

      系统日志也可以看看, Win + R → 输入:eventvwr.msc

  • chenmh 02-11 08:54
    15

    镜像模式,确实比较方便

  • muscular 02-11 08:57
    16

    感谢,之前就是因为wsl连梯子,鼓捣好久都搞不定,

  • kevenyan 02-11 09:03
    17

    学习一下

  • gfourdx 02-11 09:12
    18

    这里有发行版的安装包:

    旧版 WSL 的手动安装步骤 | Microsoft Learn

    以Debian为例, 下载地址是: https://aka.ms/wsl-debian-gnulinux

    下载完成后得到一个 .AppxBundle 的包, 使用7z解压, 找到里面以 _x64.appx结尾的文件

    再用7z打开, 全选里面的文件, 解压到你想存放的路径, 比如 D:\WSL\Debian

    双击里面的debian.exe按照提示完成初始化即可, 这样就解决了WSL默认安装到C盘的问题

  • IO 02-11 09:17
    19

    不用那么费劲,官方早就提供GUI了



* 帖子来源Linux.do
返回