AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1170330
Accepted
Turnip Wizard
Turnip Wizard
Asked: 2019-09-03 09:03:46 +0800 CST2019-09-03 09:03:46 +0800 CST 2019-09-03 09:03:46 +0800 CST

在 18.04 中将主机添加到主机文件会破坏 DNS,但在 16.04 中不会

  • 772

编辑

我设法找出了我所缺少的东西,这清楚地表明了如何解决我的问题。事实证明,在 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 下工作得很好,这让我相当确定仿生的变化是相关的,而不仅仅是主机文件本身是错误的(或者如果是,它是错误的一种在历史上一直有效的方式,我一直在使用相同的来源)。

dns hosts dnsmasq systemd-resolved 18.04
  • 1 1 个回答
  • 1231 Views

1 个回答

  • Voted
  1. Best Answer
    Turnip Wizard
    2019-09-05T10:10:10+08:002019-09-05T10:10:10+08:00

    好的,在提出问题之前我可能应该考虑这样做,但我意识到当我尝试使用/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 的东西):

    这是 (X)Ubuntu 18.04 Bionic 的解决方案。

    安装 dnsmasq

    sudo apt install dnsmasq
    

    在端口 53 上禁用 systemd-resolved 侦听器(不要触摸 /etc/systemd/resolved.conf,因为它可能会在升级时被覆盖):

    $ cat /etc/systemd/resolved.conf.d/noresolved.conf 
    [Resolve]
    DNSStubListener=no
    

    并重新启动它

    $ sudo systemctl restart systemd-resolved
    

    (或者完全禁用它$ sudo systemctl disable systemd-resolved.service )

    删除 /etc/resolv.conf 并重新创建。这很重要,因为默认情况下 resolv.conf 是指向 /run/systemd/resolve/stub-resolv.conf 的符号链接。如果您不删除符号链接,该文件将在重新启动时被 systemd 覆盖(即使我们禁用了 systemd-resolved!)。NetworkManager (NM) 还检查它是否是检测 systemd 解析配置的符号链接。

    $ sudo rm /etc/resolv.conf
    $ sudo touch /etc/resolv.conf
    

    禁用 NM 对 /etc/resolv.conf 的覆盖(还有一个选项 rc-manager,但它不起作用,尽管在 NM 手册中有描述):

    $ cat /etc/NetworkManager/conf.d/disableresolv.conf 
    [main]
    dns=none
    

    并重新启动它:

    $ sudo systemctl restart NetworkManager
    

    告诉 dnsmasq 使用来自 NM 的 resolv.conf:

    $ cat /etc/dnsmasq.d/nmresolv.conf 
    resolv-file=/var/run/NetworkManager/resolv.conf
    

    并重新启动它:

    $ sudo systemctl restart dnsmasq
    

    使用 dnsmasq 解决:

    $ cat /etc/resolv.conf 
    # Use local dnsmasq for resolving
    nameserver 127.0.0.1
    

    在我的系统上执行此操作似乎已经(并且我已经重新启动,所以它现在似乎仍然存在)将在本地完成的所有 DNS 内容迁移回dnsmasq,这似乎完全没有遇到数十万个条目的困难在/etc/hosts我外出时将已知的不良域列入黑名单,并且不能依靠我的家庭 DNS 解决方案来保护我。

    (我不知道以降价格式记入某人的“正确”方式,但我想再次指出,我发现这似乎是由sena发布的,谁提出了这个解决方案,我值得称赞成立。)

    • 1

相关问题

  • 将服务器从 DHCP 切换到静态 IP

  • “.local”有什么作用?

  • 如何在学校网络上配置域名[关闭]

  • 更改DNS IP的正确方法是什么?

  • 如何清除 DNS 缓存?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve