0%

WSL2 代理设置

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/12192.168.0.0/16 的入站请求。

如果代理设置成功了还是用不了 git,那么估计是 git 设置问题。git config --global -l 看看设置,禁用掉不相关的设置,应该就 ok 了。