WSL2 sudo apt update 卡在 0% [Connecting to security.ubuntu.com]

问题

在 WSL Ubuntu 中执行:

sudo apt update

一直卡在0% [Connecting to security.ubuntu.com],同时ping -c 4 www.baidu.com无法返回结果,但是ping -c 4 8.8.8.8可以正常通信


原因

WSL 默认 DNS 不可用

cat /etc/resolv.conf

得到nameserver 10.255.255.254,这是 WSL 自动生成的 DNS 地址,但是当前网络环境下,该 DNS 无法正常解析域名

测试结果
ping 8.8.8.8正常
ping www.baidu.com失败
apt update卡在 Connecting

解决方案

配置 systemd-resolved DNS

  1. 编辑sudo nano /etc/systemd/resolved.conf
  2. 添加:
[Resolve] DNS=8.8.8.8 1.1.1.1 FallbackDNS=8.8.4.4 1.0.0.1
  1. 重启 DNS 服务sudo systemctl restart systemd-resolved
  • 检查resolvectl status得到确认:DNS Servers: 8.8.8.8 1.1.1.1

关闭 systemd-resolved,手动管理 DNS

修改 WSL 配置
  • 编辑sudo nano /etc/wsl.conf
[boot] systemd=true [user] default=<你的设备名> [network] generateResolvConf=false

generateResolvConf=false防止 WSL 默认自动生成/etc/resolv.conf

  • [user]只能存在一次
  • default只能有一个:解决 WSL 启动时Duplicated config key 'user.default'
删除自动生成 DNS
  1. 停止 WSL:
wsl --shutdown
  1. 进入 Ubuntu:
  • 删除sudo rm /etc/resolv.conf
  • 创建 `sudo nano /etc/resolv.conf~
  • 写入
nameserver 8.8.8.8 nameserver 1.1.1.1
验证
  1. 查看cat /etc/resolv.conf
  • 得到:
nameserver 8.8.8.8 nameserver 1.1.1.1
  1. 测试ping -c 4 www.baidu.com成功
  2. sudo apt update恢复正常

总结

本次问题根因:

WSL2 网络正常,但是 DNS 解析链路异常。开启 systemd 后 systemd-resolved 接管 DNS,但没有正确配置上游 DNS,导致 apt、curl、ping 域名全部失败。

最终解决:

  1. 修正/etc/wsl.conf
  2. 禁止 WSL 自动生成 resolv.conf
  3. 手动配置 DNS