wsl2下git clone命令遇到了网络问题,于是想设置wsl2下的代理,将方法和注意点记录一下。
wsl网络模式工作在NAT模式时,主机和wsl相当于一个局域网,主机是网关,wsl是一台机器,wsl的dns服务器ip地址也是主机地址。
bashcutelemon6@Cutelemon6-laptop:~$ ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.20.53.72 netmask 255.255.240.0 broadcast 172.20.63.255
wsl地址172.20.53.72
powershellPS C:\Users\Cutelemon6> ipconfig 以太网适配器 vEthernet (WSL): 连接特定的 DNS 后缀 . . . . . . . : 本地链接 IPv6 地址. . . . . . . . : fe80::201c:37d6:6f73:d884%53 IPv4 地址 . . . . . . . . . . . . : 172.20.48.1 子网掩码 . . . . . . . . . . . . : 255.255.240.0 默认网关. . . . . . . . . . . . . :
主机为wsl虚拟的网卡地址172.20.48.1,代理未设置的情况下,使用wsl是能访问到国内网站的,比如baidu.com,为了让wsl走代理访问国外网站,需要设置wsl环境变量
bashhost_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
export all_proxy="socks5://$host_ip:7890"
export https_proxy="http://${host_ip}:7890"
export http_proxy="http://${host_ip}:7890"
host_ip为主机ip,/etc/resolv.conf
中存有wsl的dns地址,也就是主机地址,7890
为主机的代理端口,将上述脚本保存为 .proxyrc
,需要使用时 source .proxyrc
启动代理或者直接写入 ~/.bashrc
启动bash时自动运行即可。
写入 all_proxy
等环境变量后,为保证apt获取包时正常使用,同样需要在 /etc/apt/apt.conf.d/proxy.conf
中写入相关配置,并且由于每次wsl重新启动时dns地址会改变,因此将地址写成bash启动脚本的形式。在用户目录 ~
下先写好脚本 (位置随意)
bashcutelemon6@Cutelemon6-laptop:~$ nano update_proxy.sh
写入以下内容:
bash#!/bin/bash
# 读取 /etc/resolv.conf 文件中的 DNS 服务器地址,即为windows为wsl虚拟的网关地址
dns_servers=$(cat /etc/resolv.conf | grep "nameserver" | cut -f 2 -d " ")
# 设置代理端口
proxy_port="7890"
# hint
echo "type password for update proxy:"
# 创建或清空 proxy.conf 文件
sudo sh -c 'echo -n "" > /etc/apt/apt.conf.d/proxy.conf'
# 写入 proxy.conf 文件
sudo sh -c "echo 'Acquire::http::Proxy \"http://$dns_servers:$proxy_port\";' >> /etc/apt/apt.conf.d/proxy.conf"
sudo sh -c "echo 'Acquire::https::Proxy \"http://$dns_servers:$proxy_port\";' >> /etc/apt/apt.conf.d/proxy.conf"
echo "Proxy configuration has been updated in /etc/apt/apt.conf.d/proxy.conf"
添加执行权限
bashchmod +x update_proxy.sh
写入 .bashrc
bash# add proxy update
/home/cutelemon6/update_proxy.sh
win + r + resmon
打开windows资源监视器--网络--侦听端口,可查看被占用的端口,其中包含了clash代理使用的端口
可用 telnet [ip] [port]
命令测试wsl能否访问到端口,以下为访问成功的情况
bashcutelemon6@Cutelemon6-laptop:~$ telnet 172.20.48.1 7890
Trying 172.20.48.1...
Connected to 172.20.48.1.
Escape character is '^]'.
enter键退出
如何说明这个局域网中主机相当于是网关?使用 traceroute
命令(其利用icmp差错报告报文--时间超过来设计)
bashcutelemon6@Cutelemon6-laptop:~$ traceroute baidu.com traceroute to baidu.com (39.156.66.10), 30 hops max, 60 byte packets 1 Cutelemon6-laptop.mshome.net (172.20.48.1) 0.317 ms 0.110 ms 0.084 ms 2 10.106.128.1 (10.106.128.1) 2.930 ms 2.988 ms 2.979 ms 3 120.199.254.5 (120.199.254.5) 3.853 ms 3.826 ms 3.801 ms
第一跳是主机ip,也就说明了在主机与wsl的局域网中充当了网关的角色
本文作者:cutelemon6
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!