用 WSL 开发,最常碰到的两个问题:Windows 和 WSL 之间的文件怎么快速互访?WSL 里跑的服务 Windows 怎么访问?反过来呢?
这两个问题看着简单,但配置不对的时候能折腾一下午。这篇文章把文件映射和网络互通一次讲透。
一、文件映射:把 WSL 钉进资源管理器
方法一:映射网络驱动器(推荐)
打开「此电脑」→ 顶部菜单「映射网络驱动器」,填入路径:
\\wsl$\Ubuntu\home\你的用户名
选个盘符(比如 Z:),勾选「登录时重新连接」。完成之后资源管理器里就多出一个 Z: 盘,双击直接进 WSL 家目录,拖拽文件、右键复制,和本地盘没区别。
命令行也能搞定:
net use Z: \\wsl$\Ubuntu\home\你的用户名 /persistent:yes
/persistent:yes 表示重启后自动重连,不用每次手动挂。
方法二:固定到快速访问
资源管理器地址栏输入 \\wsl$\Ubuntu,回车打开后右键文件夹 →「固定到快速访问」。不会变成盘符,但左侧侧边栏一点就进,也够方便。
注意:
\\wsl.localhost\Ubuntu是新版路径,效果和\\wsl$一样。但只能在资源管理器里打开,浏览器里输入无效——浏览器不支持 SMB 协议。
WSL 访问 Windows 文件
反过来更简单,WSL 启动时自动把 Windows 盘符挂到 /mnt/ 下:
C 盘 →
/mnt/c/D 盘 →
/mnt/d/
直接 cd /mnt/c/Users/你的用户名/Desktop 就能访问桌面文件,不需要任何配置。
二、网络互通:NAT vs Mirrored
WSL2 有两种网络模式,体验差别很大。
NAT 模式(默认)
默认模式下 WSL 有独立 IP,类似虚拟机的网络。
Windows → WSL:自动打通。WSL 里跑 python -m http.server 8000,Windows 浏览器打开 localhost:8000 直接通,不用配。
WSL → Windows:需要 Windows 的 IP。查一下:
ip route show | grep -i default | awk '{ print $3}'
拿到 IP(比如 172.30.96.1),然后 curl http://172.30.96.1:3000 就能访问 Windows 侧的服务。
痛点:IP 每次重启可能变;连 VPN 时经常断网;局域网设备访问不到 WSL 里的服务,得手动加 portproxy:
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=$(wsl hostname -I)
Mirrored 模式(推荐)
Windows 11 22H2 及以上可以开启镜像模式,一步到位解决 NAT 的所有痛点。
在 %USERPROFILE%\.wslconfig 里写:
[wsl2]
networkingMode=mirrored
然后 PowerShell 里 wsl --shutdown 重启 WSL。
开启后的好处:
双向 localhost:Windows 和 WSL 互相用
127.0.0.1就能访问,不用查 IP。WSL 里跑的服务localhost:8000,Windows 直接通;Windows 跑的服务,WSL 里curl localhost:3000也通。IPv6 支持
VPN 兼容性大幅改善:NAT 模式下连 VPN 经常 DNS 解析失败、断网,mirrored 模式下基本不折腾
局域网可以直接访问 WSL:不用 portproxy 了
组播支持
如果需要放行 Hyper-V 防火墙(管理员 PowerShell):
Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow
三、DNS Tunneling + 自动代理
mirrored 模式下还有两个配套功能,建议一起开。
同样在 .wslconfig 里:
[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true
dnsTunneling:WSL 的 DNS 请求走虚拟化通道,不用走网络包。VPN 环境下 DNS 解析不再抽风,域名解析速度也更快。Windows 11 22H2+ 默认已开,但显式写上更保险。
autoProxy:Windows 侧配了代理(Clash、V2Ray 等),WSL 里自动继承代理设置,不用手动设
http_proxy和https_proxy环境变量。
四、完整配置参考
一份可直接用的 .wslconfig:
[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true
文件位置:C:\Users\你的用户名\.wslconfig,改完后 wsl --shutdown 重启生效。
WSL 侧的 /etc/wsl.conf 如果还没开 systemd,也一并加上:
[boot]
systemd=true
小结
需求 | 方案 |
|---|---|
Windows 访问 WSL 文件 |
|
WSL 访问 Windows 文件 | 直接进 |
Windows 访问 WSL 服务 | mirrored 模式用 |
WSL 访问 Windows 服务 | mirrored 模式用 |
VPN 环境 DNS 抽风 | 开 |
代理手动设 | 开 |
文件映射 + mirrored 网络 + DNS tunneling + auto proxy,这套组合配好之后,WSL 和 Windows 之间的边界基本就模糊了,开发体验接近原生 Linux。
