在wsl中使用主机代理
首先我安装的wsl发行版事ubuntu,其他系统差不多。
我们知道在Linux中使用代理的方式:
export http_proxy=sock5://ip:port
export https_proxy=sock5://ip:prot
那么我们主机的IP在局域网中总会变,但是我们发现有一个IP是在/etc/resolv.conf中那么我们可以用一个命令取出来,我们直接打开家目录下的.bashrc, vim ~/.bashrc输入
export hostip=$(cat /etc/resolv.conf | grep -oP '(?<=nameserver\ ).*)
alias proxy='export http_proxy="sock5://${hostip}:1080"; export https_proxy="http://${hostip}:1080"; echo "open proxy"'
alias noproxy='export http_proxy= ;export https_proxy= ; echo "close proxy"'
这样我们就可以输入proxy打开代理,输入noproxy关闭代理
但是,我们发现这样是连不上主机的代理的,因为从wsl发出的网络包被windows的防火墙拦截了
解决方法是,按win+x键以管理员方式打开powershell添加以下防火墙规则
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
主机或局域网中访问wsl中的服务
主机中访问wsl的服务有两种方式,一种直接使用localhost访问,不过这种方式缺点就是有些调试工具不支持,而且不支持。第二种方式就是使用端口转发,这种比较麻烦的部分是wsl每次启动IP都会变,而用localhost经常会连接不上。我们可以获取wsl2的IP并写入到hosts中,感谢shayne大佬提供了工具下载后使用管理员启动powershell执行如下命令
.\wsl2host.exe install
输入计算机用户名,密码,重启wsl后就会自动讲wsl的ip写入到hosts,ubuntu.wsl,然后设置端口转发,在powershell中执行
netsh interface portproxy add v4tov4 listenport=监听的端口 connectaddress=ubuntu.wsl connectport=监听的端口 listenaddress=* protocol=tcp
wsl中开机自启
我们经常会在wsl中安装一些服务,并希望这些服务开机自启,我们可以在wsl中的/etc/init.wsl写入开机启动的服务比如redis
#!/bin/bash
service redis-server start
在windows下创建启动的vbs脚本 linux-start.vbs
Set ws = WScript.CreateObject("WScript.Shell")
ws.run "wsl -d ubuntu -u root /etc/init.wsl"
按win+r键输入:shell:startup
将linux-start.vbs拖入到这个目录就可以了,这样就实现了开机启动