返回博客

WSL 必配!实现文件映射与 Windows 双向网络互通

WSL 必配!实现文件映射与 Windows 双向网络互通

用 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_proxyhttps_proxy 环境变量。


四、完整配置参考

一份可直接用的 .wslconfig

[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true

文件位置:C:\Users\你的用户名\.wslconfig,改完后 wsl --shutdown 重启生效。

WSL 侧的 /etc/wsl.conf 如果还没开 systemd,也一并加上:

[boot]
systemd=true

小结

需求

方案

Windows 访问 WSL 文件

net use Z: \\wsl$\Ubuntu\home\用户名 或映射网络驱动器

WSL 访问 Windows 文件

直接进 /mnt/c/,无需配置

Windows 访问 WSL 服务

mirrored 模式用 localhost:端口,NAT 模式也自动转发

WSL 访问 Windows 服务

mirrored 模式用 localhost:端口,NAT 模式用 host IP

VPN 环境 DNS 抽风

dnsTunneling=true

代理手动设

autoProxy=true 自动继承

文件映射 + mirrored 网络 + DNS tunneling + auto proxy,这套组合配好之后,WSL 和 Windows 之间的边界基本就模糊了,开发体验接近原生 Linux。