如何在WSL配置代理

经常在WSL中进行开发,偶尔需要通过代理访问一些资源,如何在WSL中配置代理呢 (当前windows最新的WSL是WSL2, 下文如果不做特殊说明,WSL默认指WSL2)

方案1:NAT模式下的代理配置 首先简单介绍一下WSL2的网络环境,与WSL1不同,WSL2是运行在Windows上的一台高度优化过的虚拟机,默认情况下,WSL2 使用 NAT模式。想在WSL2中访问windows上的代理,

  1. 首选需要在WSL2中找到默认网关的IP地址。

  2. 然后通过默认网关访问到Windows主机的网络。

以下是一个简单的脚本:

# 获取默认网关的IP地址
proxy_ip=`ip route show | grep -i default | awk '{ print $3}'`

# 配置代理,端口替换成代理的端口
export HTTP_PROXY="http://${proxy_ip}:1080"
export HTTPS_PROXY="http://${proxy_ip}:1080"
export ALL_PROXY="http://${proxy_ip}:1080"

注意事项: 如果配置后不生效,可以检查下面两项:

  1. windows上的代理服务是否打开了允许来自局域网的连接 的配置开关

  2. windows上的代理服务是否只监听在127.0.0.1这个本机地址上

方案2: 使用镜像(mirrored)网络模式 Windows 11 22H2之后的版本支持镜像网络模式,启用镜像网络模式之后,Windows的网络接口会被镜像到Linux中,此时可以直接在linux子系统中访问windows网络。在WSL的全局配置文件中增加autoProxy配置项。 通过配置 autoProxy=true,可以强制WSL使用windows的HTTP系统代理

下面是操作步骤:

  1. 打开配置文件 C:\Users\xzan\.wslconfig , 如果文件不存在,则创建。 (配置文件在用户的个人目录下,将xzan替换成你自己的用户名)

  2. 编辑配置文件,增加下面3行内容

networkingMode=mirrored  # 启用镜像模式
autoProxy=true           # 配置自动代理
  1. wsl --shutdown 执行命令,关闭WSL实例。 全局配置需要关闭WSL实例,重启之后才能生效

启动之后,就能正常的使用代理了。

参考资料:

https://learn.microsoft.com/en-us/windows/wsl/networking

https://learn.microsoft.com/en-us/windows/wsl/wsl-config#configuration-settings-for-wslconfig

发表于: 2024年10月21日 14时48分