解决 Ubuntu 和其他发行版上的 WSL2 网络无法访问的问题

2023-11-08

【翻译于Kontext 的 Resolution for WSL2 Network Unreachable Issue on Ubuntu and Other Distros

对于我的 Ubuntu 1.2 发行版,从 WSL20 升级到 WSL04 时,虚拟机无法连接到网络。错误消息包括:无法访问网络;临时故障解决; 名称解析等暂时失败。网站上有很多文章,其中许多文章都没有解决问题。本页总结了这些问题的解决方案,希望能为您节省大量时间。

问题上下文

非系统驱动器上安装 Windows 子系统之后安装 WSL 2 Ubuntu 发行版后,尝试更新 apt 时会出现以下错误:

Err:1 http://archive.ubuntu.com/ubuntu focal InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:2 http://security.ubuntu.com/ubuntu focal-security InRelease
  Temporary failure resolving 'security.ubuntu.com'
Err:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:4 http://archive.ubuntu.com/ubuntu focal-backports InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal-backports/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/focal-security/InRelease  Temporary failure resolving 'security.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

同样,当 ping 8.8.8.8 或任何其他 IP 地址时,会显示以下错误:

ping: connect: Network is unreachable

当ping任何域名时,它会显示一个不同的错误:

ping: google.com: Temporary failure in name resolution

环境详细信息如下:

  • 操作系统: 视窗 10 (10.0.19044)
  • WSL 版本:2
  • 发行版:Ubuntu 20.04 x64 版本或 OpenSUSE 42 或任何其他发行版。

降级到 WSL 1 时,将自动解决以下问题:

wsl --set-version Ubuntu 1

但是,当将其更改回版本2时,上述问题仍然存在:

wsl --set-verison Ubuntu 2

常规修复

WSL 2 官方文档和许多其他网站都建议进行以下修复:

  1. 在 WSL 中备份和删除自动生成的文件:

     # Backup and delete auto-generated files
     sudo cp /etc/wsl.conf /etc/wsl.conf.bk
     sudo cp /etc/resolv.conf /etc/resolv.conf.bk
     sudo rm /etc/resolv.conf || true
     sudo rm /etc/wsl.conf || true
    

    如果您的发行版中不存在 wsl.conf,您可以忽略它。

  2. 使用以下命令重新创建:/etc/wsl.conf

     sudo bash -c 'cat <<EOF > /etc/wsl.conf
     [network]
     generateResolvConf = false
     EOF'
    
  3. 使用以下命令重新创建:/etc/resolv.conf

     sudo bash -c 'cat <<EOF > /etc/resolv.conf
     nameserver 8.8.8.8
     nameserver 8.8.4.4
     nameserver 192.168.1.254
     EOF'
    

    上面的命令使用谷歌DNS和我的WIFI网络默认网关作为DNS服务器。您可以相应地更改它。您可以从Windows命令提示符中的ipconfig命令获取它:

     ipconfig
     Wireless LAN adapter Wi-Fi:
    
        Connection-specific DNS Suffix  . :
        IPv4 Address. . . . . . . . . . . : 192.168.1.135
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.1.254
    
  4. 保留 WSL

  5. 在 Windows 中以管理员身份运行命令提示符并执行以下命令:

     wsl --shutdown
     netsh winsock reset
     netsh int ip reset all
     netsh winhttp reset proxy
     ipconfig /flushdns
    
  6. 使用 Windows 搜索进行网络重置。如其本身所述,它将重新安装您的网络适配器。在采取任何行动之前,请注意这一点。

  7. 重新启动窗口。

通常在重启后,WSL 网络现在应该可以正常工作。但不幸的是,这种方法对我不起作用。因此,我不断探索其他选项。

运行 ip 地址

在 WSL 中运行以下命令:

$ ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether ba:bc:6f:b0:f3:8b brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 36:6f:82:06:6f:9a brd ff:ff:ff:ff:ff:ff
4: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
6: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:15:5d:c2:ee:f9 brd ff:ff:ff:ff:ff:ff

上述文本已在我的 WSL 发行版中打印出来。问题是 eth0 状态是 DOWN。

如前所述,对于 WSL 1 版本,此问题不存在,因为 WSL2 的工作方式与 WSL1 不同:

10: eth0: <> mtu 1500 group default qlen 1
    link/ether 9c:b6:d0:15:31:74
    inet 169.254.143.197/16 brd 169.254.255.255 scope global dynamic
       valid_lft forever preferred_lft forever

最终解决方案

在尝试了上述所有步骤后,但都对我不起作用。最后,在我大量的网上冲浪检索后找到了个解决办法:禁用对C:\Users\<your user id>\AppData\Local\Packages的压缩。

具体如下:

  • 导航到 C:\Users\<your user id>\AppData\Local\Packages。根据你自己的用户 ID替换占位符

  • 右键选择属性并接着点高级按钮

  • 取消‘Compress contents to save disk space’(压缩内容以便节省磁盘空间)

  • 点击确认按钮

  • 采用对子项和子目录级联修改

  • 通过在 Windows 终端或命令提示符中运行命令来关闭 WSL:wsl --shutdown

  • 重启电脑

重启后问题消失

享受用Ubuntu via WSL 2的开发吧!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决 Ubuntu 和其他发行版上的 WSL2 网络无法访问的问题 的相关文章

  • 为什么在 Linux 上字符串文字的内存地址与其他字符串文字的内存地址如此不同?

    我注意到字符串文字在内存中的地址与其他常量和变量 Linux 操作系统 非常不同 它们有许多前导零 未打印 Example const char h Hi int i 1 printf p n void h printf p n void
  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC
  • Linux 中热插拔设备时检测设备是否存在

    我正在运行 SPIcode http lxr free electrons com source drivers spi spi omap2 mcspi c在熊猫板上 我想知道其中的哪个功能code http lxr free electr
  • 如何在Python中独立于语言安装(linux)获取用户桌面路径

    我找到了 如何找到用户桌面的路径 的几个问题和答案 但在我看来它们都已失效 至少我找到的那些 原因是 如果用户安装的 Linux 不是英语 他或她的桌面很可能位于除 Desktop 例如 对于瑞典语 我相信它是在 Skrivbord 谁知道
  • 如何让“grep”从文件中读取模式?

    假设有一个很大的文本文件 我只想打印与某些模式不匹配的行 显然 我可以使用egrep v patter1 pattern2 pattern3 现在 如果所有这些模式都在一个文本文件中怎么办 最好的制作方法是什么egrep从文件中读取模式 g
  • 适用于 KDE 和 Gnome 的 Gui [重复]

    这个问题在这里已经有答案了 我想为一个现在是 CLI 的应用程序编写一个 gui 它需要在 KDE 和 Gnome DE 中 看起来不错 充分利用用户的外观设置 如果我选择 Qt 或 GTK 我能够做到这一点吗 它们与两个 DE 集成良好吗
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • 设置 Apache POI 的路径

    我想创建 Excel 文件并使用 java 程序在该文件中写入数据 That is here http www techbrainwave com p 554我在 java 文件所在的位置提取了 Apache POI 并将该路径包含在路径变
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • Django + nginx + uwsgi 无法登录

    我有非常简单的登录逻辑 类似于官方 Django 解决方案 class Login FormView template name login html form class AuthenticationForm def get self a
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • Elasticsearch 无法写入日志文件

    我想激活 elasticsearch 的日志 当我运行 elasticsearch 二进制文件时 我意识到我在日志记录方面遇到问题 无法加载配置 这是输出 sudo usr share elasticsearch bin elasticse

随机推荐

  • Linux 网桥实现分析

    第一部份 源码框架 一 网桥原理 传统的中继器 如HUB 是一个单纯的物理层设备 它将每一个收到的数据包 在其所有的端口上广播 由接收主机来判断这个数据包是否是给自己的 这样 网络资源被极大的浪费掉了 网桥之所以不同于中继器 主要在于其除了
  • kubernetes详解

    kubernetes详解 1 kuberenetes简介 1 1什么是kubernetes 1 2 Kubernetes发展史 1 3 为什么要使用kubernetes 1 4 Kubernetes 特点 1 5 kubernetes特性
  • Class.forName()用法简介说明

    转自 Class forName 用法简介说明 下文笔者讲述Class forName 方法的功能简介说明 如下所示 class对象简介说明 class对象用于表示类 每一个类在JVM中都对应一个class对象 jvm中将使用class对象
  • Keil5 STM32 软件仿真错误

    error 65 access violation at 0x40021000 no read permission 这个错误是Keil引起的 应该是没有识别出芯片的型号 我是在RT Thread OS 仿真运行的时候发现的 这里的仿真芯片
  • ipynb转markdown

    不知道为什么ipynb里面没法显示图片 为了阅读体验 没办法只能转为markdown了 jupyter nbconvert to markdown 特征处理 ipynb
  • 8800个机器学习开源项目为你精选TOP30!

    授权自AI科技大本营 ID rgznai100 本文共图文结合 建议阅读5分钟 本文为大家带来了30个广受好评的机器学习开源项目 最近 Mybridge发布了一篇文章 对比了过去一年中机器学习领域大约8800个开源项目后 选出30个2017
  • chatGPT身份指令

    充当 Linux 终端 我想让你充当 Linux 终端 我将输入命令 您将回复终端应显示的内容 我希望您只在一个唯一的代码块内回复终端输出 而不是其他任何内容 不要写解释 除非我指示您这样做 否则不要键入命令 当我需要用英语告诉你一些事情时
  • 静态变量与静态函数

    堆与栈 1 栈区 stack 由编译器自动分配释放 存放函数的参数值 局部变量的值等 操作是类似于数据结构中的栈 2 堆区 heap 一般有程序员分配和释放 动态存储分配 分配方式类似于链表 3 全局区 static 全局变量和静态变量的存
  • debian ubuntu 设置DNS 永久设置 重启系统不会丢失

    debian ubuntu 设置DNS 永久设置 重启系统不会丢失 1 debian ubuntu 设置DNS 快捷步骤 2 下面是命令解释 2 1 决定系统dns的文件是 etc resolv conf 2 2 谁能最终影响 etc re
  • 封神台——Cookie伪造目标权限(存储型XSS)

    点击传送门看到的是一个留言板 我们首先要判断是否存在XSS 于是输入一串JS代码 看是否会弹出一个内容为 zkaq 的弹窗 出现了 说明存在XSS漏洞 关于XSS漏洞的科普如下 跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代
  • loadtxt()读取数据类型转换/string转换float/ValueError: could not convert string to float:

    实验数据样式 Test csv 只显示几行 0 589469 5 000059 0 480721 0 000204 0 000204 12 945284 4 999956 9 671936 0 000145 0 000145 9 70103
  • 每天一个小技巧之Bash Shell Debug

    sh x xxxx sh
  • 多态的定义及原理

    一 多态的概念和定义 1 多态的概念 多态 Polymorphism 同字面意思意为多种形态 本质就是不同对象完成同一行为产生的不同结果 2 多态的构成条件 多态是在不同继承关系的类对象 去调用同一函数 产生了不同的行为 在继承中要构成多态
  • 基于Pytorch的模型推理

    训练部分说明 假设我们现在有两个文件 first file train py 用于训练模型 second file inference py 用于推理检测 在train py文件中我们使用了定义了一个类 里面声明了我的网络模型 例如 cla
  • java 备份sqlserver部分表_SQLServer备份指定表

    先定义表类型 CREATE TYPE t bak tables AS TABLE table name VARCHAR 200 然后再定义备份过程 CREATE PROC sp bak tables tbs t bak tables REA
  • 火线精英服务器怎样可以稳定,火线精英怎么操控好速度慢威力大的斩月

    关键词 火线精英怎么操控好速度慢威力大的斩月 火线精英斩月怎么操控 火线精英怎么操控好斩月 火线精英斩月怎么用 火线精英斩月是一把新出的刀 外格炫酷 威力惊人 美中不足的是他的攻速 这地方是硬伤啊 但是 作为新一代的神器 怎样才能操控好呢
  • Intellij Idea单元测试覆盖率插件JaCoCo的使用

    JaCoCo是Java代码单元测试覆盖率工具 可以用于IDE 也可以用于Maven等构建工具 IDE 主要介绍Intellij Idea中的使用 Eclipse请查看Jacoco Eclipse简单操作 Intellij Idea用法 调整
  • PXE自动化安装CentOS 8

    安装前准备 关闭防火墙和SELINUX DHCP服务器静态IP 切勿用桥接模式 最好是NET模式而且把自动分配DHCP对勾取消 查看防火墙和seelinux是否关闭 root centos8 firewall cmd state not r
  • Qt5 的类 QPoint,QPointF(相关的方法,不会的都在)

    QPoint QPoint官网链接 简介 QPoint 类使用整数精度来定义平面中的一个点 包含的成员 我觉得你可能看不懂的成员使用的方法 1 dotProduct const QPoint const QPoint int 参数是两个点的
  • 解决 Ubuntu 和其他发行版上的 WSL2 网络无法访问的问题

    翻译于Kontext 的 Resolution for WSL2 Network Unreachable Issue on Ubuntu and Other Distros 对于我的 Ubuntu 1 2 发行版 从 WSL20 升级到 W