1. 启用镜像网络模式

默认情况下,WSL2 的网络行为与传统虚拟机不同,其内部 IP 地址与宿主 Windows 不同,导致无法直接通过 IP 访问 WSL2 服务。

解决方法是开启镜像网络(mirrored networking),这样 Windows 和 WSL2 将共享同一个 IP 地址。

步骤:

Windows 用户主目录(如 C:\Users\你的用户名)下新建或修改 .wslconfig 文件,添加如下配置:

1
2
3
4
5
6
7
[wsl2]
networkingMode=mirrored # 开启镜像网络
dnsTunneling=true # 开启 DNS Tunneling,解决 DNS 问题
autoProxy=true # 自动同步代理设置
# firewall=true # 可选,启用 Windows 防火墙
# [experimental]
# hostAddressLoopback=true # 可选,允许 WSL2 主动访问宿主

编辑完成后,执行以下命令重启 WSL:

1
wsl --shutdown

2. 无法 ping 通 WSL2 的 IP

这是因为 Windows 默认关闭了对 ICMP(ping)的响应。

解决方法:

使用管理员权限打开 PowerShell,运行以下命令开启回显请求(ICMP):

1
netsh advfirewall firewall add rule name="允许ICMPv4回显请求" protocol=icmpv4:8,any dir=in action=allow

3. ping 通了WSL2 的 IP但 SSH 无法连接

默认情况下,WSL2 的 22 端口(SSH)未开放到外部。

解决方法:

执行以下命令,允许 WSL2 暴露 SSH 端口:

1
netsh advfirewall firewall add rule name="Allow WSL2 SSH" dir=in action=allow protocol=TCP localport=22

4. 使用 localhost:port 能访问,但用 IP:port 无法访问

这通常是因为 Hyper-V 的默认设置不允许外部访问虚拟机端口。

解决方法:

使用管理员权限打开 PowerShell,运行以下命令,允许 Hyper-V 虚拟机入站连接:

1
NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow

参考

https://learn.microsoft.com/zh-cn/windows/wsl/networking