网络架构与配置
两种网络模式
WSL 2 提供两种网络架构:
NAT 模式
NAT 模式下 WSL 2 使用独立的虚拟化以太网适配器,拥有自己的 IP 地址。
从 Windows 访问 Linux 服务:
然后在 Windows 浏览器访问 http://<WSL_IP>:<端口>,或直接使用 localhost(WSL 会自动转发)。
从 Linux 访问 Windows 服务:
然后在 WSL 中使用该 IP 连接 Windows 上的服务。
从局域网访问 WSL 服务(端口转发):
WSL 2 默认不接受来自 LAN 的直接连接。需要通过 netsh 做端口转发:
查看所有端口转发规则:
删除规则:
[!note]
listenaddress=0.0.0.0 表示监听所有 IPv4 地址。应用程序需要绑定到 0.0.0.0 而非 127.0.0.1 才能接受外部连接。
镜像模式
镜像模式将 Windows 网络接口「镜像」到 Linux,WSL 和 Windows 共享网络栈。
启用方式,在 %USERPROFILE%\.wslconfig 中添加:
镜像模式的优势:
- WSL 和 Windows 之间使用
127.0.0.1 直接互通,无需查询 IP
- 支持 IPv6
- VPN 兼容性更好
- 支持多播
- LAN 设备可以直接访问 WSL 中的服务
防火墙配置(管理员 PowerShell):
DNS 隧道
Windows 11 22H2+ 默认启用 DNS 隧道,通过 WSL 内的虚拟化功能响应 DNS 请求,而非通过网络数据包。这改善了 VPN 等复杂网络环境下的 DNS 解析。
自动代理
启用后 WSL 自动使用 Windows 的 HTTP 代理配置:
VPN 与代理配置
WSL 2 使用独立虚拟网卡,网络行为与 Windows 侧不完全一致。根据实际网络环境选择适配方案。
方案一:镜像模式 + 自动代理(推荐)
Windows 11 22H2+ 用户首选。在 .wslconfig 中启用镜像模式和自动代理后,WSL 会自动继承 Windows 侧的网络和代理配置,无需额外设置:
[!tip]
启用镜像模式后,WSL 和 Windows 共享网络栈,VPN 流量会自动穿透到 WSL 内,不需要手动配代理。
方案二:NAT 模式下手动配置代理
如果使用默认 NAT 模式(Win10 或未配置镜像模式),需要在 WSL 内手动设置代理。将以下内容添加到 ~/.bashrc:
[!note]
端口号根据实际代理工具调整(Clash 默认 7890,V2Ray 默认 10809 等)。不需要代理时注释掉即可。
此方案的原理是:NAT 模式下 Windows 是 WSL 的网关(通过 resolv.conf 中的 nameserver 获取 IP),代理流量通过网关转发到 Windows 侧的代理软件。
方案三:DNS 隧道改善 VPN 解析
如果使用 VPN 后 WSL 内域名解析异常,启用 DNS 隧道可以解决:
运行 Linux GUI 应用
WSLg 能力
WSL 2 通过 WSLg 支持直接在 Windows 桌面上运行 Linux GUI 应用(X11 和 Wayland),具有以下特性:
- 从 Windows「开始」菜单启动 Linux 应用
- 将 Linux 应用固定到任务栏
- 使用
Alt+Tab 在 Linux 和 Windows 应用间切换
- 跨系统剪贴板(剪切 + 粘贴)
[!warning]
WSLg 不提供完整桌面体验。它依赖 Windows 桌面,不支持安装桌面环境或以桌面为中心的工具。
系统要求
- Windows 10 内部版本 19044+ 或 Windows 11
- WSL 2(WSL 1 不支持 GUI)
- 已安装 GPU 驱动:Intel / AMD / NVIDIA
安装 GUI 应用
先更新软件包:
GIMP(图像编辑器):
Nautilus(文件管理器,类似 Windows 资源管理器):
VLC(多媒体播放器):
GNOME 文本编辑器(Ubuntu 22.10+ 默认编辑器):
旧版 Ubuntu 使用 gedit:
Google Chrome:
Microsoft Edge(Linux 版):
X11 工具集(计算器、时钟等):
故障排除
如果 GUI 应用无法启动,参考 WSLg 故障诊断指南。
GPU 加速机器学习
WSL 2 支持两种 GPU 加速方案:NVIDIA CUDA 和 DirectML。
方案一:NVIDIA CUDA + Docker
适用条件: 拥有 NVIDIA 显卡。
步骤:
-
在 Windows 侧安装 NVIDIA 最新驱动
-
在 WSL 中安装 Docker:
- 安装 NVIDIA Container Toolkit:
- 运行 TensorFlow 容器并验证 GPU:
方案二:DirectML(TensorFlow / PyTorch)
适用条件: AMD、Intel 或 NVIDIA 显卡均可。
步骤:
-
安装对应厂商的 GPU 驱动:AMD / Intel / NVIDIA
-
设置 Python 环境(使用 Miniconda):
- 安装框架:
- 验证(Python 交互模式):
多 GPU 选择
如果机器有多个 GPU,通过环境变量选择:
使用字符串匹配,例如设置为 "NVIDIA" 会匹配以 NVIDIA 开头的第一个 GPU。
USB 设备连接
WSL 2 不原生支持 USB 设备,需要通过 usbipd-win 开源项目桥接。
前提条件
- Windows 11(内部版本 22000+),Windows 10 也支持但需额外步骤
- x64 或 ARM64 处理器(x86 不支持)
- WSL 已更新到最新版本
- Linux 内核版本 >= 5.10.60.1(通过
uname -a 检查,通过 wsl --update 更新)
安装 usbipd-win
方式一:winget
[!warning]
不要省略 --interactive,否则安装驱动时可能直接重启电脑。
方式二:手动安装
从 usbipd-win Releases 下载 .msi 安装器。
安装后会产生:
usbipd 服务(可通过 Windows 服务管理器查看状态)
usbipd 命令行工具
- 防火墙规则(允许本地子网连接)
连接 USB 设备
-
确保 WSL 终端已打开(保持 WSL 2 VM 运行)
-
以管理员身份打开 PowerShell,列出所有 USB 设备:
- 找到目标设备的 BUSID(如
4-4),绑定设备:
- 将设备附加到 WSL:
- 在 WSL 中验证:
[!warning]
USB 设备连接到 WSL 后,Windows 将无法使用该设备。所有 WSL 2 发行版共享该设备。
断开设备
物理断开 USB,或在 PowerShell 中执行:
自定义 Linux 发行版导入
Microsoft Store 外的 Linux 发行版(如 CentOS、Alpine、Gentoo 等)可以通过 tar 文件导入到 WSL 2。
获取 tar 文件
方式一:从官方下载
例如 Alpine Linux 在下载页面提供「Mini Root Filesystem」的 tar 文件。
方式二:从 Docker 容器导出
以 CentOS 为例:
导入到 WSL
设置默认用户
默认以 root 用户启动。在发行版内创建用户:
重启使生效:
构建自定义发行版
如果需要将自定义发行版打包为 UWP 应用(行为与 Store 发行版完全一致),可以按照微软官方的 构建自定义发行版指南 进行操作。
[!note]
wsl --import-in-place <发行版> <vhdx文件> 可以将一个已有的 ext4 格式 .vhdx 文件直接导入为 WSL 发行版,无需 tar 文件中转。