WSL2 可以用 Windows 的代理吗?

130 阅读3分钟

本文仅展示操作流程,因为网络上有很多很棒的博客对其原理和技术细节进行了讲解,而且本人目前仍处于学习阶段,所感所写为实操所得,本文仅作为简单的知识整合。

如何在Windows中的安装WSL?参考官方文档:安装 WSL

常见问题

1. 我在 WSL 中拉取 GitHub 等外网的资源时,出现了网络问题,我在 Windows 中使用代理可以解决问题吗?

不可以。现阶段常用的为 WSL2,是一个基于 Hyper-V,独立的虚拟机,拥有自己的 IP 地址,且不支持本地回环。

2. 那如何让 Windows 的代理作用于 WSL2 ?

翻看了网络上的博客以及询问了AI,大致有两种方式,一种为手动配置,另一种为启用 Mirrored 网络模式。实际操作下来,AI 给的手动配置操作误区较多,且一些名称误产生歧义,导致出现很多失误;

因此我采用了 Mirrored 网络模式 ,它能让 WSL 和 Windows 共享完全一样的网络栈,自动继承代理设置。

  1. 在 Windows 的 C 盘,用户目录,<你的用户名>目录(eg:C:\Users\DELL)下创建配置文件:

通过 vscode 或者终端,创建一个名为 .wsconfig 的文件(没有扩展名)。

ps:终端操作方法

直接打开终端后,如果目录前面有 PS,则为 powershell,输入 cmd 可使用 cmd 命令提示符。

image.png

    • powershell
# 进入用户目录
cd ~

# 创建空文件
New-Item -Name .wslconfig -ItemType File

# 或用echo写入内容
echo "[experimental]" > .wslconfig
echo "networkingMode=mirrored" >> .wslconfig
echo "autoProxy=true" >> .wslconfig
    • cmd
# 创建文件
echo. > .wslconfig

2. 用记事本或 vscode 打开 .wsconfig 文件,填入以下配置:

[experimental]
networkingMode=mirrored
autoProxy=true
dnsTunneling=true
firewall=true
autoMemoryReclaim=gradual
  • networkingMode=mirrored:和 Windows 共用同一 IP / 端口
  • autoProxy=true:自动同步 Windows 的代理(如 Clash、VPN、系统代理)到 WSL2
  • dnsTunneling=true:WSL2 的 DNS 解析走 Windows 的解析流程
  • firewall=true:统一 Windows 和 WSL2 的防火墙规则,比如禁止外部访问 WSL2 的敏感端口,提升安全性
  • autoMemoryReclaim=gradual:避免 WSL2 占着内存不释放,导致 Windows 卡顿
  1. 保存文件后,应用配置

在 Windows 的 PowerShell(以管理员身份运行) 中执行以下命令来完全关闭并重启 WSL:

wsl --shutdown

之后重新打开 WSL 终端即可

  1. 验证是否生效:
# 查看WSL的IP地址
ip addr show eth0

# 如果配置成功,应该能看到:
# 1. IP地址和Windows主机在同一网段
# 2. 或者直接访问网络测试,Windows如果能(比如使用代理)访问,那么这里也可以访问
curl -I https://www.google.com

至此,大功告成!

ps:如果你使用的是校园网,更推荐你使用手机热点,因为校园网本身有认证或防火墙限制,以及代理软件在校园网下有特殊的设置需求等问题,很可能会造成失败。