从 16.04 升级到 18.04 后没有互联网

Zol*_*üle 40 networking dns tethering 18.04

升级后,我注意到我无法访问互联网。有线网络和 wifi 设置看起来不错,但它不起作用。登录后,系统总是自动切换到飞行模式。我用我的手机通过 USB 和蓝牙连接网络,但它们也不起作用。

Zol*_*üle 40

更新 2:错误报告被拒绝,因为我无法在已经升级的系统上重现它并且无法为开发人员提供数据。

更新 1:我报告了启动板上的错误。有参与的可以订阅:https : //bugs.launchpad.net/ubuntu/+bug/1816530

解决方案的起源

如果/etc/resolv.conf为空但您可以ping 8.8.8.8

$ echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
Run Code Online (Sandbox Code Playgroud)

如果/etc/resolvconf/resolv.conf.d/head为空,则必须在每次重新启动后重复上述命令,除非您这样做:

$ echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolvconf/resolv.conf.d/head > /dev/null
Run Code Online (Sandbox Code Playgroud)

然后你必须重新启动resolvconf和网络

$ sudo systemctl enable resolvconf
$ sudo systemctl start resolvconf
$ sudo /etc/init.d/networking restart
Run Code Online (Sandbox Code Playgroud)

  • 在`/etc/resolv.conf` 中添加名称服务器并通过`sudo /etc/init.d/networking restart` 重新启动,效果很神奇!非常感谢!! (5认同)
  • 是否在`/etc/resolv.conf` 文件中设置了名称服务器?如果没有添加 `nameserver 8.8.8.8` 到这个文件 (2认同)
  • @sudodus @EftychiaThomaidou:你也必须将它添加到`/etc/resolvconf/resolv.conf.d/head`。否则你必须在每次重启后重复编辑 `/etc/resolv.conf` 文件。 (2认同)

Pau*_*sen 11

我同意这里的其他一些人的看法,即所选答案可能不是解决问题的最佳方法:

当文件开头有注释时

"DO NOT EDIT THIS FILE"
Run Code Online (Sandbox Code Playgroud)

那么可能有一个很好的理由,好吧,...不编辑该文件!;-)

这就是原因,以及对更好(恕我直言)解决方案的建议:

一种。/etc/resolv.conf您修改的文件将在启动时被覆盖,因此您的修改不会“保留”。

最初在那里(在您修改它之前)的 IP 地址 (127.0.0.53) 实际上是 DNS 存根解析器的地址。在那!你可以ping通!它在您的机器上本地运行。什么是存根解析器?它接受您的 DNS 查询并在其缓存中查找解析!如果找不到,它将联系真正的 DNS 服务器(然后缓存结果)。因此,如果您覆盖存根解析器的地址,您将错过存根解析器的这个重要缓存功能!

Ubuntu 18.04 中这种新的解析器方法的问题在于从未设置过“真实”的 DNS 服务器地址。因此,如果存根解析器在其缓存中没有找到您请求的域,它就不知道要查询哪个 DNS 服务器。(因此您基于域名的互联网访问不再有效)。因此,您所要做的就是配置此存根解析器必须使用的“真实”DNS 服务器。你通过编辑来做到这一点(sudo!)/etc/systemd/resolved.conf

只需添加类似的东西

DNS=8.8.8.8
Run Code Online (Sandbox Code Playgroud)

到那个文件。

然后重新启动网络,或者更确切地说,重新启动,这样您就可以验证您现在是否拥有一个在重新启动后持续存在的解决方案。

(我还没有弄清楚,为什么 DHCP 没有正确设置正确的 DNS 服务器!)

  • 我添加了“DNS=8.8.8.8 8.8.4.4 4.2.2.2”然后运行“systemctl restart systemd-resolved”并且它起作用了。 (3认同)

小智 6

接受的答案确实解决了我的问题。但是,正如其他人所说,这只是在您重新启动之前,我每天都在使用我的机器。每次启动系统时在终端中键入 5 到 6 行并不是我觉得有趣的事情。

在互联网上挖掘后,我找到了永久解决问题的解决方案。之后我重新启动了 3 次,只是为了确定,互联网连接在那里,我不需要做任何事情。

解决方案:

启动终端并输入:

$ ifconfig
Run Code Online (Sandbox Code Playgroud)

现在您必须弄清楚哪个是您的以太网接口。我的被​​列为eth1。下一个类型:

$sudo gedit /etc/network/interfaces
Run Code Online (Sandbox Code Playgroud)

我的文件只有:

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
Run Code Online (Sandbox Code Playgroud)

现在您需要做的是之后添加以下几行:

auto eth1
iface eth1 inet dhcp
Run Code Online (Sandbox Code Playgroud)

最后,$ sudo ifup eth1重启,你就大功告成了。不要忘记更改eth1以太网接口的名称。

原答案


Ng *_*ong 5

tl;博士

首先,编辑这个文件

sudo vim /etc/resolvconf/resolv.conf.d/base
Run Code Online (Sandbox Code Playgroud)

二、添加以下内容

nameserver 8.8.8.8
nameserver 8.8.4.4
Run Code Online (Sandbox Code Playgroud)

之后,重新启动Ubuntu,现在应该可以上网了。


解释

列出的一些解决方案有效,但一旦重新启动 Ubuntu(在我的情况下,VM)就会失败,

上面的解决方案是一个 tl;dr 形成这个解决方案(https://unix.stackexchange.com/a/128223/243480)并且它完美地工作

  • 对于我的 ubuntu,它确实有 /base,而 resolv.conf.d 是一个目录 (2认同)
  • 这个对我有用! (2认同)