我有一个家庭网络。DHCP 租约适用于除 Ubuntu 22 之外的所有其他系统/设备,因为我租出本地 DNS 服务器及其本地子网/区域作为主 DNS 服务器 172.16.100.22。DHCP 将辅助 DNS 服务器列为 8.8.8.8,以防我的本地 DNS 服务器(服务)死机或我正在修复问题,如果我的实验室出了问题,我会恢复到谷歌(让妻子/孩子开心)。
但 ...
ubuntu 解析器
resolvectl status
Global
Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 2 (eth0)
Current Scopes: DNS
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 8.8.8.8
DNS Servers: 172.16.100.22 8.8.8.8 fe80::9e65:f9ff:fe38:6d27%21971
DNS Domain: lan penguinpages.local
Link 3 (eth1)
Current Scopes: none
Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Windows VM 的 DHCP 租约
Ethernet adapter vEthernet (External):
Connection-specific DNS Suffix . : penguinpages.local
Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #2
Physical Address. . . . . . . . . : 80-6D-97-05-09-12
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IPv4 Address. . . . . . . . . . . : 172.16.100.32(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Lease Obtained. . . . . . . . . . : Monday, June 27, 2022 8:33:22 AM
Lease Expires . . . . . . . . . . : Tuesday, July 5, 2022 12:03:02 PM
Default Gateway . . . . . . . . . : 172.16.100.1
DHCP Server . . . . . . . . . . . : 172.16.100.1
DNS Servers . . . . . . . . . . . : 172.16.100.22
8.8.8.8
NetBIOS over Tcpip. . . . . . . . : Enabled
/etc/resolve.conf
nameserver 127.0.0.53
options edns0 trust-ad
search penguinpages.local
我不想破坏 Ubuntu 中的任何标准,但我需要它停止在 DNS 上翻转。
全新启动 DNS 查找
nerd@lt:~/.ssh$ resolvectl status
Global
Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Current DNS Server: 172.16.100.22
DNS Servers: 172.16.100.22
Fallback DNS Servers: 8.8.8.8
DNS Domain: penguinpages.local
Link 2 (eth0)
nerd@lt:~/.ssh$ nslookup ados.penguinpages.local
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: ados.penguinpages.local
Address: 172.16.100.22
Name: ados.penguinpages.local
Address: 172.16.101.22
但20分钟后......
nerd@lt:~$ resolvectl status
Global
Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 2 (eth0)
Current Scopes: DNS
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 8.8.8.8
DNS Servers: 172.16.100.22 8.8.8.8 fe80::9e65:f9ff:fe38:6d27%21971
DNS Domain: lan penguinpages.local
Link 3 (eth1)
Current Scopes: none
Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
nerd@lt:~$ nslookup cka01.penguinpages.local
Server: 127.0.0.53
Address: 127.0.0.53#53
** server can't find cka01.penguinpages.local: NXDOMAIN
我意识到它正在缓存东西...因此对“ados.penguinpages.local”的解析仍然可以解决,但任何新的 DNS 条目...动态或实时添加然后开始失败。
我只需要将它固定到主 DNS 服务器并停止移动到辅助 DNS 服务器。
我正在查看 /var/log/syslog,寻找有关 DNS 超时的任何记录或它会翻转的某些原因......但该日志中没有任何内容。
我也尝试通过以下方式手动实现此行为
sudo vi /etc/systemd/resolved.conf
#DNS=
DNS=172.16.100.22
#FallbackDNS=
FallbackDNS=8.8.8.8
#Domains=
Domains=penguinpages.local
#DNSSEC=no
#DNSOverTLS=no
但这并没有解决问题
问题
- 如果主服务器正在运行,如何让 Ubuntu DNS 不将 DNS 服务器查找切换为辅助服务器
- 我如何才能继续使用 DHCP,但覆盖 DNS,从而只需使用单个本地 DNS 服务器即可
PS:这也会影响所有 shell,其中字符在您键入时不再回显(这是您发现的第一个症状,表明事情已经“翻转”。 “修复”是“重置”命令,不确定...但我的猜测是帮助 wayland 修复 DNS 翻转并且现在乱七八糟的问题。
答案1
您可能不想听到这个答案。在任何标准中,都没有“辅助 DNS”这样的东西。任何操作系统都可以自由实现这样的功能(因此不支持负载平衡),但它根本不存在。
有一个相同的讨论这里:
如果您说只应使用 172.16.53.8 而绝不应使用 8.8.8.8,那么您应该从配置中删除 8.8.8.8。如果您的系统通过 DHCP 获得该地址,那么您需要配置 DHCP 客户端以隐藏该地址,这样它就不会交给 systemd-resolved。
当有多个地址时,您肯定不想依赖任何排序行为,因为那是不可靠的。
可以总结为 - 不要在 DHCP 广告中撒谎 - 任何 DNS 服务器都可以在该链接上使用,并且假定是等效的。该链接更深入地讨论了相关标准。
但是,存在每个域名服务器的概念 - 即,域名服务器仅应用于查找特定(例如私有)域。
现在,我通过自己搜索相同类型的修复方法找到了这个问题(只有“DHCP”是我的工作 VPN),但我还没有弄清楚它是如何配置的。就你的情况而言,你似乎想要设置本地服务器来响应你的.local
(子)域。
我遵循的建议包括使用~
域前缀来修改它们的处理方式(请参阅man resolved.conf
),但我还没有按照这条路径找到我满意的解决方案。如果我得到明确的答案,我会更新。
答案2
过去,我曾通过 chattr +i /etc/resolv.conf 设置不可变标志。这种方法有效,但每次尝试替换 /etc/resolv.conf 时,resolvconf 都会在 /etc 中创建替换文件。垃圾文件很快就会堆积起来,需要删除它们以避免最终超载。这种情况令人失望。
但是,我发现 /etc/resolvconf.conf 是在我上次 SID 分发升级时安装的,我以前从未见过:
Configuration for resolvconf(8)
# See resolvconf.conf(5) for details
resolv_conf=/etc/resolv.conf
# If you run a local name server, you should uncomment the below line and
# configure your subscribers configuration files below.
name_servers=1.1.1.1
# Mirror the Debian package defaults for the below resolvers
# so that resolvconf integrates seemlessly. dnsmasq_resolv=/var/run/dnsmasq/resolv.conf pdnsd_conf=/etc/pdnsd.conf unbound_conf=/etc/unbound/unbound.conf^C/resolvconf_resolvers.conf
从中可以看出,我更喜欢 1.1.1.1。我不再遇到这个问题。