WSL2下的Ubuntu无法访问互联网。

27

我之前在WSL1下使用Ubuntu工作良好并连接到互联网。

仅通过升级到wsl2,我无法从Bash中ping通google.com。

但是如果我降级到wsl1,则可以ping通。

这里是问题所在:[WSL2] No network · Issue #4731 · microsoft/WSL


我尝试了这个方法,但它不起作用。

步骤1:以管理员身份打开Hyper-V管理器

enter image description here

步骤2:选择操作中的虚拟交换机管理器

enter image description here

步骤3:选择WSL

enter image description here

步骤4:选择外部网络;选择一个适配器并连接到互联网

enter image description here


我的Windows ipconfig以太网适配器vEthernet(WSL):

Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::30a4:2612:6ee3:2390%142
   IPv4 Address. . . . . . . . . . . : 192.168.0.103
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.0.1

从Ubuntu ping 192.168.0.103:

xxxxxxxxx@xxxxxxxxxxx:~$ ping 192.168.0.103
PING 192.168.0.103 (192.168.0.103) 56(84) bytes of data.
From 172.22.131.55 icmp_seq=1 Destination Host Unreachable
From 172.22.131.55 icmp_seq=2 Destination Host Unreachable

Ubuntu 中的 ip route 命令:

xxxxxxxxx@xxxxxxxxxxx:~$ ip route
default via 172.22.128.1 dev eth0 
172.22.128.0/20 dev eth0  proto kernel  scope link  src 172.22.131.55

在Ubuntu上尝试了sudo ip route add default via 192.168.0.103

xxxxxxxxx@xxxxxxxxxx:~$ sudo ip route add default via 192.168.0.103
RTNETLINK answers: Network is unreachable

应选择“内部网络”。 - Konstantin Glukhov
@user1602 谢谢,我已经尝试了所有的方法,幸运的是我有 Hyper-V 的背景,所以我详细了解这些选项的作用。我的观察是,这不是 Hyper-V 或 Ubuntu 的问题,而是在它们之间自动化集成方面存在问题。我已经回滚到 v1 已经快一年了,下一个主要的 Windows 更新时我会再次尝试。 - Mohamed Elrashid
可能是 https://dev59.com/xFIG5IYBdhLWcg3w6mJ8 的重复问题。 - nsof
8个回答

16

我遇到了类似的问题。我已经尝试了其 Github 存储库问题部分提到的大多数解决方法,但是没有一个可以永久地为我解决问题。

为了暂时获得访问权限,我创建了一个看起来对我有效的函数。

net_activate() {
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
}

我将其保存在 .bashrc 文件中。每次需要连接时,我都运行这个命令。

昨天,我对此问题感到有些沮丧,尝试了许多方法,现在一切都正常,不再需要调用那个函数了。

所以,以下是我按顺序完成的操作:

  • 卸载了所有的 VPN,并手动删除其适配器。
  • 从设备管理器中删除了所有网络适配器(不仅仅是 VPN,而是所有列出的适配器,包括隐藏的适配器)。
  • 运行 CCleaner 并使用选择了每个复选框的自定义清理。
  • 进行了网络重置(只需按“Win + S”键,然后输入“network reset”即可)。

重新启动计算机后,WSL2 中的互联网完全正常工作。


1
谢谢!我的问题是有时WSL2会失去连接,我不得不重新启动才能再次工作。这个方法非常有效 :) - NewK
这是一个很好的临时解决方案,直到 Microsoft 解决了这个问题。 - Jonathan E. Landrum
1
你可以编辑文件 /etc/resolv.confsudo vi /etc/resolv.conf)并将 nameserver 值更改为固定的 DNS,例如 nameserver 8.8.8.8,无需将其添加到 bashrc。 - Ritesh
1
@Ritesh,你需要一遍又一遍地做这件事情,因此需要使用函数。 - sgalpha01
echo -e "[network]\ngenerateResolvConf = false" | sudo tee -a /etc/wsl.confsudo unlink /etc/resolv.conf 可能有助于使修复更加永久(请参见Jonathan Bowman的“网络问题?”部分)。 - Carambakaracho

13

我尝试了其他很多建议,但只有以下方法对我有效(进行了网络重置,并重新启动了Windows 11):

github.com/microsoft/WSL/issues/4275#issuecomment-846553905

wsl --shutdown
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
netsh winsock reset
shutdown /r 

2
对我来说起作用了。(WSL2,Windows 10) - arif08
1
我也试过了,谢谢啦:* - undefined

5

这只是一个临时的解决方案,而不是永久性的解决方案。

在Ubuntu中我需要:

  • 为网络适配器添加手动IP分配
  • 我的路由器动态IP范围为100-200
  • 我的IP地址是192.168.0.103/255.255.255.0
  • 我的IP地址是192.168.0.103/24

注意,在wsl超级-v网络虚拟开关中启用外部网络(请参见问题中的步骤1至4)

bash命令:


sudo ip a flush dev eth0
sudo ip a add 192.168.0.5/24 dev eth0
sudo ip r add default via 192.168.0.1

这些命令需要在每次虚拟机重启时重复执行(或编写脚本)

##参考:

输入图像描述

注意:关于WSL网络问题已经有14个问题未解决,因此我不建议在2020年6月17日之前启用它(等问题关闭后再尝试)


在主机操作系统中共享互联网连接也可以正常工作。我有一个虚拟适配器,在 Hyper-V 中无法设置为外部模式。使用 ICS 可以解决这个问题。 - Yvon
这对我有用(进行网络重置并重新启动 Windows 11):https://github.com/microsoft/WSL/issues/4275#issuecomment-846553905 - Sean McCarthy

1

1

这里参考了12月19日@shortski在屏幕上方发布的帖子...CC清理工具第一次尝试就成功了! 我只勾选了几个复选框。 唯一一个我认为可能会产生影响的是:

  • 系统:DNS缓存

无论如何,这是我使用的单次尝试CC清理列表:

系统: 除以下所有内容外:

  • Windows错误报告
  • 开始菜单快捷方式
  • 桌面快捷方式

高级:

  • 环境路径
  • 自定义文件和文件夹

就这样。 祝您使用sudo apt update愉快!


1
我遇到了同样的问题,在将WSL(运行Ubuntu 20.04)转换为版本2时失去了互联网访问。恢复为版本1后立即恢复了互联网访问。来回转换会一直切换互联网连接。WSL外部的互联网访问一直都很好。
尝试修复Ubuntu安装程序无法解决问题。调整网络接口设置或重新启动电脑也无济于事。
然后我按照@sgalpha01的建议运行了CCleaner,这解决了问题:
- 使用所有框(约100个)选中的自定义清理,除了以下几个比较影响/耗时的选项: - Windows Explorer / 网络密码 - 系统 / 开始菜单快捷方式 - 系统 / 桌面快捷方式 - 高级 / 清除空闲空间 - Google Chrome / 已保存密码 - 注册表清理 - 删除一些过时和不相关的程序。
之后,WSL中的互联网访问得以恢复,无需重新启动电脑。
感谢@sgalpha01!对于任何尝试此修复方法的人:由于似乎不需要重新启动即可恢复互联网,您可以尝试使用更有选择性的设置进行自定义清理,直到互联网(希望如此)恢复。

0
简单可行的步骤是修改 c:\users\%USERPROFILE%\.wslconfig 文件为:
[wsl2]
memory=8GB
**swapFile=0**
swap=0

由于某些原因,微软的某个人员更改了交换配置参数的名称。奇怪的是,当定义swapfile时,网络工作正常。

微软:请将swapfile与网络分离,并考虑支持两个名称的交换。


1
swapswapFile 仍然是有效的配置设置:https://github.com/MicrosoftDocs/wsl/blob/master/WSL/wsl-config.md#options-for-wslconfig - Lee Harrison
1
我已经有很长一段时间使用swap=0了,但仍然无法连接互联网。 - Sean McCarthy

-1
我找到了一个永久性的解决方案:
1- 在 Hyper-V 下,将“wsl”虚拟交换机设置为“桥接”。
2- 在“控制面板\网络和 Internet\网络连接”下,将“wsl”网络接口设置为“DHCP”和自动 DNS。
此链接提供一般指导,但不特定于 WSL:按照以下步骤进行操作:https://www.veeam.com/blog/how-to-configure-hyper-v-virtual-switch.html

2
你所说的“bridge”是什么意思?我有三个选项,外部网络、内部网络或私有网络。 - Fenris_uy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接