最近在使用的 wsl2 的时候突然发现 wsl2 无法正常联网,即 ping 不通外网以及宿主机的 wsl 网卡。但是将 wsl 版本设置为 1 就可以联网了。

如果你是正常使用的时候,并且自己没有手动修改过 主机 和 WSL2 的网络配置,然后就忽然发现 WSL2 不能正常访问网络了,这个时候你重启一下 WSL2 大概率就可以工作了。

# 重启 WSL 指令
$ wsl --shutdown
# 之后就重新启动进入即可
$ wsl

如果还不行就参考下面的过程一个个的排查吧。我会尽可能的把各种情况复现然后拿出来讲。

小提示:
以下内容对计算机网络知识要有了解,需要你对网关(gateway)、子网、路由、防火墙等概念有了解并会进行一些简单的计算和配置。

WSL2 和 WSL1 的网络的区别

在讲解问题之前先来了解一下 WSL2 和 WSL1 在网络上的不同,WSL1 是共享宿主机的网络栈,即 WSL1 共享主机 IP,并没有自己独立的逻辑网卡,也即没有自己独享的 IP 地址。类似于 Docker 网络的 host 模式。

图 1 wsl1 与 宿主机网络关系

如上图,两者在与外部通信的均使用的是 192.168.1.10。下图是一张 wsl1 和 宿主机的网络接口状态。

图 2 wsl1 与 宿主机网络地址对比

然 wsl2 则可以理解为宿主机完整虚拟出来的一个完整的 Linux 虚拟机,拥有自己的逻辑上独立的网卡,也即拥有属于自己的独立网络栈。与 VMware 的 bridge 模式和 docker 的 macvlan 模式类似。

图 3 wsl2 与 宿主机的网络拓扑图

上图描述了两者在逻辑上的关系,从上图就可以看到 WSL2 要与外界进行通信,就必须保证 WSL2 能正常访问宿主机( 所以这里就存在宿主机的防火墙拦截问题 ),因为宿主机是其与外部进行通信的桥梁。要保证 WSL2 与宿主机的通信正常就要确认两者的IP地址是否在同一个网段, 其次 WSL2 的默认路由必须是宿主机在同一网段的地址(172.25.32.1/20) 。

关于 wsl1 和 wsl2 的详细对比差异可以参考: Comparing WSL 1 and WSL 2

排查过程

经过排查发现,我主要是以下三方面的原因。

下面的图均为为模拟还原截图

1)宿主机的 WSL 网卡 和 wsl2 的外部通信的网卡 eth0 网络配置信息不一致

查看 宿主机 和 wsl2 的网络状态


通过 IP 与子网掩码的计算,可以知道知道两者的明显不在一个子网。所以第一步需要通过配置让两者在同一个子网,这里选择改动 WSL2。

有些没学过计算机网络的小伙伴可能不知道如何使用 ip 和 netmask 计算,这个也不复杂,不懂的自行搜索学习吧。(可以参考: 维基百科“子网”)

$ sudo ifconfig eth0 172.25.46.6 netmask 255.255.240.0

可以看到 WSL2 不能访问宿主机,但是宿主机可以访问 WSL2。所以很可能就是宿主机的防火墙拦截了 WSL2 对宿主机的访问。还有一种情况就是防火墙规则里面默认禁用了 ICMP 的应答(ping 的实现就是基于 ICMP 协议)。

小提示:
禁用 ICMP 的应答是一种最简单也是最常见的隐藏网络主机的方式。对于桌面版的 Windows 通常默认是没有禁用的,但是你如果安装了“XX安全管家、XX安全卫士”加固过电脑的话,大概率就会将 ICMP 的回显给禁用掉。
对于操作系统的 防火墙 通常都会对入网方向进行严格的限制,即禁止外部主机随便的访问我提供的服务。所以当出现外部主机无法访问本机提供的对外服务的时候就要考虑是不是主机的防火墙限制了访问。

2)宿主机的网络防火墙拦截了 wsl2 的数据流量

首先暴力关闭 window10 的防火墙,然后再次 ping 宿主机。



所以可以确定就是宿主机防火墙拦截了宿主机的 ICMP 的回显,为了方便 WSL2 与宿主机进行无障碍沟通,我们可以禁用防火墙,但是很显然这样宿主机就完全暴露在公网之上,安全性无疑就大大折扣,所以最佳的做法就是我们添加一条入站规则: 仅允许 WSL2 所在的网段主机对宿主机进行无障碍访问 。

上图涉及到子网的计算,不会的小伙伴自己补课,或者使用一些在线的 “ 网络和IP地址计算器”

来计算。

到这里就创建好了,我们只需启用规则然后就可以无障碍的访问宿主机了。

可以看到此时宿主机已经可以被 PING 通。此时 主机提供的 任何对外的网络服务 WSL2 均可以访问。[ 因为我们只是对网络地址做了限制,并没有限制协议、端口等 ]

上面只是列出了 WSL2 ping 不通 宿主机,但是宿主机 ping 的通 WSL2,反之则可能是 WSL2 开了防火墙,自己可以根据使用的具体 Linux 参考上面的配置思路自己解决。
当然极端情况下 WSL2 和 宿主机都开启了防火墙(并禁止了 ICMP 回显),那么就会出现均无法ping通的情况。

3)WSL2 路由配置不正确

宿主机 与 WSL2 能够互通并不代表 WSL2 可以正常的访问互联网、当 WSL2 的默认路由缺失、或者不正确的时候,WSL2 也不能访问互联网。

额外话题(WSL2 DNS 的配置)

在使用 WSL2 进行软件更新的时候经常超级慢(已更换了国内源的前提下),经过一番排查发现是 DNS 的问题,当使用自定义的 DNS 时,域名解析的速度明显快了很多。

不过 WSL2 的默认域名解析服务和普通的 Linux 略微有不同,下面解释一下:

熟悉 Linux 的都知道 DNS 服务器的配置信息是在 /etc/resolv.conf 文件中,默认情况下,微软在每次启动 WSL2 都会重新根据宿主机 WSL 网卡的地址(例如:172.25.32.1)为 wsl2 实例生成这个文件,且指定 DNS 服务器的地址为宿主机 WSL 网卡的地址(例如:172.25.32.1)。

所以要想使用自己指定的 DNS 服务,来加快解析,就需要先禁用掉自动生成策略,仔细读上图会发现,官方已经给出了禁用自动生成方法。

即创建 /etc/wsl.conf,且内容如下:

[network]
generateResolvConf = false

然后删掉 /etc/resolv.conf(因为自动生成的为一个软连接),并重新建一个 /etc/resolv.conf 文本文件,并将其 DNS 服务器地址指定为自己想用的,如下图:

之后重启 WSL ,然后可以通过 nslookup 测试域名解析,会发现明显比默认的 WSL 网关快得多。

WSL2 网络异常排查 [ping 不通、网络地址异常、缺少默认路由、被宿主机防火墙拦截]相关推荐

  1. 【LAB2-Cisco】网络数据通信过程——ping不通如何排查

    拓扑准备: 设备接口配置IP地址 PCA(config)#int f0/0 PCA(config-if)#ip add 172.18.96.100 255.255.255.0 查看IP地址是否配置正确 ...

  2. CentOS 网络配置之ping不通

    1. 配置ip 1.1 修改配置文件ifcfg-ens33 > vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE="Ethernet ...

  3. # hadoop/Linux环境准备和搭建(在Windows11下)——创建虚拟机中ping后网络不可达ping不通的处理方法

    文章目录 介绍 一.软件准备 二.操作步骤 1.新建虚拟机 2.安装系统(CentOS 7) 3.VMware的网络编辑 4.修改 windows 的主机映射文件(hosts 文件) 5. 结果显示 ...

  4. linux使用running网卡ping,Linux CentOS 7 IP地址配置及网络问题排查

    一.Linux CentOS 7 IP地址配置 输入命令"ifconfig" 查看本机IP地址.[[email protected] ~]# ifconfig ens33: fla ...

  5. keepalived vip ping不通_【干货分享】OpenStack LVS负载均衡为什么不通?

    背 景 介 绍 OpenStack环境Neutron 的安全组会向虚拟机默认添加 anti-spoof 的规则,将保证虚拟机只能发出/接收以本机Port为原地址或目的地址(IP.MAC)的流量,提高了 ...

  6. 局域网内Ping不通

    局域网ping不通, 原来不可忽视这步......... 通常,经常在局域网里面,为了检测网络是否顺畅,都会ping一下IP,如果网络正常,就可以上网或者远程处理其他故障.但是会出现ping别人的主机 ...

  7. 主机与虚拟机桥接出现ping不通解决方案

    背景:新安的系统安装虚拟机桥接是没有问题的,但是过了段时间才会出现ping不同 第一种方法 一般出现情况是主机ping不通虚拟机,但是虚拟机可以ping通主机 网上说关闭宿主机防火墙即可,这个偶尔会解 ...

  8. 【linux】配置网口IP|RDMA配置IP|ens、eno、enp网口的区别|ping不通问题排查|DNS设置

    目录 linux网口配置IP 1.查看接口信息 2.配置IP 3.重启网络服务确认ip配置结果 一个网卡配置多个IP Centos配置DNS 配置RDMA网卡 查看哪个网口连线方法 ens.eno.e ...

  9. 同一路由器下两台电脑ping不通_复杂网络环境下路由器配置问题导致业务故障处理案例分享...

    导语 网络中的互联设备趋于复杂化,不同的网络环境引用了不同的网络技术,在发生网络变更后会出现一些比较奇怪的网络问题.本次简单分享一个单位网络搬迁后出现对外应用服务器业务无法访问的案例,通过一切外部表象 ...

  10. SQLServer镜像状态异常排查

    title: SQLServer · CASE分析 · 镜像状态异常排查 author: 天铭 问题 用户实例的某个DB一直处于Synchronizing无法达到SYNCHRONIZED状态,用了很多 ...

最新文章

  1. HDU5762(暴力)
  2. I2C原理及特性总结
  3. 第二次结对编程作业——毕设导师智能匹配
  4. axios 配置loading_用Axios Element 实现全局的请求 loading
  5. python获取本地时间并向服务器发送udp报文_python3通过udp实现组播数据的发送和接收操作...
  6. 拆分SharePoint 2013 中CreatedModifiedInfo 的时间
  7. 二维码编解码 Java调用示例代码
  8. 新浪微博开放平台站内应用开发流程直播(四)
  9. Atitit 深入理解软件的本质 attilax总结 软件三原则三次原则是DRY原则和YAGNI原则的折
  10. BZOJ 1934 善意的投票
  11. 百度地图开发(安卓)
  12. 快速复制论文中的公式
  13. 互联网大数据与物联网大数据的区别 你有必要了解下
  14. 双向链表DoublyLinkedList类
  15. window10 几款好用的屏幕录制制作动图工具
  16. C语言代码实现卡塔尔世界杯球员管理系统
  17. 物联网LoRa系列-13:无线电磁波概述以及核心概念的澄清(速度、频率、周期、波长、幅度、功率、相位、干涉)
  18. SQL 里ESCAPE的用法
  19. 4、Javaweb_JavaScript DOM BOM 事件
  20. 使用lterator遍历set、list

热门文章

  1. 维基百科中文语料建模
  2. Android 3D 旋转
  3. 产业升级再加码 鼎捷软件助力宜兴打造智造新名片
  4. 速卖通热卖产品推荐—2021年速卖通家居行业厨房用品热卖产品趋势
  5. 中国家电市场深度调查研究报告
  6. mysql:Prepared statement needs to be re-prepared解决办法
  7. STM32F103C8T6开发环境的搭建
  8. Knowledge 7一阶谓词逻辑-Generalized Modus Ponens规则
  9. 18-HTML标签的居中
  10. 怎样将Sublime Text 设置成中文版(完整教程)