WSL2无法ping通主机
省流:如果主机能ping通wsl从机,从机ping不通主机,大概率是防火墙拦截了,可以以管理员身份在powershell中运行下面的代码,或者手动在防火墙设置中添加相应的出入站规则。
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
具体原因可以参考:https://blog.csdn.net/Cypher_X/article/details/123011200
wsl的设置很讨厌,每次重启之后IP地址都会重新配置和分配,但是前面这个出入站规则只增加一次应该就行。
WSL2和传统的vmware虚拟机其实有一定的相似之处。WSL2就是默认使用NAT模式虚拟网卡进行的网络配置。
首先先检查下wsl和windows直接的网络通路
在windows端的PowerShell运行ipconfig,找到其中(WSL)这行,这就是你的windows主机的地址,例如我这里就是172.21.80.1
。
在ubuntu端的终端里运行ifconfig,可以查到它的地址,我这里是172.21.85.245
先检查主机能否ping通从机,在主机中用ping指令ping wsl地址,大部分应该都没有问题。
再检查是否能在wsl从机中ping通windows主机,发现ping不通。
就是因为windows的防火墙会把有些出入站给拦截了,需要增加一些规则。
在PowerShell中运行
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
再试一下,ping通啦!!
再说一遍!每次WSL重启之后好像都会重新配置一遍这个虚拟的网卡,所以主机地址和wsl从机地址可能都会变!后面配置代理的时候需要注意一下!!
WSL2使用主机代理
NAT的话有一点好就好在基本上可以直接走主机代理,看前面的部分,先确保出入站规则没问题了,可以双向ping通了,再继续往下。
在你的工具中找到有关局域网配置的地方,启用局域网代理,并设置一个端口,我这里直接用的1080-Socks代理端口。
由于WSL基本上都以终端/命令行为载体,所以直接export代理其实就行,不用像GNOME桌面版那种还要去设置里配置。
先用主机打开powershell,用ipconfig命令确认一下当前wsl虚拟网卡下的主机IP,和前面提到的步骤一样。(一定要每次重启wsl都看一下,有可能会不一样!)
在ubuntu终端中,输入:
export https_proxy="http://<上图所查出来的IP>:<上上图所设置的端口号>"
export http_proxy="http://<上图所查出来的IP>:<上上图所设置的端口号>"
例如我的情况,现在就是这样设置。
然后就ok啦!!
因为每一次启动WSL它的ip的地址都有可能变,所以其实不推荐写在.bashrc中。
等哪一天我找到了办法解决了变IP的问题,或者是有更好的方法了再补充叭。
2023.11.15更新 找到了!
写个脚本自动获取host的IP就行
#!/bin/bash
host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
export https_proxy="http://$host_ip:1080"
export http_proxy="http://$host_ip:1080"
上面的1080要换成上面提到设置的端口号。
比如说存为setproxy.sh
每次要挂代理的时候在终端里source这个脚本就行