本文整理 WSL2、Hyper-V、普通虚拟机和 Windows 虚拟网卡之间的关系。重点说明 vEthernet (Default Switch)vEthernet (WSL ...) 的区别,以及默认 NAT 模式下 WSL 如何判断 Windows host IP。

先看结论

  • Hyper-V 是 Windows 的虚拟化底座。
  • WSL 是 Windows 上的 Linux 开发环境。
  • WSL2 使用 Windows 虚拟化能力运行轻量 Linux 环境,但使用体验不是普通虚拟机。
  • vEthernet (Default Switch) 主要服务普通 Hyper-V 虚拟机。
  • vEthernet (WSL ...) 主要服务 WSL2。
  • 默认 NAT 模式下,WSL 访问 Windows Clash 代理时,优先用 WSL 内的默认网关,不要手写 Windows ipconfig 里的某个地址。

Hyper-V 和 WSL 是什么关系

可以把它们理解成:

1
2
3
Hyper-V = Windows 的虚拟化底座 / 虚拟机平台
WSL = Windows 上运行 Linux 的开发环境
WSL2 = 基于虚拟化技术运行的轻量 Linux 环境

关系大致是:

1
2
3
4
5
6
Windows
├── Hyper-V / Windows 虚拟化平台
│ ├── 普通 Hyper-V 虚拟机
│ └── WSL2 轻量虚拟机
│ └── Ubuntu / Debian / 其他 WSL 发行版
└── Windows 应用

它们不是同一个东西:

  • Hyper-V 负责底层虚拟化能力。
  • WSL2 使用这套能力运行 Linux。
  • WSL 把虚拟机细节包装成了面向开发的 Linux 环境。

普通 Hyper-V 虚拟机和 WSL2 的区别

普通 Hyper-V 虚拟机更像一台完整虚拟电脑;WSL2 更像 Windows 内置的 Linux 开发环境。

对比项 普通 Hyper-V 虚拟机 WSL2
定位 完整虚拟电脑 Linux 开发环境
启动方式 Hyper-V Manager / VMConnect wsl 命令
系统安装 像安装一台新电脑 wsl --install -d Ubuntu
图形界面 可以完整桌面 主要是 shell,WSLg 可运行部分 GUI 应用
管理复杂度 较高 较低
Windows 集成 相对弱 很强
文件访问 通常走共享或网络 \\wsl.localhost\<distro>\...
网络 手动选择或配置虚拟交换机 WSL 自动管理
适合用途 系统实验、隔离环境、服务器 VM 本地开发工具链

一句话总结:

1
普通 Hyper-V 虚拟机是完整虚拟电脑;WSL2 是基于虚拟化的轻量 Linux 开发环境。

创建普通 Hyper-V VM

可以自己创建普通 Hyper-V VM。它本质上是一台完整虚拟机,前提是 Windows 版本和硬件支持 Hyper-V。

常见流程:

1
2
3
4
5
6
7
Windows
-> 启用 Hyper-V
-> 打开 Hyper-V Manager
-> New -> Virtual Machine
-> 选择 ISO 镜像
-> 分配 CPU / 内存 / 磁盘 / 网络
-> 安装系统

常见系统:

  • Ubuntu Server VM
  • Windows Server VM
  • Windows 11 VM
  • 其他 Linux 发行版 VM

适合场景:

  • 测试完整操作系统。
  • 做网络实验。
  • 跑 Windows Server / AD / DNS / DHCP。
  • 模拟多台机器。
  • 做高隔离环境。
  • 测试安装流程、服务部署和系统配置。

日常开发通常仍然优先使用 WSL2:

1
2
写代码 / 跑 CLI / Node Java Python / Codex -> WSL2
完整系统实验 / 多机器模拟 / Windows Server -> Hyper-V VM

注意:Windows 家庭版通常没有完整 Hyper-V Manager。专业版、企业版、教育版支持更完整。硬件上还要开启 CPU 虚拟化。

CPU 虚拟化为什么需要硬件支持

CPU 虚拟化是硬件能力,不是纯软件功能。

常见名称:

1
2
Intel CPU -> Intel VT-x
AMD CPU -> AMD-V / SVM

Hyper-V、WSL2、Docker Desktop、VMware、VirtualBox 等都依赖这类硬件虚拟化能力。没有它,系统很难高效运行完整虚拟机。

可以这样理解:

1
2
3
4
5
没有硬件虚拟化
-> 软件硬模拟,慢,兼容性差

有硬件虚拟化
-> CPU 提供专门能力,Hyper-V 可以高效隔离和调度虚拟机

“CPU 支持”和“已经启用”是两件事:

1
2
3
CPU 支持 VT-x / AMD-V
-> BIOS / UEFI 里启用虚拟化
-> Windows 才能使用 Hyper-V / WSL2 / Docker Desktop

Windows 中可以用 systeminfo 检查:

1
systeminfo

底部可能看到:

1
2
3
4
5
Hyper-V Requirements:
VM Monitor Mode Extensions: Yes
Virtualization Enabled In Firmware: Yes
Second Level Address Translation: Yes
Data Execution Prevention Available: Yes

也可以在任务管理器中查看:

1
任务管理器 -> 性能 -> CPU -> 虚拟化

如果显示“虚拟化:已禁用”,通常要进 BIOS / UEFI 打开:

1
2
3
4
Intel Virtualization Technology
VT-x
SVM Mode
AMD-V

不同主板叫法不完全一样。

vEthernet 网卡是什么

Windows 里的 vEthernet (...) 是 Hyper-V 虚拟交换机在 Windows 主机侧创建出来的虚拟网卡。

真实网卡负责连接真实网络,例如 Wi-Fi 或有线网卡。虚拟网卡负责连接虚拟网络,例如 Hyper-V 虚拟机网络或 WSL2 网络。

可以近似理解成:

1
2
3
4
5
6
7
8
9
真实网络
|
Wi-Fi / Ethernet
|
Windows
|
vEthernet (...)
|
虚拟机 / WSL2

vEthernet 的 IP 是 Windows 在某个虚拟网络里的地址,通常也充当那个虚拟网络的网关。

vEthernet (Default Switch)

示例:

1
2
Ethernet adapter vEthernet (Default Switch):
IPv4 Address: 172.23.32.1

vEthernet (Default Switch) 是 Hyper-V 默认交换机的 Windows 主机侧网卡。

它主要用于:

  • 普通 Hyper-V 虚拟机出网。
  • 某些依赖 Hyper-V 虚拟化能力的 Windows 组件。
  • Windows 自动管理的 NAT 虚拟网络。

可以把它理解成 Windows 为普通 Hyper-V 虚拟机准备的默认 NAT 出口:

1
2
3
4
5
6
7
8
9
Hyper-V 虚拟机
|
vEthernet (Default Switch)
|
Windows NAT
|
Wi-Fi / Ethernet
|
Internet

一般情况下,WSL 代理配置不使用这个地址。

vEthernet (WSL …)

示例:

1
2
Ethernet adapter vEthernet (WSL (Hyper-V firewall)):
IPv4 Address: 172.17.48.1

vEthernet (WSL ...) 是 WSL2 网络的 Windows 主机侧网卡。

它主要用于:

  • WSL2 发行版和 Windows 主机之间通信。
  • WSL2 默认 NAT 网络。
  • WSL2 通过 Windows 出网。
  • 默认 NAT 模式下,WSL 访问 Windows 上的 Clash / 代理端口。

在 WSL2 默认 NAT 模式下,Linux 侧通常会把 Windows host IP 当成默认网关。进入 WSL 后执行:

1
ip route show

可能看到类似:

1
default via 172.17.48.1 dev eth0

这里的 172.17.48.1 往往对应 Windows 里的 vEthernet (WSL ...) 地址。

WSL 默认 NAT 下如何判断代理地址

不要手写 ipconfig 里看到的某个 Windows IP。更稳妥的方式是在 WSL 里动态获取默认网关:

1
2
WIN_HOST=$(ip route show | awk '/default/ {print $3; exit}')
echo "$WIN_HOST"

然后测试 Windows 上的 Clash mixed port,例如 7897

1
curl -I -x "http://$WIN_HOST:7897" https://github.com

如果成功,代理变量可以这样设置:

1
2
3
export http_proxy="http://$WIN_HOST:7897"
export https_proxy="http://$WIN_HOST:7897"
export all_proxy="socks5://$WIN_HOST:7897"

这种写法比手写 172.x.x.x 更稳,因为 WSL 的 NAT 网段可能变化。

两个网卡怎么区分

可以按用途区分:

1
2
3
4
5
vEthernet (Default Switch)
主要给普通 Hyper-V 虚拟机使用

vEthernet (WSL ...)
主要给 WSL2 使用

如果目标是配置 WSL2 访问 Windows Clash 代理,重点看:

1
vEthernet (WSL ...)

如果目标是给普通 Hyper-V VM 配网络,才重点看:

1
vEthernet (Default Switch)

常用检查命令

Windows PowerShell / CMD:

1
2
3
ipconfig
wsl -l -v
systeminfo

WSL 内:

1
2
3
4
5
ip addr
ip route show
WIN_HOST=$(ip route show | awk '/default/ {print $3; exit}')
echo "$WIN_HOST"
curl -I -x "http://$WIN_HOST:7897" https://github.com

如果启用了 mirrored networking,WSL 更可能直接通过 127.0.0.1:<port> 访问 Windows 上的代理端口;如果使用默认 NAT,则优先通过 ip route show 获取 Windows host IP。

排查建议

  • 不确定 WSL 代理地址时,先在 WSL 内看 ip route show
  • 不要把 vEthernet (Default Switch) 的 IP 当成 WSL 默认代理地址。
  • vEthernet (WSL ...) 的 IP 也不要长期写死,优先动态取默认网关。
  • Windows Clash 使用默认 NAT + Allow LAN 时,要注意防火墙和局域网暴露风险。
  • WSL 网络异常时,可以先在 Windows PowerShell 执行 wsl --shutdown,再重新进入 WSL。