WSL2 是神器,可以方便地在 windows 下进行 linux 编程,但是里面有个大坑就是 WSL2 的代理设置,让我一直难连上 Github。经过一番折腾,终于让 WSL2 走了系统代理,下面简单记录一下流程。
WSL2 获取宿主机 IP
因为 WSL2 是基于 hyper-V
的,它与 windows 不共享网络地址,因此也没法直接走代理。所以首先需要获取 wsl2 下的 windows 的 ip 地址才可以设置代理。命令:
cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'
设置代理
直接用命令
1 2
| export http_proxy='http://<Host IP>:<Port>' export https_proxy='http://<Host IP>:<Port>'
|
就能设置代理了。当然要让 git
走代理,需要加下面的命令:
1 2
| git config --global http.proxy <Host IP>:<Port> git config --global https.proxy <Host IP>:<Port>
|
脚本
可以写个脚本方便地启用和禁用代理,下面抄一个网上搜到的 脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #!/bin/sh hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }') wslip=$(hostname -I | awk '{print $1}') port=<PORT>
PROXY_HTTP="http://${hostip}:${port}"
set_proxy (){ export http_proxy="${PROXY_HTTP}" export HTTP_PROXY="${PROXY_HTTP}"
export https_proxy="${PROXY_HTTP}" export HTTPS_proxy="${PROXY_HTTP}"
git config --global http.proxy "${PROXY_HTTP}" git config --global https.proxy "${PROXY_HTTP}" }
unset_proxy (){ unset http_proxy unset HTTP_PROXY unset https_proxy unset HTTPS_PROXY git config --global --unset http.proxy git config --global --unset https.proxy }
test_setting (){ echo "Host ip:" ${hostip} echo "WSL ip:" ${wslip} echo "Current proxy:" $https_proxy }
if [ "$1" = "set" ] then set_proxy
elif [ "$1" = "unset" ] then unset_proxy
elif [ "$1" = "test" ] then test_setting else echo "Unsupported arguments." fi
|
在 ~/.bashrc
里面加下面两句话,让终端启动后自动执行脚本(记得修改脚本路径):
1 2
| alias proxy="source /path/to/proxy.sh" . /path/to/proxy.sh set
|
如果还不能连上 Github
首先试一下 wget google.com
看看代理有没有走成功,如果没有可能是 windows 防火墙的问题,打开防火墙 - 允许应用通过防火墙,把代理软件的勾都打上。或者在高级设置里设一下入站规则,允许所有应用所有协议,远程 ip 为 172.16.0.0/12
及 192.168.0.0/16
的入站请求。
如果代理设置成功了还是用不了 git
,那么估计是 git
设置问题。git config --global -l
看看设置,禁用掉不相关的设置,应该就 ok 了。