惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
M
MIT News - Artificial intelligence
罗磊的独立博客
博客园 - 【当耐特】
A
About on SuperTechFans
Last Week in AI
Last Week in AI
雷峰网
雷峰网
IT之家
IT之家
aimingoo的专栏
aimingoo的专栏
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园_首页
博客园 - 叶小钗
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Docker
Engineering at Meta
Engineering at Meta
B
Blog RSS Feed
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
S
SegmentFault 最新的问题
Recent Announcements
Recent Announcements

博客园 - VAllen

ConcurrentNativeQueue<T>:一个使用 .NET 实现的零 GC 压力的无锁 MPSC 原生队列 在DOS环境下升级BMC带外管理模块固件的另类办法 .NET 响应式编程 System.Reactive 系列文章(三):Subscribe 和 IDisposable 的深入理解 .NET 响应式编程 System.Reactive 系列文章(二):深入理解 IObservable<T> 和 IObserver<T> .NET 响应式编程 System.Reactive 系列文章(一):基础概念 分析基于ASP.NET Core Kernel的gRPC服务在不同.NET版本的不同部署方式的不同线程池下的性能表现 从Windows 11 23H2升级至24H2后,Git操作提示文件所有权错误的3种有效解决方案 在Windows平台使用源码编译和安装PyTorch3D指定版本 【一天一点.NET小知识】运用向量Vector<T>加速求和计算 为什么不推荐使用Linq? 在System身份运行的.NET程序中以指定的用户身份启动可交互式进程 如何使用csproj构建C#源代码组件NuGet包? 如何更改.NET中的默认时区? 高性能版本的零内存分配LikeString函数(ZeroMemAllocLikeOperator) 在.NET Core,除了VB的LikeString,还有其它方法吗?(四种LikeString实现分享) 在Linux平台下使用.NET Core访问Access数据库读取mdb文件数据 Windows 11 + Samsung 980 踩坑:在 LocalDB 15.0 实例启动期间出错: 无法启动 SQL Server 进程(附赠 查询指定日期范围内的前1000条SQL执行记录) SQL Server 2000 创建角色,登陆用户,安全用户,批量授予权限 在PowerShell脚本中获取程序集文件属性的指定元数据特性的方法——AssemblyMetadataAttribute
在 Windows 11 中为 WSL2 启用 Systemd 以及修复ping不通和DN...
VAllen · 2023-12-17 · via 博客园 - VAllen

前言

今天使用 WSL2 (Ubuntu 22.04.1 LTS) 的时候,遇到了ping不通的问题,提示:ping: connect: Network is unreachable

以及执行 sudo apt update 命令出现错误:Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal/InRelease Temporary failure resolving 'archive.ubuntu.com'

向 ChatGPT 提问和折腾,最终 ChatGPT 还是没能帮我解决问题。

只好上谷歌搜索引擎找答案,最终解决。

首先检查是否是 WSL2

自从 Windows 11 开始,Windows Subsystem for Linux 默认就是 WSL2,

如果不确定是不是WSL2,可以执行以下命令查看:

C:\Users\Administrator> wsl -v
WSL 版本: 2.0.14.0
内核版本: 5.15.133.1-1
WSLg 版本: 1.0.59
MSRDC 版本: 1.2.4677
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows 版本: 10.0.22631.2861

执行以下命令,查看适用于 Linux 的 Windows 子系统分发版本:

C:\Users\Administrator> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-22.04           Stopped         2
  docker-desktop-data    Stopped         2

如果VERSION显示不是2,可以使用如下命令升级为 WSL2:

  1. 设置WSL默认版本为2
C:\Users\Administrator> wsl --set-default-version 2
  1. 更新WSL
C:\Users\Administrator> wsl --update
  1. 设置子系统分发版本

执行命令:wsl --set-version <分发版名称> <版本号>

C:\Users\Administrator> wsl --set-version Ubuntu-22.04 2

这一步比较耗时,执行完成后通过命令 wsl -l -v 来查询升级是否成功。

启用 Systemd

一开始我以为升级到 WSL2 之后,wsl.conf 就没有作用了,其实依然还是有用的。

不管是 WSL1 还是 WSL2,都是通过 wsl.conf 文件来启用 Systemd。

进入WSL后,执行命令 vim /etc/wsl.conf 编辑 wsl.conf 文件,如果文件不存在,则新建 wsl.conf 文件,

如果 wsl.conf 文件里有其它内容,除非你清楚每一行配置的含义,否则建议全部清空。然后输入 i 启用编辑模式,并且添加以下行:

[boot]
systemd=true

然后按 Esc 键,最后输入 :wq 保存和退出。

在WSL之外的另一个窗口,执行以下命令,重启 WSL 实例以使这些更改生效。

C:\Users\Administrator> wsl --shutdown

重新进入 WSL 后,再执行以下命令:

systemctl restart systemd-networkd
systemctl enable systemd-networkd
systemctl restart systemd-resolved.service
systemctl enable systemd-resolved.service

更多 wsl.conf 配置项参考:https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config#configuration-settings-for-wslconf

修复ping不通和DNS无法解析等的问题

从 WSL2 开始,新增了 .wslconfig 配置文件,默认没有生成这个文件,需要手工创建到 %UserProfile% 目录下。

例如 C:\Users\<UserName>\.wslconfig

编辑 .wslconfig 文件,添加以下行:

[wsl2]
networkingMode=bridged # 桥接模式
vmSwitch=PublicNetwork # 你想使用的虚拟交换机
ipv6=true # 启用 IPv6

如果没有 ipv6,可以设置为false,或将该配置项移除掉。

如果不知道 vmSwitch 的值应该如何填,以管理员身份运行 powershell,并且执行以下命令:

❯ Get-VMSwitch
Name                   SwitchType NetAdapterInterfaceDescription
----                   ---------- ------------------------------
Default Switch         Internal
WSL (Hyper-V firewall) Internal
PublicNetwork          External   Realtek Gaming 2.5GbE Family Controller

如果仅需要列出使用了 外部网络 的虚拟交换机,可以增加命令参数:-SwitchType External

❯ Get-VMSwitch -SwitchType External
Name          SwitchType NetAdapterInterfaceDescription
----          ---------- ------------------------------
PublicNetwork External   Realtek Gaming 2.5GbE Family Controller

保存后,执行以下命令,重启 WSL 实例以使这些更改生效。

C:\Users\Administrator> wsl --shutdown

更多 .wslconfig 配置项参考:https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config#main-wsl-settings

本文先后参考了以下文章: