运行以下命令将wsl2升级到2.0以上,或者通过github下载
wsl --update --pre-release
在win11的C:\Users\xxx目录下新建.wslconfig文件(xxx根据自己的用户名确定),写入如下内容:
# Settings apply across all Linux distros running on WSL 2
[wsl2]
networkingMode=mirrored # 开启镜像网络
dnsTunneling=true # 开启 DNS Tunneling
firewall=true # 开启 Windows 防火墙
autoProxy=true # 开启自动同步代理
[experimental]
hostAddressLoopback=true
其中hostAddressLoopback 目前处于开发阶段,其作用是:默认情况下,loopback的只有127.0.0.1(i.e., localhost),并且强制loopback。也就是说,在wsl2中开启的网络端口(例如通过8022开启ssh登录端口),会通过localhost映射到win11上,可以在win11宿主机使用ssh -p 8022 username@localhost登录,但是通过win11的局域网或公网IP是不能登录的。将这个选项设置为true之后,就可以在宿主机使用局域网或公网IP通过8022端口直接进行wsl2的ssh登录。
外部设备访问问题
然而,遇到的一个问题是,在同一个局域网下,通过另一台设备ssh到win11的8022端口却不能登录wsl2中运行的Linux。这是因为Hypler-V默认的防火墙阻挡了访问。通过设置Hyper-V防火墙可以解决:使用 WSL 访问网络应用程序 | Microsoft Learn,具体操作如下:
使用管理员权限在 PowerShell 窗口中运行以下命令,以配置Hyper-V防火墙设置,从而允许入站连接:
Set-NetFirewallHyperVVMSetting -Name ‘{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}’ -DefaultInboundAction Allow
官网解决方法案例
临时解决docker转发
解决方案
使用镜像模式后,创建docker容器后,docker run -d -p 8080:80 nginx,通过localhost:8080无法访问
修改**/etc/docker/daemon.json**
{
"iptables": false
}