前言
在WSL2中开启代理访问
WSL2使用纯真Linux虚拟化,不再像WSL1那样将命令转化成Windows Terminal命令后再执行,网络环境也因此独立,127.0.0.1不再访问到主机网络。
本文介绍配置WSL2中http代理服务器,理论上稍作修改可以应用于本机一切http代理。
这里的代理端口以 v2rayN 为例。
允许局域网连接代理
Windows: v2rayN客户端开启“允许来自局域网的连接”
配置WSL2 DNS
WSL2: 关闭自动更新dns
新建配置文件
vim /etc/wsl.conf
写入以下内容
[network]
generateResolvConf = false
编辑以下文件的nameserver为8.8.8.8
1.1.1.1
等常用不受污染的dns服务器
vim /etc/resolv.conf
防止每次启动resolv.conf被抹除或重置
chattr +i /etc/resolv.conf
配置WSL2代理
需要使用局域网的方式连接至宿主机。
以下脚本先查找宿主机虚拟网卡的IP地址,然后设置其为代理服务器结点
打开bash配置文件
vim ~/.bashrc
加入以下内容
# add for proxy
export hostip=$(ip route | grep default | awk '{print $3}')
export hostport=10811
alias proxy='
export https_proxy="http://${hostip}:${hostport}";
export http_proxy="http://${hostip}:${hostport}";
export all_proxy="http://${hostip}:${hostport}";
echo -e "Acquire::http::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
echo -e "Acquire::https::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
'
alias unproxy='
unset https_proxy;
unset http_proxy;
unset all_proxy;
sudo sed -i -e '/Acquire::http::Proxy/d' /etc/apt/apt.conf.d/proxy.conf;
sudo sed -i -e '/Acquire::https::Proxy/d' /etc/apt/apt.conf.d/proxy.conf;
'
这个配置脚本的目的是通过设置代理服务器来引导流量,方便在有网络限制或需要通过代理访问外部资源的环境中使用。具体来说,它定义了两个别名命令:proxy
和 unproxy
。
具体分析:
设置代理 (proxy
):
获取主机IP地址和端口:
export hostip=$(ip route | grep default | awk '{print $3}') export hostport=10811
这里通过
ip route
命令获取默认网关的IP地址,并存储在变量hostip
中。默认端口号设置为10811
并存储在变量hostport
中。这通常是代理服务器的IP地址和端口。定义
proxy
别名:alias proxy=' export https_proxy="http://${hostip}:${hostport}"; export http_proxy="http://${hostip}:${hostport}"; export all_proxy="http://${hostip}:${hostport}"; echo -e "Acquire::http::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null; echo -e "Acquire::https::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null; '
- 设置环境变量
https_proxy
、http_proxy
和all_proxy
,所有通过HTTP和HTTPS协议的流量都会通过指定的代理服务器。 - 更新APT包管理器的配置文件(
/etc/apt/apt.conf.d/proxy.conf
),使其通过代理服务器下载包文件。
- 设置环境变量
取消代理 (unproxy
):
- 定义
unproxy
别名:alias unproxy=' unset https_proxy; unset http_proxy; unset all_proxy; sudo sed -i -e '/Acquire::http::Proxy/d' /etc/apt/apt.conf.d/proxy.conf; sudo sed -i -e '/Acquire::https::Proxy/d' /etc/apt/apt.conf.d/proxy.conf; '
- 清除环境变量
https_proxy
、http_proxy
和all_proxy
,停止通过代理服务器引导流量。 - 从APT包管理器的配置文件中删除先前添加的代理设置,恢复APT包管理器直接访问网络的能力。
- 清除环境变量
重新读取配置文件
source ~/.bashrc
启动代理
每次开启WSL2,都需要输入以下命令激活代理
proxy
输入unproxy
关闭代理
测试
curl google.com
有回应就是成功
故障排除
如果你连不上全球通,请参考这些排查方法:
ping google
WSL中,测试是否能解析出IP地址
- 如果没看到google.com的ip地址,请检查WSL的DNS是否正确配置
- 如果没有回应,正常现象,不用管
ping google
代理服务器可用性
在Windows中尝试访问谷歌
如果你自己电脑都访问不了,那就说明本机环境都不行。
代理服务器开放局域网
确保你的代理开放了局域网连接
然后检查防火墙设置,确保代理服务器通过了你Windows使用的防火墙
确保WSL2代理配置正确
WSL中,查看http代理的输出:
echo $HTTP_PROXY
留意两个地方:
- 有没有输出?(eg. x.x.x.x:10811)
- 端口是否为代理服务器的局域网开放端口
如果出问题,请重新修改~/.bashrc
文件,并重新读取
暂无评论内容