随着WSL的更新,wsl的增加了许多特性,但也遇到了一些问题:
由于折腾了很久,所以做一下记录。
解决方法: 去掉wsl中使用脚本配置的代理
原因:
关于wsl使用代理, 最常见的方法是使用如下脚本
hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
export https_proxy="http://${hostip}:13579"
export http_proxy="http://${hostip}:13579"
export all_proxy="socks5://${hostip}:13579"
但是如果在windows目录C:/User/<用户名>/.wslconfig
中的配置为
[wsl2]
networkingMode=mirrored # 开启镜像网络
dnsTunneling=true # 开启 DNS Tunneling
firewall=true # 开启 Windows 防火墙
autoProxy=true # 开启自动同步代理
[experimental]
hostAddressLoopback=true
很有可能出现的情况是无法连接到VPN,原因是/etc/resovf.conf
中的nameserver
为 127.0.0.42
, 这是由于networkingMode=mirrored
后有许多改变,
总之结果就是无法访问vpn了,如果删除 ~/.bashrc
中关于proxy
的配置,访问外网
wget www.google.com
是可以正常访问的,这是因为新版wsl
有了autoProxy=true
功能,能够自动寻找主机的代理。但是不能ping
通。[Todo 解决Ping问题, 暂时不解决因为代理可以使用,可能原因是ICMP 协议不走代理]
当然也有可能不能访问,可能是防火墙的问题。解决方法如下,
问题状况是,在wsl中用docker启动了某个应用, 在windows上无法访问,并且确保,windows的防火墙放行了,同时 wsl的防火墙也关闭了,但是无法访问,最终比较关键的是参考WSL 2.0中使用networkingMode=mirrored,解决docker转发和外部设备访问问题
解决方法:
确保windows 放行了wsl的出站入站规则,也可以使用命令实现,其中的vEthernet (WSL)
以具体情况而定,比如我的是vEthernet (Default Switch)
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
确保ubuntu关闭了防火墙
sudo ufw disable
确保 Hyper-V 防火墙被关闭, 注意:‘{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}’
复制到Power shell
是''
会消失,需要手动添加,解决方法来源
Set-NetFirewallHyperVVMSetting -Name ‘{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}’ -DefaultInboundAction Allow
关闭docker的防火墙/etc/docker/daemon.json
{
"iptables": false
}