我正在使用 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
然后保存并退出纳米)
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: 设置为false或不,它会将您指定的 DNS 服务器添加到已经包含从 DHCP 获得的服务器的列表中。因此,如果 DHCP 请求指定使用 ISP 的名称服务器,它将始终首先检查,并且仅在 DNS 无法响应时才转到您首选的名称服务器。显然这不是我们想要的行为,而这正是促使我首先安装 resolvconf 的原因。
但是继续这个主题,如果不是太难的话,我真正想要实现的是 DNS 加密,我猜它被称为 DNS over TLS。我想知道的是这个功能是否内置在 Ubuntu Server 中,如果是,你如何启用它。我已经看到几个页面建议安装一个名为 stubby 的软件包,但我发现几乎所有的说明都是为早期 Ubuntu 版本的用户或 Ubuntu 桌面用户编写的。
这一切似乎在 Ubuntu 18.04 中会容易得多,但是在我访问过的所有页面中,试图获得关于这个主题的可靠信息,如果在所有说明中提到 20.04,几乎普遍告诉你使用网络配置工具在桌面版本中。好像没有人知道在不使用基于 GUI 的实用程序的情况下,在 Ubuntu 20.04 中做一些应该非常简单的事情的正确方法。所以我想知道为什么他们让用户更难- 这似乎是在错误的方向!
我同意@chili555,netplan 是您的最佳选择。不要安装不必要的新软件包并使用替代配置修补您的系统。Netplan 很好,但我必须承认间距很烦人 :)
在 Ubuntu 20.04 中,您应该已经拥有 0.99 版的 Netplan 包,它可以与 dhcp4-overrides 一起使用:
所以,从前面提到的帖子:
然后不要把自己扔在
但使用
反而。这样,您有 120 秒的时间恢复配置,您可以再次连接。
注意:另一种设置是禁用路由器广告 (
accept-ra: false
)。这些也可以设置不需要的 IPv6 DNS 服务器。参考
好的,您有几个问题合二为一:
DNS-over-TLS (DoT)
Ubuntu 提供的
stubby
包是事实上的标准 DoT 守护程序之一。只是跑步apt install stubby
,你应该很高兴。DHCP DNS 覆盖
正如 chili555 在评论中指出的那样,您想使用dhcp4-overrides -> use-dns选项来禁用使用 DHCP 提供的 DNS 服务器。
使用 Stubby
正如您已经遇到的,systemd-networkd 默认会启动自己的 DNS 解析器(systemd-resolved)。如果你想运行 Stubby,他们都想绑定到端口 53,这会导致错误。你有两个选择:
listen_addresses
变量 in绑定到不同的 localhost IP 和/或端口/etc/stubby/stubby.yml
,然后告诉“netplan.io”使用 dns 覆盖将其指向该新 IP/端口。