Skip to main content
  1. Posts/

WSL-02 配置网络代理和远程访问

·1246 words·
loading
·
Tech Clash WSL Ubuntu Vscode Ssh
Table of Contents
WSL - This article is part of a series.
Part 3: This Article

配置VScode进行远程开发
#

现在的Ubuntu就是一个精简的系统,里面几乎什么都没有,也没有GUI,用控制台进行后续操作十分麻烦,所以应该趁早用上VScode的远程开发 微软的官方教程非常详细开始通过 WSL 使用 VS Code | Microsoft Learn

  • 直接打开VScode,搜索插件Remote Development
    • 这个插件包包含4个插件,即装即用,十分方便
  • 这时有两种启动服务的方法
    • 一种是在Ubuntu控制台使用命令code .,这将会以当前目录为根目录打开一个VScode工作区
      • 但是这有一个很大的问题就是跨平台网络代理还没实现,大概率卡住且毫无办法
    • 另一种是在VScode的侧边栏或下面找到连接到远程的选项
      • 点击WSL对象,应该就能看到自己安装的Ubuntu,点击连接即可
      • VScode会把sever文件写入Ubuntu中,所以使用的是主机的网络,不会卡
  • 现在就可以使用VScode管理和编写文件了,当然现在还会有诸多权限问题

处理网络问题
#

Ubuntu的软件包自然都是在国外的,国内只有镜像而已

  • 你可以选择简单地将下载源切换成镜像来完成基本的apt包下载(但也不保证一定不出错) 只需要依次输入命令
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak  # 给旧源做一个备份
# 通过字符替换切换成中科大的镜像源,也可以去找别的源
sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list  
sudo apt update # 更新状态,让源生效
  • 这样做可以实现大部分apt包的正常下载
  • 但是如果要使用git,浏览器访问外网之类的就毫无办法了

在ICS课程里我就是只换了源,但显然这不是长久之计,所以这次得把网络代理处理好

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。
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/WSL.conf:
# [network]
# generateResolvConf = false
nameserver 172.25.144.1

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

export ALL_PROXY="http://172.25.144.1:7890"

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

一键配置
#

在最新版本的WSL和Ubuntu下系统会自动配置代理 将上面的过程写入用户文件夹下的.bashrc文件,就可以轻松的实现在启动bash时一键配置代理:

# for clash 
hostip=$(cat /etc/resolv.conf |grep -oP '(?%3C=nameserver\ ).*')
export https_proxy="http://${hostip}:7890"
export http_proxy="http://${hostip}:7890"
export all_proxy="socks5://${hostip}:7890"

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

每次启动WSL前都开启代理即可实现对WSL的全局代理(国内网络几乎没有价值) 可以看到使用官方源速率也非常可观

image.png

WSL - This article is part of a series.
Part 3: This Article

Related

WHY WSL?
··459 words·
loading
Tech WSL Ubuntu Clash Linux
WSL-01 安装WSL和Ubuntu
·774 words·
loading
Tech WSL Ubuntu
系统环境变量配置不生效
·823 words·
loading
Tech PATH
如何调试微信中的网页
·1423 words·
loading
Tech Debug
《把自己作为方法》
·6692 words·
loading
Book Book Extract
《工作、消费主义和新穷人》
·37052 words·
loading
Book Book Note