一、前言
最近访问GitHub似乎又出现问题了,windows开发还好,有挺多成熟的软件来实现通过代理访问(其实是我比较熟悉),但wsl2当中想要访问代理对我来说就有些困难了,拉取GitHub仓库的时候经常出现卡顿,连接失败的情况。所以就想到使用代理端口来实现将wsl2的流量转发到windows的代理端口。
WSL2 实际上运行在一个轻量级虚拟机中,拥有独立的网络堆栈和私有 IP 地址,因此与 Windows 主机的网络环境并不直接共享。当 Windows 上的服务只绑定在 127.0.0.1(回环地址)时,这些服务只能从 Windows 内部访问,WSL2 无法直接通过 Windows 主机的 IP 访问到这些服务。
因此,为了让 WSL2 能访问 Windows 上仅绑定在 localhost 接口的服务,需要使用端口代理。端口代理将 Windows 主机上的某个外部 IP 和端口的流量转发到对应的 localhost 端口上,使得在 WSL2 中通过该外部 IP 和端口访问时,实际上能够连接到 Windows 上的服务。这样就打通了 WSL2 与 Windows 服务之间的网络隔离问题。
二、需要解决的问题
转发需要解决的问题就是两个:
- windows端口的提供者
- wsl2的转发
这些就是我们需要解决的问题
三、windows端口的提供者
这里提供端口的应用是Clash-verge,
GitHub仓库是:clash-verge-rev的GitHub仓库
当然也有镜像:clash-verge-rev镜像
安装完软件之后,导入订阅的地址(需要自己找渠道购买),然后打开软件的设置界面,选择端口设置:
将HTTP(S)代理端口打开,然后点击保存。
这样windows就提供了一个端口可以供外部HTTP代理访问了。
四、wsl2的转发
在wsl2终端当中输入
cat /etc/resolv.conf
可以查询到当前 Windows 主机的 DNS 服务器地址,显示内容一般如下:
# 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.31.412.43
这里的 172.31.412.43 表示 WSL2 将使用 Windows 主机(或虚拟网络接口)的 IP 地址 172.31.176.1 作为 DNS 服务器。根据你的网络配置,这个 IP 地址可能会有所不同。
之前我们设置了windows上的HTTP代理端口,此时我们只需要设置一下WSL2的HTTP环境变量,让其走 nameserver 的HTTP代理端口即可。
终端输入:
export HTTP_PROXY=http://172.31.412.43:7899
windows记得打开代理,然后我们就可以在wsl2当中使用curl工具访问一下外网内容了,这里拿ifconfig.me做例子。