WSL2 镜像网络模式不能通过 localhost 访问端口
WSL2 较新的版本中引入了镜像网络模式,官方也在推荐使用这个模式(虽然没有默认开启),启用这个模式后,意味着 WSL 和 Windows 之间几乎没有网络隔离,且 WSL 中的系统分配到的 IP 地址会跟 Windows 一样,启用方法参加官方文档:
- https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config
- https://learn.microsoft.com/zh-cn/windows/wsl/networking
根据官方文档描述,WSL 中监听的端口以及 Windows 中监听的端口,在两个系统中都可以使用 localhost(127.0.0.1)直接访问,可实际测试下来发现不能正常工作,排查一番后发现,原因是我使用的 WSL 系统是从很早前的官方系统中升级过来的,系统中内置了 network-manager.service 这个 systemd 的服务,而新安装的 WSL 系统中(Ubuntu 系列)都没有这个服务,在停止并禁用这个服务自启动后,重启 WSL,镜像网络模式就可以按照预期正常工作了,需要的命令如下:
sudo systemctl stop network-manager.service
sudo systemctl disable network-manager.service
不要忘记重启 WSL,在 PowerShell 中执行:
wsl --shutdown
如果上述命令报错,找不到 network-manager.service 这个服务,那么你遇到的可能不是这个问题,可能是因为防火墙?WSL 配置中可以关闭 WSL 的防火墙:
[wsl2]
networkingMode=mirrored
firewall=false