在 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 protproxy 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 拖入到这个目录就可以了,这样就实现了开机启动
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于