如何在WSL配置代理
经常在WSL中进行开发,偶尔需要通过代理访问一些资源,如何在WSL中配置代理呢 (当前windows最新的WSL是WSL2, 下文如果不做特殊说明,WSL默认指WSL2)
方案1:NAT模式下的代理配置 首先简单介绍一下WSL2的网络环境,与WSL1不同,WSL2是运行在Windows上的一台高度优化过的虚拟机,默认情况下,WSL2 使用 NAT模式。想在WSL2中访问windows上的代理,
首选需要在WSL2中找到默认网关的IP地址。
然后通过默认网关访问到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"
注意事项: 如果配置后不生效,可以检查下面两项:
windows上的代理服务是否打开了
允许来自局域网的连接
的配置开关windows上的代理服务是否只监听在
127.0.0.1
这个本机地址上
方案2: 使用镜像(mirrored)网络模式 Windows 11 22H2
之后的版本支持镜像网络模式,启用镜像网络模式之后,Windows的网络接口会被镜像到Linux中,此时可以直接在linux子系统中访问windows网络。在WSL的全局配置文件中增加autoProxy
配置项。 通过配置 autoProxy=true
,可以强制WSL使用windows的HTTP系统代理
下面是操作步骤:
打开配置文件
C:\Users\xzan\.wslconfig
, 如果文件不存在,则创建。 (配置文件在用户的个人目录下,将xzan替换成你自己的用户名)编辑配置文件,增加下面3行内容
networkingMode=mirrored # 启用镜像模式
autoProxy=true # 配置自动代理
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