Skip to content

WSL Ubuntu 网络连接问题解决指南

当在 Windows 上安装 WSL Ubuntu 时,网络连接问题是一个常见但令人沮丧的问题。本文将提供全面的解决方案,帮助你恢复 WSL 的网络连接。

问题症状

  • sudo apt update 返回 "Connection failed"
  • ping google.com 无响应或超时
  • 其他网络相关命令无法正常工作

最常见的解决方案:DNS 配置修复

WSL 自动生成的 /etc/resolv.conf 文件中的 nameserver 设置通常是问题的根源。

临时解决方案(单次修复)

bash
# 编辑 resolv.conf 文件
sudo nano /etc/resolv.conf

将文件中的 nameserver 值修改为公共 DNS 服务器:

bash
nameserver 8.8.8.8  # Google DNS
# 或
nameserver 1.1.1.1  # Cloudflare DNS

保存文件后,网络连接应该会恢复正常。

永久解决方案(防止重置)

重要

以下命令将阻止 WSL 自动重置 /etc/resolv.conf 文件

bash
# 删除当前 resolv.conf 文件
sudo rm /etc/resolv.conf

# 创建新的 resolv.conf 文件
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'

# 配置 WSL 停止自动生成 resolv.conf
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'

# 设置文件为不可修改(防止被覆盖)
sudo chattr +i /etc/resolv.conf

执行完这些命令后,需要重启 WSL:

bash
# 在 PowerShell 中执行
wsl --shutdown

然后重新打开 WSL 终端。

网络重置方案(Windows 层面修复)

如果 DNS 配置修改无效,可以尝试重置 Windows 网络堆栈:

bash
# 以管理员身份运行 PowerShell
wsl --shutdown
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
bash
# 打开 Windows 设置 -> 网络和 Internet -> 状态
# 点击 "网络重置" -> "立即重置"

完成后需要重启计算机

VPN 相关问题的解决方案

如果你使用 VPN(特别是 Cisco AnyConnect),可能需要额外步骤:

获取正确的 DNS 服务器

powershell
# 在 PowerShell 中获取 DNS 服务器地址
Get-DnsClientServerAddress -AddressFamily IPv4 | Select-Object -ExpandProperty ServerAddresses

修改 VPN 适配器指标

powershell
# 提高 VPN 适配器指标,确保流量优先通过正常网络
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000

配置 WSL 使用公司 DNS

bash
# 在 WSL 中配置
sudo unlink /etc/resolv.conf

# 创建 wsl.conf 阻止自动生成
cat << EOF | sudo tee /etc/wsl.conf
[network]
generateResolvConf = false
EOF

# 创建自定义 resolv.conf
cat << EOF | sudo tee /etc/resolv.conf
nameserver 10.50.x.x  # 公司 DNS 服务器
nameserver 8.8.8.8    # 备用公共 DNS
search yourdomain.com # 公司搜索域
EOF

# 锁定文件防止修改
sudo chattr +i /etc/resolv.conf

文件压缩问题解决方案

NTFS 压缩可能导致 WSL 网络问题,检查并解压缩相关文件:

cmd
:: 在 CMD 中运行
compact /u /s:"%TEMP%" /i /Q

确保 %TEMP%\swap.vhdx 文件未启用压缩属性(通过文件属性对话框检查)。

WSL 版本切换方案

如果以上方法都无效,可以考虑切换回 WSL 1:

powershell
# 查看当前 WSL 版本
wsl -l -v

# 将 Ubuntu 切换到 WSL 1
wsl --set-version Ubuntu-20.04 1

# 或设置 WSL 1 为默认版本
wsl --set-default-version 1

注意

WSL 1 使用不同的网络架构,可能更稳定但性能较低

彻底重装方案

作为最后的手段,可以完全重装 WSL:

  1. 卸载所有 Linux 发行版
  2. 关闭 "Windows Subsystem for Linux" 功能
  3. 重启计算机
  4. 重新启用 WSL 功能
  5. 重新安装 Ubuntu

故障排除工具

检查网络状态的基本命令:

bash
# 检查网络接口
ip addr show

# 测试 DNS 解析
nslookup google.com

# 检查路由表
ip route show

# 使用 curl 测试 HTTP 连接
curl -I https://www.google.com

总结

WSL 网络问题通常源于 DNS 配置、VPN 冲突或系统网络堆栈异常。按照以下顺序尝试解决方案:

  1. 修改 /etc/resolv.conf DNS 设置
  2. 禁用 WSL 自动生成 resolv.conf
  3. 重置 Windows 网络堆栈
  4. 检查文件压缩设置
  5. 调整 VPN 配置(如适用)
  6. 切换 WSL 版本
  7. 完全重装 WSL

大多数情况下,前两个步骤就能解决问题。如果遇到特定场景(如企业 VPN 环境),可能需要组合使用多个解决方案。