WSL2与宿主机不共享ip,对于WSL2来说,每次启动宿主ip和自己的ip都是会变的,因此设置代理比较麻烦。
WSL 中获取宿主机 IP
WSL 每次启动的时候都会有不同的 IP 地址,所以并不能直接用静态的方式来设置代理。WSL2 会把 IP 写在 /etc/resolv.conf
中,因此可以用 cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'
这条指令获得宿主机 IP 。
WSL2 自己的 IP 可以用 hostname -I | awk '{print $1}'
得到。
设置代理
有了宿主机 IP 之后,就可以通过设置环境变量的方式设置代理了。这里端口需要自己填写,而且别忘了代理软件中设置允许来自局域网的连接。
export http_proxy='http://<Windows IP>:<Port>'
export https_proxy='http://<Windows IP>:<Port>'
这种设置方式每次重启终端都得重新设置一遍,而且 IP 还得自己手打,还是挺麻烦的,这种时候就得靠脚本了!
#!/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}"
export ALL_PROXY="${PROXY_SOCKS5}"
export all_proxy=${PROXY_SOCKS5}
}
unset_proxy(){
unset http_proxy
unset HTTP_PROXY
unset https_proxy
unset HTTPS_PROXY
unset ALL_PROXY
unset all_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
第 4 行 <PORT>
记得换成自己宿主机代理的端口!!!!!!
之后运行 . ./proxy.sh set
就可以自动设置代理了。unset
可以取消代理,test 可以查看代理状态,能够用来检查环境变量是否被正确修改。
运行的时候不要忘记之前的 .
,或者使用 source ./proxy.sh set
,只有这样才能够修改环境变量
直接运行例如 ./proxy.sh set
或者 sh proxy.sh set
,这样会是运行在一个子 shell 中,对当前 shell 没有效果
另外可以在 ~/.bashrc
中选择性的加上下面两句话,记得将里面的路径修改成你放这个脚本的路径。
alias proxy="source /path/to/proxy.sh"
. /path/to/proxy.sh set
第一句话可以为这个脚本设置别名 proxy,这样在任何路径下都可以通过 proxy 命令使用这个脚本了,之后在任何路径下,都可以随时都可以通过输入proxy unset
来暂时取消代理。
第二句话就是在每次 shell 启动的时候运行该脚本实现自动设置代理,这样以后不用额外操作就默认设置好代理啦~
直接copy的这篇博客内容,验证有效