步骤 1 - 启用适用于 Linux 的 Windows 子系统
管理员身份运行PowerShell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
步骤 2 - 检查运行 WSL 2 的要求
Win10
对于 x64 系统:版本 1903 或更高版本,采用 内部版本 18362 或更高版本。
检查 Windows 版本及内部版本号,选择 Windows 徽标键 + R,然后键入“winver”,选择“确定”。
步骤 3 - 启用虚拟机功能
管理员身份运行PowerShell
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
步骤 4 - 下载 Linux 内核更新包
-
下载最新包:
-
运行上一步中下载的更新包。(双击以运行 - 系统将提示你提供提升的权限,选择“是”以批准此安装。)
步骤 5 - 将 WSL 2 设置为默认版本
管理员身份运行PowerShell
wsl --set-default-version 2
步骤 6 - 安装所选的 Linux 分发
-
打开Microsoft Store,并选择你偏好的 Linux 分发版。
-
安装 Windows 终端 | Windows Terminal(可选)
步骤 7 - 设置Windows Terminal
默认配置文件:Ubuntu-20.04
启动目录:\wsl\Ubuntu-20.04\home\('子系统的主机名')\
步骤 8 - WSL设置代理
获取Windows主机IP (WSL2 不再能正常访问localhost的各种端口)
- 通过查看 Linux 下的 DNS 设置可以得到 Windows 主机的地址:
cat /etc/resolv.conf
- 代理服务器自动设置工具(可选)
Windows 主机 IP 在每次重启后都会变化,因此需要 一个 bash 脚本以便在 shell 启动时自动设置代理服务器,也可以使用下面的命令直接获取安装:
// 中文版
curl -o wslproxy -L git.io/Jfo6z
sudo bash ./wslproxy install
// 英文版
curl -o wslproxy -L git.io/Jfo62
sudo bash ./wslproxy install
- Windows防火墙设置
在设置代理服务器后,发现仍然无法正常连接 Windows 上的服务。研究很长时间后才发现,
Windows 防火墙居然拦住了来自 WSL 的请求!!!(Windows 认为 WSL 的虚拟网卡是公用网络,因此任何阻止公用网络入站请求的防火墙策略都会拦住 WSL 发过来的请求)
解决方法:
- 首先我们使用 PowerShell 命令行创建一条给 WSL 网卡的防火墙策略:
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
- 然后进入 Windows 的防火墙和网络保护设置,在界面下方点击高级设置,提权后会打开高级安全 Windows Defender 防火墙窗口
- 在高级安全 Windows Defender 防火墙中选择入站规则,并在右侧找到你使用的代理软件,然后禁用对应的阻止公用网络的规则