---
title: Windows 11 安装 WSL2 + Ubuntu 22.04 完全指南（含 TUN 代理穿透 & Linux 基础速查）
author: 朱奕樟
date: 2026-04-02
summary: 从零开始安装 WSL2 + Ubuntu 22.04，解决网络代理穿透（TUN 模式）难题，附 Linux 常用命令速查表。
canonical: https://blog.sysu-sam.com/@zhuyizhang/wsl2-ubuntu2204-tun-proxy-guide
---

# Windows 11 安装 WSL2 + Ubuntu 22.04 完全指南
## 含 TUN 代理穿透 & Linux 基础速查

> 本文适合零基础或希望在 Windows 上获得完整 Linux 开发环境的读者。覆盖：WSL2 安装、Ubuntu 22.04 配置、网络代理穿透（TUN 模式）、以及 Linux 常用命令速查。
>
> 参考来源：[Microsoft WSL 官方文档](https://learn.microsoft.com/en-us/windows/wsl/install)、[Ubuntu WSL 文档](https://documentation.ubuntu.com/wsl/stable/howto/install-ubuntu-wsl2/)、[Microsoft WSL 网络文档](https://learn.microsoft.com/en-us/windows/wsl/networking)

---

## 一、前置要求

### 系统要求

| 项目 | 最低要求 |
|------|----------|
| 操作系统 | Windows 11（Build 22000+）或 Windows 10 21H2+ |
| CPU | 支持 BIOS 虚拟化（Intel VT-x / AMD-V） |
| 内存 | 8 GB 以上（建议 16 GB） |
| 磁盘 | 至少 20 GB 可用空间 |

### 检查系统版本

按 `Win + R`，输入 `winver` 回车，查看 Build 号是否 ≥ 22000。

### 开启 CPU 虚拟化

进入 BIOS（开机按 F2/Del/F10，因主板而异），找到 **Virtualization Technology** 或 **SVM Mode**，设为 **Enabled**。

---

## 二、安装 WSL2

### 方法一：一键安装（推荐）

以**管理员身份**打开 PowerShell（右键开始菜单 → Windows PowerShell 管理员）：

```powershell
wsl --install
```

该命令会自动：
1. 启用「虚拟机平台」和「适用于 Linux 的 Windows 子系统」两个 Windows 功能
2. 下载并安装最新 WSL2 内核
3. 将 WSL2 设为默认版本
4. 安装 Ubuntu（默认最新 LTS）

安装完成后**重启电脑**。

---

### 方法二：手动逐步安装

如果一键安装失败，可以按以下步骤手动操作：

**步骤 1：启用 WSL 功能**

```powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```

**步骤 2：启用虚拟机平台**

```powershell
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

**步骤 3：重启电脑**

**步骤 4：下载并安装 WSL2 内核更新包**

执行以下命令或前往 Microsoft 官网手动下载：

```powershell
wsl --update
```

**步骤 5：设置 WSL2 为默认版本**

```powershell
wsl --set-default-version 2
```

---

## 三、安装 Ubuntu 22.04

### 从命令行安装（推荐）

```powershell
wsl --install -d Ubuntu-22.04
```

此命令会自动启用 WSL、启用虚拟机平台、并设置 WSL2 为默认版本，一步到位。

### 或从 Microsoft Store 安装

1. 打开 Microsoft Store（开始菜单搜索）
2. 搜索 **Ubuntu 22.04 LTS**
3. 点击「获取」→「安装」

### 验证安装

```powershell
wsl --list --verbose
```

输出示例：

```
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2
```

`VERSION` 列显示 `2` 即表示 WSL2 运行正常。

> **提示**：若想查看当前 WSL 版本（用于后续网络配置判断）：
> ```powershell
> wsl --version
> ```

---

## 四、初始化 Ubuntu 系统

### 首次启动

从开始菜单找到 **Ubuntu 22.04** 并打开，等待初始化完成（约 1-2 分钟）。

系统会提示：

```
Enter new UNIX username: 你的用户名
New password: 密码（输入时不显示，正常）
Retype new password: 再次输入
```

> **注意**：用户名建议用小写字母，不含空格。

### 更新系统软件包

```bash
sudo apt update && sudo apt upgrade -y
```

> `sudo` 表示以管理员权限运行。首次使用需要输入刚才设置的密码。

### 安装常用工具

```bash
sudo apt install -y \
  git curl wget vim nano \
  build-essential \
  python3 python3-pip python3-venv \
  unzip zip \
  htop tree
```

---

## 五、网络代理穿透（TUN 模式）

这是许多用户最头疼的部分。核心问题是：**WSL2 有独立的虚拟网络，默认无法直接使用 Windows 上的代理软件。**

### 工作原理

```
WSL2 Linux
    │
    │  需要访问 Windows 宿主机的代理
    ▼
Windows 代理软件（Clash Verge Rev / Mihomo Party 等）
    │  TUN 模式 / 允许局域网连接
    ▼
外部网络
```

---

### ✅ 方案 A：mirrored 镜像网络（WSL 2.0.0+ 最推荐）

Windows 11 22H2 + WSL 2.0.0+ 引入了 **镜像网络模式**，让 WSL2 和 Windows 共享同一个网络栈，`127.0.0.1` 可以直接访问宿主机代理。

**步骤 1：检查 WSL 版本是否支持**

```powershell
wsl --version
# WSL 版本需要 >= 2.0.0
# 如果版本过低，执行：wsl --update
```

**步骤 2：创建 `.wslconfig` 配置文件**

按 `Win + R`，输入 `notepad %USERPROFILE%\.wslconfig`，填入：

```ini
[wsl2]
# 镜像网络模式（与 Windows 共享网络栈）
networkingMode=mirrored

# DNS 穿透，改善 DNS 解析
dnsTunneling=true

# 自动继承 Windows 的代理设置
autoProxy=true

# 使用 Windows Hyper-V 防火墙
firewall=true

# 内存限制（可选，防止 WSL2 吃太多内存）
# memory=8GB
# processors=4
# swap=2GB
```

保存文件。

**步骤 3：重启 WSL**

```powershell
wsl --shutdown
# 重新打开 Ubuntu 终端
```

**步骤 4：在代理软件中开启「允许局域网」**

以 **Clash Verge Rev** / **Mihomo Party** 为例：
- 进入设置，开启「允许局域网」（Allow LAN）
- 推荐同时开启 **TUN 模式**（见下方方案 C）

**步骤 5：验证**

```bash
curl -I https://www.google.com
```

> ⚠️ **已知问题**：mirrored 模式下，如果代理软件和 WSL2 的**启动顺序**不对，可能出现连接失败。解决办法：先启动代理软件，再打开 WSL2 终端。若仍有问题，执行 `wsl --shutdown` 后重开。

---

### ✅ 方案 B：手动获取宿主机 IP（旧版 WSL 备选方案）

如果 WSL 版本低于 2.0.0，无法使用 mirrored 模式，用此方案。

**步骤 1：获取 Windows 宿主机 IP**

```bash
# WSL2 的默认网关就是宿主机 IP
cat /etc/resolv.conf | grep nameserver | awk '{print $2}'
# 或
ip route show | grep -i default | awk '{print $3}'
```

**步骤 2：设置代理环境变量**

将以下内容加到 `~/.bashrc`：

```bash
# WSL2 代理设置（自动获取宿主机 IP）
get_host_ip() {
    cat /etc/resolv.conf | grep nameserver | awk '{print $2}' | head -1
}

HOST_IP=$(get_host_ip)
PROXY_PORT=7890  # 改为你的代理端口（Clash 默认 7890）

export http_proxy="http://${HOST_IP}:${PROXY_PORT}"
export https_proxy="http://${HOST_IP}:${PROXY_PORT}"
export HTTP_PROXY="http://${HOST_IP}:${PROXY_PORT}"
export HTTPS_PROXY="http://${HOST_IP}:${PROXY_PORT}"
export no_proxy="localhost,127.0.0.1,::1"
```

保存后执行：

```bash
source ~/.bashrc
```

**步骤 3：确认代理软件监听所有接口**

在 Clash/V2rayN 等软件中，确保开启「允许局域网」，HTTP 端口为 7890（或你设置的端口）。

---

### ✅ 方案 C：TUN 模式彻底接管（最彻底，推荐搭配 mirrored）

TUN 模式在 Windows 侧创建虚拟网卡，在系统层面接管所有流量（包括 WSL2 的流量），无需在 WSL2 内任何配置。

**以 Clash Verge Rev 为例：**

1. 打开 Clash Verge Rev
2. 进入「设置」→「网络设置」
3. 开启 **TUN 模式**（Toggle TUN Mode）
   - Windows 首次开启会弹出安装虚拟网卡驱动的提示，点击允许
   - 或开启「服务模式」（Service Mode）以获得更稳定的 TUN
4. 确保同时开启「系统代理」和「允许局域网」

开启后，验证：

```bash
# WSL2 内直接测试，不需要设置任何环境变量
curl https://ipinfo.io/ip
# 应该返回代理服务器的 IP，而非你的本机 IP

curl -I https://www.google.com
# 应该返回 200 OK
```

---

### 推荐配置组合

| 场景 | 推荐方案 |
|------|----------|
| WSL ≥ 2.0.0 + Windows 11 22H2+ | **mirrored 模式 + TUN 模式**（双保险） |
| 旧版 WSL / Windows 10 | **方案 B（手动设置宿主机 IP）+ TUN 模式** |
| 只想最简单 | **TUN 模式单独开启**（接管所有流量） |

---

## 六、验证代理是否生效

```bash
# 测试 HTTPS
curl -I https://www.google.com

# 查看出口 IP（应为代理 IP）
curl https://ipinfo.io

# 测试 pip 能否访问 PyPI
pip3 install requests --dry-run

# 测试 git clone（常用场景）
git clone https://github.com/torvalds/linux --depth=1 /tmp/test-clone

# 查看代理环境变量（方案 B）
echo $http_proxy
```

---

## 七、Linux 基础教程速查

### 文件系统结构

```
/               根目录
├── home/       用户主目录（你的文件放这里）
│   └── 用户名/ ~ 快捷方式指向这里
├── etc/        系统配置文件
├── usr/        用户程序（软件安装在这里）
├── var/        变量数据（日志等）
├── tmp/        临时文件
├── bin/        基础命令
└── mnt/        挂载点（WSL2 里 /mnt/c/ 就是 Windows C 盘）
```

> 在 WSL2 中，你的 Windows 文件系统挂载在 `/mnt/` 下：
> - C 盘 → `/mnt/c/`
> - D 盘 → `/mnt/d/`

---

### 导航与文件操作

```bash
# 查看当前位置
pwd

# 列出文件
ls          # 基本列表
ls -la      # 详细列表（含隐藏文件）
ls -lh      # 人类可读的文件大小

# 切换目录
cd /path/to/dir    # 绝对路径
cd ../             # 上一级
cd ~               # 回主目录
cd -               # 回上一个目录

# 创建目录
mkdir mydir
mkdir -p a/b/c     # 递归创建

# 创建文件
touch file.txt

# 复制
cp source.txt dest.txt
cp -r src_dir/ dst_dir/    # 复制目录

# 移动/重命名
mv old.txt new.txt
mv file.txt /other/path/

# 删除
rm file.txt
rm -r dir/           # 删除目录（谨慎！）
rm -rf dir/          # 强制删除（非常谨慎！）

# 查看目录树
tree -L 2    # 显示 2 层
```

---

### 文件查看与编辑

```bash
# 查看文件内容
cat file.txt          # 全部输出
head -20 file.txt     # 前 20 行
tail -20 file.txt     # 后 20 行
tail -f log.txt       # 实时跟踪（监控日志神器）
less file.txt         # 分页查看（q 退出，/ 搜索）

# 搜索文件内容
grep "关键词" file.txt
grep -r "关键词" ./   # 递归搜索目录
grep -n "关键词" file.txt  # 显示行号

# 查找文件
find . -name "*.py"                    # 按名称查找
find . -type f -mtime -7               # 7天内修改的文件
find . -size +10M                      # 大于10MB的文件

# 编辑文件
nano file.txt        # Ctrl+O 保存，Ctrl+X 退出
vim file.txt         # i 进入编辑，Esc 退出编辑，:wq 保存退出，:q! 强制退出
```

---

### 权限管理

```bash
# 查看权限（ls -l 输出示例）
# -rwxr-xr-- 1 user group 1234 Jan 1 file.txt
# 第1位：文件类型（- 普通，d 目录，l 链接）
# 第2-4位：所有者权限（rwx = 读写执行）
# 第5-7位：组权限
# 第8-10位：其他人权限

# 修改权限
chmod 755 file.txt      # 数字法（7=rwx, 5=r-x, 0=---）
chmod +x script.sh      # 添加执行权限

# 修改所有者
sudo chown user:group file.txt
sudo chown -R user:group dir/   # 递归修改

# 以管理员运行
sudo command
```

---

### 包管理（APT）

```bash
# 更新软件包列表
sudo apt update

# 升级所有软件
sudo apt upgrade -y

# 安装软件
sudo apt install 软件名

# 删除软件
sudo apt remove 软件名
sudo apt purge 软件名    # 同时删除配置文件

# 搜索软件
apt search 关键词

# 清理缓存
sudo apt autoremove
sudo apt clean
```

---

### 进程管理

```bash
# 查看进程
ps aux              # 所有进程
ps aux | grep python  # 过滤特定进程
top                 # 实时进程监控（q 退出）
htop                # 更好看的 top（需先安装）

# 结束进程
kill PID            # 优雅终止
kill -9 PID         # 强制终止
pkill 进程名

# 后台运行
command &           # 后台运行
nohup command &     # 断开终端后继续运行

# 查看端口占用
ss -tulnp
lsof -i :8080       # 查看8080端口
```

---

### 网络工具

```bash
# 查看网络接口
ip addr

# 测试连通性
ping google.com
ping -c 4 8.8.8.8   # 发4个包就停

# HTTP 请求
curl https://api.example.com
curl -X POST -H "Content-Type: application/json" \
     -d '{"key":"value"}' https://api.example.com
wget https://example.com/file.zip   # 下载文件

# 查看路由（用于诊断代理）
ip route
```

---

### 环境变量与 Shell 配置

```bash
# 查看环境变量
env
echo $PATH

# 临时设置（当前会话有效）
export MY_VAR="value"

# 永久设置（写入配置文件）
echo 'export MY_VAR="value"' >> ~/.bashrc
source ~/.bashrc    # 立即生效

# 常用配置文件
~/.bashrc           # bash 交互配置
~/.zshrc            # zsh 配置（如果用 zsh）
```

---

### 文本处理

```bash
# 管道：将前一个命令的输出传给下一个
ls -l | grep ".py"
cat file.txt | wc -l    # 统计行数

# 重定向
command > file.txt    # 覆盖写入
command >> file.txt   # 追加写入
command 2> err.txt    # 错误输出写入文件

# 常用文本处理
wc -l file.txt        # 统计行数
sort file.txt         # 排序
awk '{print $1}' file.txt  # 打印第1列
sed 's/old/new/g' file.txt # 替换文本
cut -d',' -f1 file.csv     # 按逗号分割取第1列
```

---

### Git 基础

```bash
# 初始化/克隆
git init
git clone https://github.com/user/repo.git

# 状态查看
git status
git log --oneline

# 基本工作流
git add file.txt      # 暂存文件
git add .             # 暂存所有变更
git commit -m "描述"  # 提交
git push              # 推送到远程

# 分支
git branch            # 查看分支
git checkout -b new-branch   # 创建并切换
git merge other-branch       # 合并

# 配置（首次使用）
git config --global user.name "你的名字"
git config --global user.email "邮箱"
```

---

### Python 开发环境

```bash
# 检查版本
python3 --version
pip3 --version

# 创建虚拟环境
python3 -m venv .venv

# 激活虚拟环境
source .venv/bin/activate

# 退出虚拟环境
deactivate

# 安装包
pip install requests numpy pandas

# 导出依赖
pip freeze > requirements.txt

# 从文件安装
pip install -r requirements.txt
```

---

### WSL2 特有操作

```bash
# 在 WSL2 中访问 Windows 文件
ls /mnt/c/Users/你的Windows用户名/Desktop/

# 在 WSL2 中打开 Windows 资源管理器（当前目录）
explorer.exe .

# 在 WSL2 中运行 Windows 程序
notepad.exe file.txt

# 互操作：WSL2 命令管道到 Windows
wsl ls | clip.exe   # 复制到 Windows 剪贴板
```

---

## 八、常见问题排查

### WSL2 安装失败

**错误：`WslRegisterDistribution failed with error: 0x80370102`**

- 原因：BIOS 虚拟化未开启
- 解决：进 BIOS 开启 VT-x/AMD-V

**错误：`Error: 0x800701bc`（内核版本过低）**

```powershell
wsl --update
```

---

### 代理不生效

**检查步骤：**

```bash
# 1. 检查代理变量是否设置（方案 B）
echo $http_proxy

# 2. 检查宿主机 IP
ip route | grep default

# 3. 测试能否 ping 通宿主机
ping $(ip route | grep default | awk '{print $3}')
```

**mirrored 模式下代理失败：**

这是已知 bug（详见 [WSL GitHub Issue #13210](https://github.com/microsoft/WSL/issues/13210)），与启动顺序有关：

- **解决方案**：先启动代理软件，再打开 WSL2
- 或执行 `wsl --shutdown` 后重新打开 WSL
- 或改用 TUN 模式（方案 C，最稳定）

---

### WSL2 提示 "localhost proxy configuration detected but not mirrored"

这个提示说明你的 WSL2 处于 NAT 模式，但检测到 Windows 在用 localhost 代理。

解决方案：
1. 升级到支持 mirrored 模式的 WSL 版本（`wsl --update`）
2. 在 `.wslconfig` 中设置 `networkingMode=mirrored`

---

### WSL2 内存占用过高

在 `.wslconfig` 中添加限制：

```ini
[wsl2]
memory=4GB
swap=2GB

[experimental]
autoMemoryReclaim=gradual
```

然后 `wsl --shutdown` 重启。

---

## 九、小结

| 任务 | 推荐方案 |
|------|----------|
| WSL2 安装 | `wsl --install -d Ubuntu-22.04` |
| 代理（最稳定） | **TUN 模式**（Windows 代理软件开启）+ mirrored 网络 |
| 代理（备选） | 手动设置宿主机 IP + `http_proxy` 环境变量 |
| 日常开发 | VS Code + WSL 扩展（直接编辑 WSL2 内文件） |

安装完成后，推荐安装 **VS Code** 并装上 **Remote - WSL 扩展**，可以在 Windows 的 VS Code 界面无缝编辑 WSL2 内的文件，体验极佳。

---

**参考资料：**
- [Microsoft WSL 官方安装文档](https://learn.microsoft.com/en-us/windows/wsl/install)
- [Ubuntu WSL 官方文档](https://documentation.ubuntu.com/wsl/stable/howto/install-ubuntu-wsl2/)
- [WSL 网络配置文档](https://learn.microsoft.com/en-us/windows/wsl/networking)
- [WSL GitHub Issue #13210 - mirrored 模式代理问题](https://github.com/microsoft/WSL/issues/13210)
- [XDA Developers - WSL networking guide](https://www.xda-developers.com/wsl-great-but-networking-mess-heres-how-fix-it/)