WSL的网络问题(2)
问题一:ip a
只显示一个 lo 网络适配器
解决方法:删除 .wslconfig
文件
首先尝试删除 Windows 用户目录下的 .wslconfig
文件。
注意: 如果删除并重启后遇到 “wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理” 的错误,这可能是由于以前安装的
VMware
没有完全卸载干净。解决方案:
- 打开 Windows 的设备管理器,检查网络适配器是否出现问题(例如,报错“代码56”)。
- 如果有问题,打开注册表 (regedit),删除
HKEY_CLASSES_ROOT\CLSID\{3d09c1ca-2bcc-40b7-b9bb-3f3ec143a87b}
项。这个方法也适用于其他因网络适配器导致“代码56”错误的情况。
问题二:提示 “localhost 代理配置未镜像到 WSL”
如果只遇到 “检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理” 的问题,请按以下步骤操作:
-
创建
.wslconfig
文件 在您的 Windows 用户目录(通常是C:\Users\你的用户名\
)下创建一个新的文本文件,并将其命名为.wslconfig
。 - 编辑
.wslconfig
文件 在文件中输入以下内容:[experimental] autoMemoryReclaim=gradual networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true
- 重启 WSL 服务
打开
PowerShell
或CMD
,输入以下命令来关闭 WSL:wsl --shutdown
关闭后,重新打开您的 WSL 发行版即可。
- 检查网络连接
如果重启后遇到无法访问外部网络的问题,请详见另一篇文章:《WSL的网络问题(1)》。
WSL的网络问题(1)
在 Windows 下使用 WSL2(Windows Subsystem for Linux)时,有时会遇到以下问题:
apt update
/ping google.com
/gif clone
等命令提示 “Temporary failure in name resolution” 或 “Could not resolve host”
这种问题的本质是 WSL 内部的 /etc/resolv.conf
配置了一个无法正常访问的 DNS 服务器。
1. 让 DNS 设置永久生效
WSL 默认会在重启时覆盖 /etc/resolv.conf
,我们需要禁用它的自动生成。
-
编辑 WSL 配置:
sudo vim /etc/wsl.conf
写入:
[network] generateResolvConf = false
-
重启 WSL:
wsl --shutdown wsl
2.解决办法
1:使用公共的DNS解析服务器
-
在 WSL 中:
sudo vim /etc/resolv.conf
改成:
nameserver 8.8.8.8 nameserver 114.114.114.114
2:使用当前 Wi-Fi 的 IPv4 地址
-
在 PowerShell 中查看 Wi-Fi IPv4:
ipconfig
找到
无线局域网适配器 WLAN
→IPv4 地址
(例如192.168.1.5
)。 -
在 WSL 中:
sudo vim /etc/resolv.conf
改成:
nameserver 192.168.1.5 nameserver 114.114.114.114
- 如果遇到无法修改文件,可以试试这个
sudo chattr -i /etc/resolv.conf
- 如果遇到无法修改文件,可以试试这个
-
保存并退出,然后测试:
ping baidu.com
3:使用 WSL 的虚拟网关的IPv4
-
在 Windows 中查看:
ipconfig
找到
vEthernet (Default Switch)
→IPv4 地址
(例如172.27.240.1
)。 -
修改 WSL DNS:
sudo vim /etc/resolv.conf nameserver 172.27.240.1 nameserver 114.114.114.114
-
保存并测试。
Hello world!
Hello world! This site is my first English blog.