Win11系统WSL配置实现网络HTTP访问
WSL2无法直接访问Windows的localhost网络,但WSL2 2.0通过引入镜像网络解决了这一问题。
WSL1与WSL2的区别: WSL1是基于代理的虚拟化技术,而WSL2则使用了真正的虚拟机技术,在Windows主机上运行一个轻量级的Linux内核。
WSL2网络架构问题: WSL2使用虚拟网络适配器与Windows主机通信,导致无法直接访问Windows的localhost网络。
解决思路
WSL2 2.0的解决方案: 引入镜像网络,使WSL2和Windows主机使用相同网络,通过localhost访问本机系统上的服务。
配置WSL2: 在Windows资源管理器中创建.wslconfig
文件,并设置相关参数,如内存、CPU核心数、localhost转发等。
重启WSL服务: 以管理员身份运行PowerShell,先停止WSL服务,再启动WSL服务,以便应用新的配置。
访问宿主机服务: 在WSL中使用curl http://localhost
命令访问宿主机上的服务。
查看宿主机IP: 在WSL中使用cat /etc/resolv.conf
命令查看宿主机的IP地址。
具体为:
第一步:添加配置
在Windows的资源管理器的地址栏输入: %UserProfile%
,即可打开当前用户的主目录,创建文件:.wslconfig
:
[wsl2]
memory=4GB # 分配给 WSL 2 的内存大小
processors=2 # 分配给 WSL 2 的 CPU 核心数
localhostForwarding=true # 是否启用 localhost 转发
[experimental]
autoMemoryReclaim=gradual # 开启自动回收内存,可在 gradual, dropcache, disabled 之间选择
networkingMode=mirrored # 开启镜像网络
dnsTunneling=true # 开启 DNS Tunneling
firewall=true # 开启 Windows 防火墙
autoProxy=true # 开启自动同步代理
sparseVhd=true # 开启自动释放 WSL2 虚拟硬盘空间
第二步:管理员身份运行PowerShell:
停止WSL: wsl --shutdown
启动WSL: wsl
之后就可以在 wsl 中使用 localhost 的方式来访问宿主机上的服务了。