镜像网络模式可让wsl2与windows共享同一ip,实现局域网直连。需windows 11 22h2+且wsl≥2.0.0,配置.wslconfig启用mirrored模式、开放防火墙端口并正确设置dns。

想让WSL2里的服务在局域网内被手机、平板或另一台电脑直接访问,又不想每次重启都手动配端口转发,就得让它和Windows共享同一个IP地址——镜像网络模式就是为此而生,它要求系统为Windows 11 22H2及以上、WSL版本不低于2.0.0,缺一不可。
确认系统与WSL版本是否达标
打开PowerShell,依次执行两行命令:
【winver】 → 查看弹窗中版本号是否为22H2、23H2或更高;
wsl --version → 确保显示“WSL version: 2.0.x”或更新,若提示“未识别命令”或版本低于2.0.0,需先运行 wsl --update --pre-release 升级;
这一步跳过会导致后续配置完全无效,因为镜像模式是2.0.0才引入的硬性功能,旧版.wslconfig里写 networkingMode=mirrored 会被静默忽略。
创建并写入.wslconfig配置文件
在Windows文件资源管理器地址栏输入 %USERPROFILE% 回车,进入你的用户根目录(如 C:\Users\张三);
新建一个纯文本文件,命名为 .wslconfig(注意开头的英文点号,不能加.txt后缀);
用记事本或VS Code打开,粘贴以下内容并保存:
[wsl2]
memory=8GB
processors=4
[experimental]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
⚠️ 注意:[experimental]段落必须单独成块,不能合并进[wsl2];networkingMode=mirrored 这一行必须严格写在[experimental]下,写错位置将无法启用镜像模式。
彻底重启WSL使配置生效
在Windows终端(CMD/PowerShell)中执行:
wsl --shutdown
关闭所有正在运行的WSL发行版,包括后台隐藏的Ubuntu、Debian等实例;
然后任意打开一个Linux终端(如Ubuntu),执行:
ip addr show eth0 | grep "inet " | awk '{print $2}' | cut -d'/' -f1
对比 Windows 中 ipconfig 显示的无线网卡(WLAN)或以太网适配器的IPv4地址,两者必须完全一致——比如都是 192.168.1.105,才算成功。
开放Windows防火墙端口(关键一步)
镜像模式下,WSL2服务监听的端口(如8080、3000)会直接暴露在Windows主机IP上,但默认被Windows Defender防火墙拦截;
方法一(图形界面):
打开“控制面板 → Windows Defender 防火墙 → 高级设置 → 入站规则 → 新建规则”;
选择“端口”→下一步→TCP→特定本地端口填你服务的实际端口号(如 3000,8080)→允许连接→域/专用/公用全选→命名如“WSL2 Dev Server”;
方法二(PowerShell管理员权限一次性放行多个端口):
New-NetFirewallRule -DisplayName "WSL2 Web Ports" -Direction Inbound -Protocol TCP -LocalPort 3000,8080,5173 -Action Allow
这一步漏掉,局域网设备能ping通宿主机IP,但浏览器打不开 http://192.168.1.105:3000,连curl都会超时。
验证内网域名解析是否可用
第一步:在WSL中执行 nslookup gitlab.internal.company.com(替换成你公司内网真实域名);
若返回“server can't find”或超时,说明DNS未穿透;
第二步:编辑 /etc/wsl.conf,添加以下两行:
[network]
generateResolvConf = false
第三步:退出WSL,再次执行 wsl --shutdown;
第四步:重新进入WSL,手动编辑 /etc/resolv.conf,把 nameserver 行全部删掉,只保留:
nameserver 【你公司内网DNS服务器IP】
nameserver 114.114.114.114
⚠️ 注意:/etc/resolv.conf 是WSL自动生成的,不加 wsl.conf 限制,重启后会被覆盖,导致DNS配置丢失。











