Ubuntu 20.04.1 systemd 解决错误 NXDOMAIN

Ubuntu 20.04.1 systemd 解决错误 NXDOMAIN

我目前正在测试 Ubuntu 20.04.1(几十年来一直使用 Fedora,从核心 2 到 31),目前我遇到了本地/私有 DNS 解析的问题。

获取与以下相关的系统错误消息此漏洞

服务器返回错误 NXDOMAIN,缓解潜在的 DNS 违规 DVE-2018-0001,使用降低的功能级别 UDP 重试事务

简化上下文:

  • 我有一个提供以太网网络的 Synology 路由器(其 @IP 地址为 192.168.56.1)
  • 它是提供 DHCP 服务器的
  • 我的每台设备(大约 10 台)都有一个特定的 DHCP 注册,并具有特定的名称

为了简单起见,我们考虑名为“nas”的设备。

开箱即用,无论使用什么命令,我的 Ubuntu 20.04.1 LTS 都拒绝解析 nas,请参阅本问题的结尾。

在 Stackoverflow 和论坛上阅读了大量资料后,我尝试了,但没有成功:

  • 安装 libnss-resolve,它可以增强/etc/nsswitch.conf文件
  • 改变/etc/resolv.conf来自的符号链接/运行/systemd/resolve/stub-resolv.conf/运行/systemd/resolv/resolv.conf
  • 黑客/etc/systemd/resolved.conf文件指定我的路由器的@IP 地址作为 DNS 服务器
  • 黑客/etc/sysctl.conf文件定义内核域名使用特定域,例如在我的 Synology Router 上定义的域(以前没有,并且它与 Fedora 一起使用)
  • 刷新缓存sudo systemd-resolve --flush-caches

测试:

systemd-resolve nas
nas: resolve call failed: No appropriate name servers or networks for name found

dig nas
; <<>> DiG 9.16.1-Ubuntu <<>> nas
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 65082
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;nas.               IN  A

;; Query time: 4 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: mer. juil. 29 15:13:09 CEST 2020
;; MSG SIZE  rcvd: 32

dig @192.168.56.1 nas
; <<>> DiG 9.16.1-Ubuntu <<>> @192.168.56.1 nas
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 34633
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;nas.               IN  A

;; AUTHORITY SECTION:
.           86064   IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2020072900 1800 900 604800 86400

;; Query time: 24 msec
;; SERVER: 192.168.56.1#53(192.168.56.1)
;; WHEN: mer. juil. 29 15:13:30 CEST 2020
;; MSG SIZE  rcvd: 107

nslookup nas

服务器:127.0.0.53 地址:127.0.0.53#53

** 服务器找不到 nas:SERVFAIL


我的当前内容/etc/resolv.conf(默认):

nameserver 127.0.0.53
options edns0

我的当前内容/etc/nsswitch.conf

passwd:         files systemd
group:          files systemd
shadow:         files
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

当然,在添加@ip / name映射/etc/hosts有效,但这不是一个解决方案。

编辑:在 Ubuntu 22.04.2 LTS 下,我使用全新的 Synology RT2600ac 时仍然遇到同样的问题。我该如何修复此问题?

答案1

此错误表示 DNS 服务器无法解析域。这通常意味着您的本地 DNS 设置将有关本地域(.local、.lan、.home 等)的查询发送到重新模式 DNS 服务器。就我而言,我在 /etc/systemd/resolved.conf 中配置了“Domains=”(包含我的本地搜索域),但没有配置“DNS=”(将其留给 DHCP),这是错误的。当 DNS 服务器由 dhcp 提供时,必须以相同的方式提供搜索域。

答案2

您还没有说这是服务器还是桌面安装。无论哪种方式,我都会为您概述如何设置搜索域。您的原始帖子表明您使用的是 Ubuntu 20.04,但后来您升级到了 22.04。

边注: 以下内容适用于 20.04 和 22.04,但 resolvectl status不同版本的输出看起来略有不同。

至于要使用哪个搜索域,这取决于路由器上的 DHCP 服务器中定义的内容。通常类似于当地的本地域, 或者局域网。您可以根据需要进行编辑。

我使用的是 pfSense 路由器。在系统/常规设置页面。在我的例子中,默认是本地域,我保留其原有的配置。

在此处输入图片描述

我不熟悉 Synology 路由器,因此您必须查阅手册以了解如何定义域。您在评论中指出您“我的路由器上不再配置域。“我怀疑这是问题的一部分。

为了阐明搜索域的目的,请参阅systemd-resolved.service(8)解释得很好:

使用搜索域通过单播 DNS 解析单标签非合成名称的地址记录 (A 和 AAAA) 查询。对于定义搜索域的任何接口,此类查询将路由到为该接口定义的服务器,并以每个搜索域作为后缀。当定义全局搜索域时,此类查询将路由到全局服务器。对于每个搜索域,查询通过依次为名称添加每个搜索域作为后缀来执行。


让我们开始吧...

我看到您已编辑/etc/resolv.conf内容以尝试解决问题。因此,让我们将此文件重置为指向的符号链接/run/systemd/resolve/stub-resolv.conf,这是本地缓存存根解析器和默认设置。

运行ls -l /etc/resolv.conf看看它现在是什么。在我的系统上,我得到以下内容:

$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Dec 31  2021 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

如果它是一个文件或指向除 之外的其他内容的符号链接/run/systemd/resolve/stub-resolv.conf,则将其删除:

sudo rm /etc/resolv.conf

接下来,创建一个符号链接:

sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

现在让我们向服务器和桌面主机的网络接口添加一个搜索域。

服务器

网络通常通过以下方式配置网络计划并由管理systemd-networkd作为后端渲染器。在进行任何更改之前,让我们先看看当前系统是如何设置的。

在虚拟机上,我有以下内容网络计划YAML 配置文件,其接口设置为 DHCP。

$ cat /etc/netplan/00-network.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true

显示任何更改之前的输出cat /etc/resolv.conf。请注意,未列出搜索域。

$ cat /etc/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad

在以下 的输出中resolvectl status eth0,我仅显示一个特定链接。eth0用您的设备名称替换。请注意,它不表示 的设置DNS Domain,其中会列出搜索域。

$ resolvectl status eth0
Link 2 (eth0)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS
                    DNSSEC=no/unsupported         
  Current DNS Server: 192.168.10.1
         DNS Servers: 192.168.10.1

现在我们已经了解了当前状态,让我们编辑您的 Netplan 配置文件。在以下命令中替换您的配置文件的名称:

sudo /etc/netplan/00-network.yaml

要添加搜索域,请按如下方式编辑配置文件。在此示例中,我添加本地域作为搜索域。

$ cat /etc/netplan/00-network.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true
      nameservers:
        search: [localdomain]

保存并退出文件。然后应用更改:

sudo netplan try

重新启动 systemd-resolved:

sudo systemctl restart systemd-resolved

然后查看输出/etc/resolv.conf,您将看到搜索域已被添加。

$ cat /etc/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad
search localdomain

同样,resolvectl status eth0表明本地域列于 下DNS Domain

$ resolvectl status eth0
Link 2 (eth0)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS
                    DNSSEC=no/unsupported         
  Current DNS Server: 192.168.10.1
         DNS Servers: 192.168.10.1
          DNS Domain: localdomain 

桌面

对于桌面安装,网络通常由网络管理器。因此,我们将使用nm-connection-editor打开网络连接编辑器并向界面添加搜索域。

在编辑连接之前,让我们先查看一下添加新搜索域之前的当前状态。输入cat /etc/resolv.conf。在我的系统上...

$ cat /etc/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad

nm-connection-editor在终端中输入。网络连接窗口将打开。选择要编辑的接口,然后单击底部的齿轮图标。将打开一个新窗口。选择IPv4 设置选项卡并输入搜索域其他搜索域。在下图中,我正在编辑一个名为蓝波我已经输入了本地域作为附加搜索域。

在此处输入图片描述

单击“保存”关闭此窗口。然后关闭网络连接窗户。

此编辑的效果可以在目录中的网络管理器系统连接配置文件中看到/etc/NetworkManager/system-connections。上述连接的文件名称为Bluewave.nmconnection。您的名称会有所不同。以下是添加之前的内容本地域作为我的界面上的搜索域。请注意,为dns-search空。

$ sudo cat Bluwave.nmconnection 
[connection]
id=Bluwave
uuid=e37ca330-8072-4c45-a5f9-e6ac73f3351b
type=wifi
interface-name=wlp9s0
permissions=
timestamp=1691197080

[wifi]
mac-address-blacklist=
mode=infrastructure
seen-bssids=04:D5:90:AC:79:F0;04:D5:90:AC:79:F8;04:D5:90:AC:8E:00;04:D5:90:AC:8E:08;
ssid=Bluwave

[wifi-security]
key-mgmt=wpa-psk
psk=XXXXXXXXXXXXXX

[ipv4]
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ip6-privacy=0
method=auto

[proxy]

添加搜索域后,您将看到本地域添加到dns-search

$ sudo cat Bluwave.nmconnection 
[connection]
id=Bluwave
uuid=e37ca330-8072-4c45-a5f9-e6ac73f3351b
type=wifi
interface-name=wlp9s0
permissions=
timestamp=1691197080

[wifi]
mac-address-blacklist=
mode=infrastructure
seen-bssids=04:D5:90:AC:79:F0;04:D5:90:AC:79:F8;04:D5:90:AC:8E:00;04:D5:90:AC:8E:08;
ssid=Bluwave

[wifi-security]
key-mgmt=wpa-psk
psk=XXXXXXXXXXXXXX

[ipv4]
dns-search=localdomain
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ip6-privacy=0
method=auto

[proxy]

反正,网络管理器需要重新启动(或重启)才能使此更改生效。因此,返回终端,运行以下命令:

sudo systemctl restart network-manager

您的新搜索域应该已生效。要确认,请再次查看cat /etc/resolv.conf。请注意本地域已添加。

$ cat /etc/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad
search localdomain

这也显示在 的输出中resolvectl status。在下面的输出中,我仅显示我的特定 wifi 设备。wlp9s0用您的设备名称替换。

$ resolvectl status wlp9s0
Link 3 (wlp9s0)
$ resolvectl status eth0
Link 2 (eth0)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS
                    DNSSEC=no/unsupported         
  Current DNS Server: 192.168.10.1
         DNS Servers: 192.168.10.1
          DNS Domain: ~.           
                      localdomain 

一切完成后,您应该能够访问ping您的服务器或nslookup使用其主机名运行。以我的网络为例:

$ ping -c 1 office
PING office.localdomain (192.168.10.30) 56(84) bytes of data.
64 bytes from OFFICE.localdomain (192.168.10.30): icmp_seq=1 ttl=128 time=0.385 ms

--- office.localdomain ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.385/0.385/0.385/0.000 ms



$ nslookup office
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   office.localdomain
Address: 192.168.10.30

相关内容