在 Windows 11 中设置 WSL2 Ubuntu 的 `networkingMode=mirrored` 详细教程
在 Windows 11 中设置 WSL2 Ubuntu 的 `networkingMode=mirrored` 详细教程
- 引言
- 环境要求
- 配置 `.wslconfig` 文件
- 重启 WSL2
- 验证镜像网络模式
- 解决常见问题
- 其他注意事项
- 结论
引言
在 Windows 11 中使用 WSL2(Windows Subsystem for Linux 2)时,默认的网络配置可能会导致一些网络互通性问题,例如无法通过 localhost
访问 WSL2 中的服务,或者在局域网中无法访问 WSL2 中的服务。为了解决这些问题,Windows 11 23H2 及以上版本引入了 networkingMode=mirrored
配置,使 WSL2 与 Windows 主机共享相同的网络配置。本文将详细介绍如何设置 WSL2 Ubuntu 的 networkingMode=mirrored
,并解决常见问题。
环境要求
在开始之前,请确保满足以下环境要求:
- Windows 版本:Windows 11 23H2 或更高版本。
- WSL 版本:WSL2 2.0.0 或更高版本。
可以通过以下命令检查 WSL 版本:
wsl --version
如果版本低于 2.0.0,可以通过以下命令更新:
wsl --update --pre-release
配置 .wslconfig
文件
-
创建或编辑
.wslconfig
文件:- 打开 PowerShell 或命令提示符,输入以下命令创建或编辑
.wslconfig
文件:notepad $env:USERPROFILE\.wslconfig
- 如果文件已存在,直接编辑即可。
- 打开 PowerShell 或命令提示符,输入以下命令创建或编辑
-
添加镜像网络配置:
在.wslconfig
文件中添加以下内容:[wsl2] networkingMode=mirrored dnsTunneling=true autoProxy=true firewall=true [experimental] autoMemoryReclaim=gradual sparseVhd=true hostAddressLoopback=true
networkingMode=mirrored
:启用镜像网络模式,使 WSL2 与 Windows 共享网络。dnsTunneling=true
:启用 DNS 隧道,提高与 VPN 等复杂网络的兼容性。autoProxy=true
:同步 Windows 的代理设置到 WSL2。firewall=true
:启用 Windows 防火墙集成。hostAddressLoopback=true
:允许通过主机的局域网 IP 访问 WSL2 中的服务。
重启 WSL2
完成配置后,重启 WSL2 以应用更改:
wsl --shutdown
等待几秒后重新启动 WSL2。
验证镜像网络模式
-
检查 IP 地址:
- 在 WSL2 中运行以下命令查看 IP 地址:
如果 IP 地址与 Windows 主机的 IP 地址一致,说明镜像网络模式已启用。ip addr show eth0
- 在 WSL2 中运行以下命令查看 IP 地址:
-
测试网络互通:
- 在 WSL2 中启动一个服务(如 Python HTTP 服务器):
python3 -m http.server 8000
- 在 Windows 中访问
http://localhost:8000
,如果能够访问,说明镜像网络模式配置成功。
- 在 WSL2 中启动一个服务(如 Python HTTP 服务器):
解决常见问题
-
局域网访问问题:
- 如果局域网设备无法访问 WSL2 中的服务,可能是 Hyper-V 防火墙阻止了入站连接。可以通过以下命令允许入站连接:
或者为特定端口添加规则:Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow
New-NetFirewallHyperVRule -Name "AllowPort8000" -DisplayName "Allow Port 8000" -Direction Inbound -VMCreatorId '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -Protocol TCP -LocalPorts 8000
- 如果局域网设备无法访问 WSL2 中的服务,可能是 Hyper-V 防火墙阻止了入站连接。可以通过以下命令允许入站连接:
-
Docker 容器无法通过
localhost
访问:- 如果使用 Docker,需要在
/etc/docker/daemon.json
中添加以下配置:
然后重启 Docker 服务:{ "iptables": false }
sudo service docker restart
- 如果使用 Docker,需要在
其他注意事项
-
端口冲突:如果遇到端口冲突问题,可以调整 Windows 的 TCP 动态端口范围,避免与常用端口冲突:
netsh int ipv4 set dynamic tcp start=50000 num=15536
-
IPv6 支持:镜像网络模式支持 IPv6,但
localhost
的 IPv6 地址::1
可能无法直接使用。
结论
通过以上步骤,您可以成功将 WSL2 Ubuntu 的网络模式设置为 mirrored
,并享受更便捷的网络互通体验。如果遇到问题,可以参考相关文档或社区讨论。希望本文对您有所帮助!
参考文档:
- WSL 官方文档
- WSL2 网络配置