在用 Windows Subsystem for Linux 的 Ubuntu 时,执行:
bash
sudo apt update
一直卡在:
css
0% [Working]
同时现象是:
bash
ping 8.8.8.8 # 可以
ping mirrors.tuna.tsinghua.edu.cn # 不行
这说明:
网络是通的,但 DNS 解析失败。
问题根因
查看 /etc/resolv.conf:
bash
cat /etc/resolv.conf
发现:
arduino
nameserver fec0:0:0:ffff::1
search xxx.ts.net
这通常是因为开启了 Tailscale, WSL 自动继承了 Windows 的 VPN DNS。
但这个 IPv6 DNS 在 WSL 内部无法正常解析,导致:
- apt 卡住
- 域名无法解析
- 误以为网络坏了
解决方案(永久修复)
1️⃣ 关闭 WSL 自动生成 DNS
bash
sudo nano /etc/wsl.conf
写入:
ini
[network]
generateResolvConf = false
2️⃣ 删除旧 DNS 文件
bash
sudo rm /etc/resolv.conf
3️⃣ 手动写入稳定 DNS
bash
sudo nano /etc/resolv.conf
写入:
nameserver 8.8.8.8
nameserver 1.1.1.1
4️⃣ 重启 WSL
在 Windows PowerShell 执行:
powershell
wsl --shutdown
重新打开 Ubuntu。
验证
bash
ping mirrors.tuna.tsinghua.edu.cn
sudo apt update
恢复正常。
原理说明
WSL2 会把 Windows 当前 DNS 注入 Linux。
当 VPN(如 Tailscale)修改了 Windows DNS 后:
- WSL 继承 VPN DNS
- VPN DNS 在 WSL 内不可达
- 域名解析失败
固定 DNS 是最稳定的方案。
结论:
WSL 能 ping IP 但不能 ping 域名,大概率是 DNS 被 VPN 注入导致。 关闭自动生成 resolv.conf + 手动指定 DNS 是长期稳定解法。