停止 resolvectl 更改 DNS

停止 resolvectl 更改 DNS

我有一个家庭网络。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

但这并没有解决问题

问题

  1. 如果主服务器正在运行,如何让 Ubuntu DNS 不将 DNS 服务器查找切换为辅助服务器
  2. 我如何才能继续使用 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。我不再遇到这个问题。

相关内容