如果在无桌面 Ubuntu 20.04 安装中使用 DHCP,那么使用特定 DNS 服务器的正确方法是什么?您可以使用 DNS over TLS 吗?

如果在无桌面 Ubuntu 20.04 安装中使用 DHCP,那么使用特定 DNS 服务器的正确方法是什么?您可以使用 DNS over TLS 吗?

我正在使用 Ubuntu 20.04 运行本地服务器,需要做一件很简单的事情 - 告诉它使用 ISP 的 DNS 服务器以外的其他服务器来解析 DNS。但是,出于某些原因,我不会深入讨论它,它确实需要使用 DHCP 获取其 IP 地址,因此没有静态 IP 地址。这在以前的 Ubuntu 版本中很容易实现,而且如果你运行的是桌面,显然也不太难,但我还没有看到关于如何在 Ubuntu Server 中执行此操作的清晰说明。

我尝试过的并且现在看来有效的是:

sudo apt update
sudo apt install resolvconf
sudo nano /etc/resolv.conf

(在注释掉的行下面,我添加了两个指向首选 DNS 的名称服务器行,例如

nameserver 8.8.8.8
nameserver 8.8.4.4

然后保存并退出nano)

sudo systemctl start resolvconf.service

现在看来这已经起作用了,但让我困扰的是 resolv.conf 中出现的这段文字:

# 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
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

尽管如此,我看到很多人告诉你继续编辑这个文件,但我想知道的是,这个文件是否会在某个时候被覆盖,如果是这样,那么现在在 Ubuntu 20.04 中指定名称服务器的“正确”方法是什么,请记住我不能使用静态 IP 地址,并且系统上没有桌面?你可能认为现在有人会在网页或视频中介绍这一点,但如果是这样,我找不到它。

编辑:我确实意识到“正确”的方法应该涉及修改 /etc/netplan/00-installer-config.yaml 文件以使用特定的名称服务器,但问题是,如果你没有将 dhcp4: 设置为错误的或者,它会将您指定的 DNS 服务器添加到列表中已经包含从 DHCP 获取的。因此,如果 DHCP 请求指定使用 ISP 的名称服务器,它将始终首先检查该名称服务器,并且只有在该 DNS 无法响应时才转到您首选的名称服务器。显然这不是所需的行为,这正是促使我首先安装 resolvconf 的原因。

但继续这个话题,如果难度不是太大的话,我真正想实现的是 DNS 加密,我猜这叫做 DNS over TLS。我想知道的是,Ubuntu Server 是否内置了此功能,如果是,如何启用它。我看到过几页建议安装一个名为 stubby 的软件包,但同样,我发现的几乎所有说明都是为早期 Ubuntu 版本的用户或 Ubuntu 桌面用户编写的。

这一切似乎在 Ubuntu 18.04 中会容易得多,但在我访问过的所有页面中,我试图获取有关此主题的可靠信息,如果提到 20.04,所有说明几乎都普遍告诉您使用桌面版中的网络配置工具。似乎没有人知道在不使用基于 GUI 的实用程序的情况下在 Ubuntu 20.04 中做某事的正确方法。所以我想知道他们为什么要这样做更难对于用户来说 - 这似乎是朝着错误的方向发展!

答案1

我同意@chili555的观点,netplan是你的最佳选择。不要安装不必要的新软件包,也不要用替代配置修补你的系统。Netplan很好,但我必须承认它的间距很烦人:)

在 Ubuntu 20.04 中,你应该已经拥有 0.99 版本的 Netplan 包,它可以与 dhcp4-overrides 一起使用:

因此,从之前提及帖子

network:
  version: 2
  renderer: networkd
  ethernets:
    enp2s1:
      dhcp4: yes
      dhcp4-overrides:
        use-dns: false
      dhcp6: yes
      dhcp6-overrides:
        use-dns: false
      nameservers:
        addresses: ["fd35:2ff0:b0b9:d0c0::1:1", 192.168.255.17]

然后不要自暴自弃

netplan apply

但使用

netplan try

而是。这样,在配置恢复之前您有 120 秒的时间,然后您可以再次连接。

笔记:另一个附加设置是禁用路由器通告 ( accept-ra: false)。这些设置也会设置不需要的 IPv6 DNS 服务器。

参考

答案2

好的,您有几个问题可以归结为一个:

DNS-over-TLS(DoT)

Ubuntu 提供了该stubby软件包,它是事实上的标准 DoT 守护程序之一。只需运行它apt install stubby,您就可以开始使用了。

DHCP DNS 覆盖

正如 chili555 在评论中指出的那样,你想使用dhcp4-覆盖->使用-dns选项来禁用 DHCP 提供的 DNS 服务器。

使用 Stubby

正如您已经遇到的,systemd-networkd 将默认启动其自己的 DNS 解析器 (systemd-resolved)。如果您想运行 Stubby,它们都需要绑定在端口 53 上,这将导致错误。您有两个选择:

  • 禁用 systemd-resolved并将 netplan.io 配置为使用 127.0.0.1 作为 DNS 覆盖服务器。这样做的缺点是禁用 DNS 缓存(我认为)。
  • listen_addresses告诉 Stubby 使用变量绑定到不同的本地主机 IP 和/或端口/etc/stubby/stubby.yml,然后告诉“netplan.io”使用 dns 覆盖将其指向新的 IP/端口。

相关内容