多年来,我一直使用 Ubuntu(目前为 18.10)在域上开发 PHP 应用程序,例如foo.bar.localhost
用于本地测试。这些域被解析为 127.0.0.1 并由 Apache 2.4 处理。这始终有效。这条线一直都127.0.0.1 localhost
在我这里,/etc/hosts
就像往常一样。
今天早上我打开设备,发现它不再起作用了。ping localhost
仍在工作,但ping foo.bar.localhost
现在不行了(昨天还在工作)。令人惊讶的是,Chromium 仍在解析foo.bar.localhost
,我猜它没有使用操作系统进行 DNS 解析。但我主要使用 Firefox,它也停止解析 localhost 子域。
我昨天没有更改任何与系统相关的设置,但我记得昨天有一些软件包更新,所以我假设一些与网络相关的内容发生了一些变化。有没有办法列出dpgk
安装/更新日期,以便我可以找到更新的确切软件包?
我可以检查哪些设置来使子域名解析在整个系统范围内再次起作用?是否有任何已知错误?
附加信息:在/var/log/dpkg.log
我发现了一个upgrade resolvconf:all 1.79ubuntu10 1.79ubuntu10.18.10.1
听起来相关的最新条目。此行和随后的行是唯一包含术语“resolv”的行(使用 找到cat /var/log/dpkg.log | grep resolv
)。因此,在过去的几个小时里,这个与 DNS 相关的包已更新。
另一个信息:手册中man systemd-resolved
有以下一行:
主机名“localhost”和“localhost.localdomain”(以及以“.localhost”或“.localhost.localdomain”结尾的任何主机名)解析为 IP 地址 127.0.0.1 和 ::1。
所以这种定义明确的行为不再起作用。我也可以不是我记得自己更改过与这个低级 DNS 内容相关的任何内容。
执行时的确切信息ping foo.bar.localhost
是
ping: foo.bar.localhost: Name or service not known
显然,新版本 resolvconf 中唯一“修复”的错误是这个: https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1817903 这与本地解析有关。
答案1
问题resolveconf
在于根本没有安装systemd-resolved
。我使用 root 权限将其删除apt-get purge resolvconf
。然后一切又恢复正常。
我认为同时安装这两个程序是 Ubuntu 发行版之间某个先前主要版本更新遗留的问题,因此引发了这种奇怪的行为。