WSL2 与 Hyper-V 网络关系说明
本文整理 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 | Hyper-V = Windows 的虚拟化底座 / 虚拟机平台 |
关系大致是:
1 | 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 | Windows |
常见系统:
- Ubuntu Server VM
- Windows Server VM
- Windows 11 VM
- 其他 Linux 发行版 VM
适合场景:
- 测试完整操作系统。
- 做网络实验。
- 跑 Windows Server / AD / DNS / DHCP。
- 模拟多台机器。
- 做高隔离环境。
- 测试安装流程、服务部署和系统配置。
日常开发通常仍然优先使用 WSL2:
1 | 写代码 / 跑 CLI / Node Java Python / Codex -> WSL2 |
注意:Windows 家庭版通常没有完整 Hyper-V Manager。专业版、企业版、教育版支持更完整。硬件上还要开启 CPU 虚拟化。
CPU 虚拟化为什么需要硬件支持
CPU 虚拟化是硬件能力,不是纯软件功能。
常见名称:
1 | Intel CPU -> Intel VT-x |
Hyper-V、WSL2、Docker Desktop、VMware、VirtualBox 等都依赖这类硬件虚拟化能力。没有它,系统很难高效运行完整虚拟机。
可以这样理解:
1 | 没有硬件虚拟化 |
“CPU 支持”和“已经启用”是两件事:
1 | CPU 支持 VT-x / AMD-V |
Windows 中可以用 systeminfo 检查:
1 | systeminfo |
底部可能看到:
1 | Hyper-V Requirements: |
也可以在任务管理器中查看:
1 | 任务管理器 -> 性能 -> CPU -> 虚拟化 |
如果显示“虚拟化:已禁用”,通常要进 BIOS / UEFI 打开:
1 | Intel Virtualization Technology |
不同主板叫法不完全一样。
vEthernet 网卡是什么
Windows 里的 vEthernet (...) 是 Hyper-V 虚拟交换机在 Windows 主机侧创建出来的虚拟网卡。
真实网卡负责连接真实网络,例如 Wi-Fi 或有线网卡。虚拟网卡负责连接虚拟网络,例如 Hyper-V 虚拟机网络或 WSL2 网络。
可以近似理解成:
1 | 真实网络 |
vEthernet 的 IP 是 Windows 在某个虚拟网络里的地址,通常也充当那个虚拟网络的网关。
vEthernet (Default Switch)
示例:
1 | Ethernet adapter vEthernet (Default Switch): |
vEthernet (Default Switch) 是 Hyper-V 默认交换机的 Windows 主机侧网卡。
它主要用于:
- 普通 Hyper-V 虚拟机出网。
- 某些依赖 Hyper-V 虚拟化能力的 Windows 组件。
- Windows 自动管理的 NAT 虚拟网络。
可以把它理解成 Windows 为普通 Hyper-V 虚拟机准备的默认 NAT 出口:
1 | Hyper-V 虚拟机 |
一般情况下,WSL 代理配置不使用这个地址。
vEthernet (WSL …)
示例:
1 | Ethernet adapter vEthernet (WSL (Hyper-V firewall)): |
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 | WIN_HOST=$(ip route show | awk '/default/ {print $3; exit}') |
然后测试 Windows 上的 Clash mixed port,例如 7897:
1 | curl -I -x "http://$WIN_HOST:7897" https://github.com |
如果成功,代理变量可以这样设置:
1 | export http_proxy="http://$WIN_HOST:7897" |
这种写法比手写 172.x.x.x 更稳,因为 WSL 的 NAT 网段可能变化。
两个网卡怎么区分
可以按用途区分:
1 | vEthernet (Default Switch) |
如果目标是配置 WSL2 访问 Windows Clash 代理,重点看:
1 | vEthernet (WSL ...) |
如果目标是给普通 Hyper-V VM 配网络,才重点看:
1 | vEthernet (Default Switch) |
常用检查命令
Windows PowerShell / CMD:
1 | ipconfig |
WSL 内:
1 | ip addr |
如果启用了 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。
