【WSL2】在WSL2中开启HTTP代理

前言

在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;
'

这个配置脚本的目的是通过设置代理服务器来引导流量,方便在有网络限制或需要通过代理访问外部资源的环境中使用。具体来说,它定义了两个别名命令:proxyunproxy

具体分析:

设置代理 (proxy):

  1. 获取主机IP地址和端口

    export hostip=$(ip route | grep default | awk '{print $3}')
    export hostport=10811

    这里通过ip route命令获取默认网关的IP地址,并存储在变量hostip中。默认端口号设置为10811并存储在变量hostport中。这通常是代理服务器的IP地址和端口。

  2. 定义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_proxyhttp_proxyall_proxy,所有通过HTTP和HTTPS协议的流量都会通过指定的代理服务器。
    • 更新APT包管理器的配置文件(/etc/apt/apt.conf.d/proxy.conf),使其通过代理服务器下载包文件。

取消代理 (unproxy):

  1. 定义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_proxyhttp_proxyall_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文件,并重新读取

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容