打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
代理 设置wsl

在 WSL2 环境中 clone 一个很大的 git 项目,不走代理速度很慢,所以研究了一下怎么让 WSL2 走 Windows 的代理客户端。

WSL1 和 WSL2 网络的区别

在 WSL1 时代,由于 Linux 子系统和 Windows 共享了网络端口,所以访问 Windows 的代理非常简单。例如 Windows 的代理客户端监听了 8000 端口,那么只需要在 Linux 子系统中执行如下命令,就可以让当前 session 中的请求通过代理访问互联网。

export ALL_PROXY='http://127.0.0.1:8000'

但是 WSL2 基于 Hyper-V 运行,导致 Linux 子系统和 Windows 在网络上是两台各自独立的机器,从 Linux 子系统访问 Windows 首先需要找到 Windows 的 IP。

配置 WSL2 访问 Windows 上的代理

有两个关键步骤: 1. WSL2 中配置的代理要指向 Windows 的 IP; 2. Windows 上的代理客户端需要允许来自本地局域网的请求;

由于 Linux 子系统也是通过 Windows 访问网络,所以 Linux 子系统中的网关指向的是 Windows,DNS 服务器指向的也是 Windows,基于这两个特性,我们可以将 Windows 的 IP 读取出来。

例如,在 Ubuntu 子系统中,通过 cat /etc/resolv.conf 查看 DNS 服务器 IP。

  1. # This file was automatically generated by WSL. To stop
  2. automatic generation of this file, add the following entry to /etc/wsl.conf:# [network]# generateResolvConf = falsenameserver 172.19.80.1

可以看到 DNS 服务器是 172.19.80.1,通过环境变量 ALL_PROXY 配置代理:

export ALL_PROXY='http://172.19.80.1:7890'

7890 是 Windows 上运行的代理客户端的端口,记得要在 Windows 代理客户端上配置允许本地局域网请求。

一键配置脚本

将上面的过程写入一个 bash 脚本,可以轻松的实现一键配置代理:

  1. #!/bin/bash
  2. host_ip=$(cat /etc/resolv.conf |grep 'nameserver' |cut -f 2 -d ' ')
  3. export ALL_PROXY='http://$host_ip:7890'

脚本通过 cat /etc/resolv.conf 来获取 DNS 服务器,也就是 Windows 的 IP,再将其中的 IP 部分截取出来,加上代理客户端的端口(我的是 7890,可以根据自己实际情况修改),使用 export 写入环境变量中。

脚本也可以从这里下载.proxyrc,使用时只需要 source .proxyrc 就可以生效。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
堪称最大Linux发行版:微软Windows 10将直接内置Linux完整内核
Windows:安装适用于Linux的Windows子系统(WSL)
Windows 10 2004将迎来新版Linux子系统
WSL:WSL(Windows Subsystem for Linux)的简介、安装、使用方法之详细攻略
40
Linux 抓取网页方式(curl+wget)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服