编辑
我设法找出了我所缺少的东西,这清楚地表明了如何解决我的问题。事实证明,在 16.04 和 18.04 之间,Ubuntu 和衍生产品从基于 dnsmasq 的东西默认切换到基于 systemd-resolved 的东西,并且 systemd-resolved 比 dnsmasq 更不愿意承受/etc/hosts
.
下面是我试图描述的原始问题,我只是在编辑页面上添加这个关于这里有答案的问题,因为我认为我应该修复标签以更好地反映结果相关组件。
原帖
所以,我最近从 xenial (16.04) 转移到了仿生 (18.04),并且我在解决至少我认为有解决方案的问题方面取得了很大的成功。我想我要归结为最后一件事,这不是我希望的那样,我希望有一个解决办法。
在 16.04 中,我曾经有一个很长的主机文件,甚至无法加载已知的恶意站点。它对我来说效果很好,如果有任何问题,我可以检查相关域是否存在,检查它是如何到达那里的,并自行决定是否将其取消列入黑名单。
我试图从带有 16.04 的旧驱动器中迁移我的主机文件,但突然之间什么都加载不出来,所以我不得不恢复。在比较了一下之后,我发现了一个微小的差异(我的新主机文件包括我的计算机主机名的两个版本,一个以“.lan”结尾)并尝试纠正它以查看它是否可以解决问题。没有骰子。
我可以将项目添加到列表中,如果我复制我的域候选列表,我只是不想加载那些被阻止的好,但是当我添加曾经工作的大量列表时,它似乎使 DNS 永远占用并且永远不会解决任何问题. 这是我几天前以同样方式添加的主机列表。
我最好的想法是从哪里开始尝试进一步研究 xenial 和 bionic 之间的网络发生的任何变化(我不得不重新控制我的现代 eth0 名称,因为一些新的东西试图自动-管理它),但我什至花了一些时间才找到成功让我重新控制有线网络的指南,老实说,我什至不确定更改的整个范围是什么。
有没有其他人使用主机文件来阻止一堆域并碰巧知道这里发生了什么?是否有一些设置更改了默认设置并影响主机文件解析,我需要将其设置为旧设置或其他什么?我会对文件本身更加怀疑,但它在 xenial 下工作得很好,这让我相当确定仿生的变化是相关的,而不仅仅是主机文件本身是错误的(或者如果是,它是错误的一种在历史上一直有效的方式,我一直在使用相同的来源)。
好的,在提出问题之前我可能应该考虑这样做,但我意识到当我尝试使用
/etc/hosts
我想要的完整文件时,我应该注意我的进程,而名称没有解析。结果
systemd-resolve
只是在没有解决任何问题的情况下占用我的 CPU,所以我对此进行了调查。这导致我访问了几个站点,然后我又看到了另一个 Ask Ubuntu 帖子,其中一个名为sena的用户发布了一个答案,帮助我解决了这个问题(是的,我知道我在那里做了什么)。事实证明,2016 年至 2018 年间 Ubuntu 发生的主要变化之一是从使用 dnsmasq 处理系统上的 DNS 内容转变为使用 systemd-resolve(systemd-resolved?)。现在,对于一个不喜欢 futz 的普通用户来说
/etc/hosts
,这已经足够了。问题是 systemd 使用了一种相当慢的解析方法
/etc/hosts
。这显然与应该如何让本地 DNS 服务器进行我正在做的那种过滤而不是每台机器进行过滤有关,所以期望主机文件只有十几行左右,而不是我正在使用 700,000 条线。虽然我完全可以理解这里的基本原理,如果我只使用台式机,我可能会在使用这种方法时遇到麻烦,但我的笔记本电脑是便携式的,可以随身携带,因此仅限家庭使用的过滤器对我来说用处不大比我想要的。因此,我需要一个更好的修复。该链接中的答案摘要(回答的人复制了信息对我非常有帮助,因为当我向下滚动找到它时,我处于中间 DNS 不工作状态)如下(感谢sena修复了我的笔记本电脑的 DNS 的东西):
在我的系统上执行此操作似乎已经(并且我已经重新启动,所以它现在似乎仍然存在)将在本地完成的所有 DNS 内容迁移回dnsmasq,这似乎完全没有遇到数十万个条目的困难在
/etc/hosts
我外出时将已知的不良域列入黑名单,并且不能依靠我的家庭 DNS 解决方案来保护我。(我不知道以降价格式记入某人的“正确”方式,但我想再次指出,我发现这似乎是由sena发布的,谁提出了这个解决方案,我值得称赞成立。)