尝试解决方案

尝试解决方案

我正在尝试更改我的 Ubuntu 机器(只是我的笔记本电脑,而不是服务器)正在使用的名称服务器。

在我使用 Slackware 的美好时光里,我只需要编辑/etc/resolv.conf,我的工作就完成了。

弄清楚之后,我/etc/resolv.conf实际上是这样编辑的:resolvconf/etc/resolvconf/resolv.conf.d/head

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
nameserver 8.8.4.4

但我的工作还没有完成。我发现仍然添加了一行不需要的行/etc/resolv.conf

nameserver 127.0.1.1

我不喜欢这样,因为我希望在尝试 Google 的名称服务器后名称解析就失败。这行不在任何文件中,/etc/resolvconf/resolv.conf.d/我的困惑就从这里开始。sudo netstat -ltnp我看到我的笔记本电脑上运行着一个名称服务器守护进程:

tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      4889/dnsmasq    

我为什么需要它?我无法删除包含dnsmasq(即dnsmasq-base)的包,因为这些包依赖于它:

  checkbox-gui checkbox-qt dnsmasq-base network-manager network-manager-gnome plainbox-provider-checkbox plainbox-provider-resource-generic ubuntu-desktop

在端口 53 上运行的这项服务对于我的机器的正常运行真的有必要吗?如何在不使用 GUI 工具且不影响 NetworkManager 的情况下阻止它运行?

尝试解决方案

尝试/etc/NetworkManager/NetworkManager.conf通过注释引用以下内容的行来更改并重新启动 NetworkManagerdnsmasq

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq

[ifupdown]
managed=false

上述不需要的行resolv.conf确实消失了。但不幸的是,它似乎被替换为以下行:

nameserver 192.168.0.1

如果能对这种行为的含义和目的进行一些阐明就好了。

临时解决方法是删除链接/etc/resolv.conf -> ../run/resolvconf/resolv.conf/etc/resolv.conf从头开始创建一个新文件。这在某种程度上会起作用。它不会添加search来自 DHCP 的其他有用名称信息(例如指令)。因此,仍然需要找到允许resolv.conf由 NetworkManager 生成的最终解决方案。resolvconf

答案1

阐述了引入 dnsmasq 作为本地 DNS 中继的理由这里在 Stéphane Graber 的一篇博客文章中。

列举主要原因:

这样做是为了更好地支持 VPN 用户的拆分 DNS,并更好地处理 DNS 故障和回退。出于安全原因,此 dnsmasq 服务器不是缓存服务器,以避免与本地缓存中毒和用户在多用户系统上窃听其他 DNS 查询相关的风险。

最大的优势在于,如果您连接到 VPN,您不必像过去那样将所有 DNS 流量都路由到 VPN,而是只需发送与该 VPN 宣布的子网和域相关的 DNS 查询。这对于高延迟 VPN 链接尤其有用,因为过去所有东西的速度都会变慢。

您还会发现下面有很多评论!

答案2

首先,您通常不需要编辑 /etc/resolvconf/resolv.conf.d/ 中的文件即可获得所需的行为。编辑这些文件应被视为临时黑客行为。通常,您需要配置接口配置器(在您的例子中是 NetworkManager)以按照您想要的方式运行。

要删除,nameserver 127.0.1.1您做了正确的事情,您在 /etc/NetworkManager/NetworkManager.conf 中注释掉了dns=dnsmasq。这会阻止 NetworkManager 启动在 IP 地址 处监听的本地转发名称服务器(dnsmasq 实例)127.0.1.1。当该地址未在 resolvconf 注册时,resolvconf 会在 /etc/resolv.conf 中公开已提供给它的其他名称服务器地址。192.168.0.1出现在您的 resolv.conf 中的地址必须来自 /etc/resolvconf/resolv.conf.d/ 中的文件之一,或者来自将名称服务器信息发送到 resolvconf 的接口配置器。您正在使用 NetworkManager,因此您要做的就是将 NetworkManager 配置为不使用(即不转发到 resolvconf)它从 DHCP 服务器收到的任何名称服务器地址。配置dns=none(由 Serg 建议)将执行此操作。但是,更常规的做法是保留 /etc/resolvconf/resolv.conf.d/head(即仅带有警告注释),并使用 NetworkManager 的连接编辑器在IPv4 设置选项卡上的字段中选择Method: Automatic (DHCP) addresses only所需的地址(在您的情况下为8.8.8.88.8.4.4) 。Additional DNS servers

相关内容