不同于 WSL1
网络可以与宿主机共享,WSL2
是基于 Hyper-v
虚拟机的,它拥有一个新的网段,所以简单地使用代理,允许来自局域网的连接的旧方法就不奏效了,需要额外获取宿主机的 IP
进行设置
查看宿主机 IP
在 /etc/resolv.conf
里就有保存的 IP
,可以用下面的命令查看
1
| cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'
|
设置环境变量
1 2 3
| export http_proxy='http://<Windows IP>:<Port>' export https_proxy='http://<Windows IP>:<Port>' export all_proxy='socks5://<Windows IP>:<Port>'
|
通常设置之后就可以让宿主机的代理软件监听指定的端口,来代理 WSL2
的请求了
但是本人实践下来,发现不能设置 export http_proxy='http://<Windows IP>:<Port>'
这条环境变量,不然会报错,原因尚不清楚……
而且有个最大的问题,就是 export
只在当前登录的终端生效,你退出重启一下就需要重新设置了,十分繁琐,所以我们用脚本帮我们执行这一过程
注:脚本改自 https://zinglix.xyz/2020/04/18/wsl2-proxy/
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 48 49 50
| #!/bin/sh hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }') wslip=$(hostname -I | awk '{print $1}') http_port=10809 socks5_port=10808 //此处的 10808 以及 10809 为 v2ray 的默认监听端口,请根据你的代理软件修改
PROXY_HTTP="http://${hostip}:${http_port}" PROXY_SOCKS5="socks5://${hostip}:${socks5_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 "HTTP/HTTPS PROXY:" ${https_proxy} echo "SOCKS PROXY:" ${all_proxy} }
if [ "$1" = "set" ] then set_proxy
elif [ "$1" = "unset" ] then unset_proxy
elif [ "$1" = "test" ] then test_setting else echo "Unsupported arguments." fi
|
使用方法( proxy.sh
为脚本名)
1 2 3
| proxy.sh set //设置代理 proxy.sh unset //取消代理 proxy.sh test //查看状态
|
防火墙和代理软件设置
需要允许代理软件通过防火墙,另外代理软件也要放行来自局域网的连接,这里就不赘述了
补充
设置完后,可以用 curl -vv www.google.com
验证一下是否生效,另外在代理软件应该也能看到相应的请求。不过像 git
这类软件还是没有被正确代理,需要单独设置
1 2 3
| # <Windows IP>和<Port>设置成你对应的 git config --global http.proxy 'socks5://<Windows IP>:<Port>' git config --global https.proxy 'socks5://<Windows IP>:<Port>'
|
取消代理
1 2
| git config --global --unset http.proxy git config --global --unset https.proxy
|
END
参考:
https://zinglix.xyz/2020/04/18/wsl2-proxy/