WSL2 前端开发网络配置指北

4 阅读2分钟

关键词:Mirror / NAT / 回环 / VPN / Clash

WSL2 本质是 Windows 内运行的轻量 Linux 虚拟机。相比 Windows 原生开发,Node 环境更稳定、Docker 工具链兼容性更强。但实际开发中 WSL 2 可能有一些网络配置问题,导致 WSL 2启动的项目无法正常打开。

两种网络模式

NAT 模式(默认)

传统 WSL2 网络结构:

graph LR
    W[Windows Host192.168.x.x] -->|Hyper-V NAT| H[Hyper-V Switch]
    H --> L[WSL2 VM172.25.x.x]

特点:

  • WSL2 是独立 VM,有独立 IP(172.x.x.x 段)
  • Windows 和 Linux 通过 NAT 通信
  • WSL2 IP 经常变化,VPN / 代理容易出问题

localhost 通常仍能访问,因为微软做了 localhostForwarding:Windows 的 localhost 会自动代理到 WSL2 的 localhost。所以 npm run devhttp://localhost:3000 始终可用。

Mirror 模式(推荐)

.wslconfig 中配置:

[wsl2]
networkingMode=mirrored
hostAddressLoopback=true
graph LR
    W[Windows Network Stack] --> L[WSL2 VM共享 Host 网络]

核心变化:

  • WSL2 镜像 Host 网络栈
  • VPN 网卡可直接被 WSL2 使用

[!tip] 前端开发强烈推荐 Mirror 模式 如果你在用 Clash + 公司 VPN + Docker,Mirror 模式会让体验好很多。

localhost 能访问,但 Network 不行?

这是最常见的坑。

$ npm run dev

  VITE v6.0.0  ready in 320ms

  ➜  Local:   http://localhost:9528/    # ✅ 可用
  ➜  Network: http://172.28.x.60:9528/  # ❌ 不可用

Vite 的 Network 地址怎么来的?

Vite 内部调用 os.networkInterfaces() 枚举本机所有网卡,选择第一个可用 IPv4 地址。你的环境(以 AX211 网卡 + Cisco VPN 为例):

网卡IPv4说明
Intel Wi-Fi 6E AX21110.162.x.x真实联网的物理网卡
Cisco AnyConnect VPN172.28.x.60VPN 创建的虚拟网卡
vEthernet (WSL)172.19.112.1Hyper-V 虚拟交换机

Vite 显示的是 172.28.x.60 — 那是 VPN 虚拟网卡的 IP。VPN 本质就是一张虚拟网卡,Cisco AnyConnect 创建的虚拟网卡拥有完整的 MAC 地址、IP、DNS、路由。Node / Vite 会把它当成真实网络接口,所以 Vite 的 Network 地址经常显示 VPN IP。

为什么 Network 地址默认打不开?

因为 Hyper-V 默认阻止 Host IP 回流。虽然 172.28.187.60 是本机 VPN IP,但 Windows 认为这是"网络访问"而非 localhost 回环,所以 Hyper-V 会拦截。可以使用 hostAddressLoopback 配置解决

[wsl2]
hostAddressLoopback=true

这个配置允许 Host 的所有 IP(WiFi IP、VPN IP、其他网卡 IP)进行回环访问 WSL2。开启后,172.28.x.x 就能访问 WSL2 服务了。

番外聊聊 Clash 的 UWP 回环

UWP(Universal Windows Platform)是 Windows 应用商店应用的运行框架。出于安全考虑,UWP 应用运行在沙箱中,默认无法访问 localhost(127.0.0.1)。

Clash 的代理服务默认跑在 127.0.0.1:7890,UWP 应用连不上这个端口,也就走不了代理。可使用 UWP Loopback 配置将特定程序配置走 UWP 回环。