摘 要
随着WSL的更新,wsl的增加了许多特性,但也遇到了一些问题:
- 代理方式的改变
- 端口访问问题
由于折腾了很久,所以做一下记录。
代理问题解决
解决方法: 去掉wsl中使用脚本配置的代理
原因:
关于wsl使用代理, 最常见的方法是使用如下脚本
hostip=$(cat /etc/resolv.conf |grep-oP'(?<=nameserver\ ).*')exporthttps_proxy="http://${hostip}:13579"exporthttp_proxy="http://${hostip}:13579"exportall_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}
版权归原作者 都学点 所有, 如有侵权,请联系我们删除。