配置 wsl 2 网络代理时的认知误区

使 windows 下的 linux 子系统使用代理的方式,有两种思路:

  1. linux 系统内配置代理
    1. 通过配置 http_proxyhttp_proxys 环境变量工作
    2. 通过 proxychains 等代理工具工作
  2. linux 系统不特别配置代理,而镜像复制 windows 的网络环境

本文采用第二种思路作为解决方案:

  1. windows 设置系统代理

  2. wsl 在 .wslconfig 配置文件中设置为镜像模式

    [wsl2]
    autoProxy=true
    networkingMode=mirrored
    

如果以上已经解决你的问题,就不需要阅读下面的细节和相关知识了


方案细节

检查

后续命令会用到,使用命令查看

wsl -l -v

在这里插入图片描述

1. 编辑配置文件

The wsl.conf file supports four sections: automount, network, interop, and user.

由于 wsl.conf 只支持这四种配置 section, 而 autoproxy 属于 wsl2 section, 这里不适用。尽管wsl.conf 的配置只对当前子系统生效,可以避免影响 windows 上其他已安装的 linux 。所以最终选择使用 .wslconfig 文件。

这个方式的前提是它只适用于 WSL 2 版本, 在 windows teminal 上确认自己的版本是否支持:

wsl -l -v

如果是 wsl 1 版本,可以通过下面的命令升级版本:

wsl --set-version <distro name> 2

默认情况下, .wslconfig 文件并不存在,使用 powshell terminal 创建:

cd ~
ls .wslconfig //如果存在不会报错
new-item -path ./.wslconfig -itemtype file
explorer .

编辑该文件

[wsl2]
autoProxy=true
networkingMode=mirrored

2. 重启生效

在 powershell 关闭 linux 并重启以生效配置:

wsl --shutdown
// 你可以使用下面的命令确认是否还有正在运行的 linux
wsl --list --running
// 启动
wsl -d <distro name> 

确认网络 ip 是否和 windows 的代理配置相同, 在 linux terminal 上

$ curl http://httpbin.org/get

它应该返回的是翻墙后的 ip 地址。

3. 问题排查

一: 确认是否之前有其他代理配置干扰

$ echo $http_proxy
$ echo $https_proxy

二: 检查 windows 的代理配置页面是否期望, 快捷键 win+I

在这里插入图片描述

探究一个失败的方案

在使用 wsl 镜像模式之前,我尝试过一个方案并且在过去也成功实践,这个方案背后的逻辑:

NAT 网络模式下,直接在 windows 上配置全局HTTP代理, windows里面的 ubuntu无论怎样都得走这条链路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值