我在安装 Ubuntu 18.04 期间设置了一个静态网络,它似乎已生成一个包含/etc/netplan/50-cloud-init.yaml
我提供的详细信息的文件。
一切似乎都正常,但 Ubuntu 会定期忘记我输入的 DNS 设置。例如,如果我尝试,nslookup another-server.lan.example.com
它有时会找不到它。
运行后sudo netplan apply
它又可以正常工作了。似乎每天需要运行这个命令几次。
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: another-server.lan.mydomain.com
Address: 10.10.1.1›
/etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
ens160:
addresses:
- 10.10.1.10/16
gateway4: 10.10.0.1
nameservers:
addresses:
- 10.10.1.1
- 8.8.8.8
search:
- lan.mydomain.com
optional: true
version: 2
我认为发生的情况是,在一天中的某个时间点,主(列出的第一个)内部 DNS 服务器的查找失败,因此 systemd 切换到辅助(列出的第二个)Google DNS 服务器。但是,无论出于什么原因,当辅助 DNS 服务器无法解析本地地址时,systemd 不会重试主 DNS 服务器。
这里讨论了类似的问题: https://github.com/systemd/systemd/issues/5755
答案1
我可以确认 18.04.1 LTS 和 netplan 存在此问题,因为我自己也遇到了这个问题,并且采用了不同的解决方法。
设置: 我有两台配置大致相同的 18.04.1 LTS 服务器。一台服务器托管应用程序并可访问互联网。另一台服务器是防火墙后面的数据服务器,只有应用程序服务器可以访问。
网络: 我有一个包含两个 DNS 服务器的静态环境。(Windows 操作系统)。为了增加冗余度,如果发生内部 DNS 故障,我会使用 8.8.8.8。
背景: 我的一些应用程序通过主机名而不是 IP 地址进行解析。每天有几次应用程序会因为无法解析主机名而崩溃或抛出错误。如果我运行申请网络计划它有点作用。
尽管我的列表中第三个是 8.8.8.8,但我相信 netplan 最终会忽略我的本地 DNS 服务器而选择 google,并且如果它无法根据主 DNS 解析主机名,它就永远不会检查内部 DNS。
解决方法: 当我将本地主机名添加到我的公共 DNS 记录(我知道这是大忌)而无需重新应用 netplan 时,我能够让我的应用程序服务器顺利解析。
最终,我相信这是 Ubuntu 18.04.1 LTS 中实现的 netplan 的名称服务器偏好或“永久”名称服务器故障问题
答案2
不幸的是,Google DNS 不知道我们的内部地址 :( 当我们有一些无法从外部访问的内部服务在本地解析时,我建议不要使用外部 DNS 甚至辅助服务器。我为我的大学网络(1800+ 台电脑/50+ 台服务器)实施了一个内部 DNS 服务器,但没有为它们配置辅助服务器;如果本地网络偶尔出现延迟,电脑就会继续尝试。我没有发现与此相关的任何困难。
当然,只有一个 DNS 服务器是一个故障点,但使用服务监视器和一些容器可以轻松实现高可用性。