“(DNS)名称解析暂时失败”

“(DNS)名称解析暂时失败”

“(DNS)名称解析暂时失败”

背景

我从事医疗保健安全工作,在美国各地的十几个客户机上拥有大约 125 台服务器。设备包括物理机和虚拟机、1u 机架服务器和小型设备。虽然我们最初使用的是 Ubuntu 16.04,但去年我们迁移到了 Ubuntu 20.04。

这些机器运行的是流行的开源 SIEM。它们在一个网络接口/适配器上使用管理接口,在第二个网络接口/适配器上使用端口镜像

此举中最大的变化之一是网络配置的变化,从使用 /etc/network 下的接口文件变为使用 Netplan 的 YAML 文件。作为一家小公司,只有我一个人维护服务器。如前所述,它们位于美国各地,因此由于地理位置的原因,我无法物理访问 80% 以上的服务器。我通过 Microsoft Azure 或 RDS 客户端 DWS 执行任何类型的维护和更新。在过去四年中,一切都进展得相对顺利。然而,最近我开始看到多个站点出现同样的问题。受影响的机器没有共同的基本特征:一些是在过去 30 天内制造的;其他机器已经安装到位并运行了一两年多,之前没有出现过问题。

问题:

最近很多机器都断网了,有些机器已经运行了一年多,没有出现任何问题,但是无法ping通外部IP地址,返回“名称解析暂时失败”的错误。 我浏览了几十篇讨论看似非常普遍的问题的帖子,并尝试实施常见的解决方案。但都没有奏效。 我记录了这些不同的解决方案及其结果,以及我认为可能相关的其他数据,希望有人可以建议我如何纠正这个错误。

净值/净值:

ping 8.8.8.8工作正常

www.google.com返回“名称解析暂时失败”

我可以 ping 网关和本地资产


配置文件

enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.171.18.6  netmask 255.255.255.0  broadcast 10.171.18.255
        inet6 fe80::201:2eff:fea3:a56e  prefixlen 64  scopeid 0x20<link>
        ether 00:01:2e:a3:a5:6e  txqueuelen 1000  (Ethernet)
        RX packets 1040415  bytes 77072784 (77.0 MB)
        RX errors 0  dropped 36599  overruns 0  frame 0
        TX packets 1929257  bytes 81061339 (81.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.171.255.1  netmask 255.255.255.0  broadcast 10.171.255.255
        inet6 fe80::201:2eff:fea3:a56f  prefixlen 64  scopeid 0x20<link>
        ether 00:01:2e:a3:a5:6f  txqueuelen 1000  (Ethernet)
        RX packets 4184943678  bytes 2571645450748 (2.5 TB)
        RX errors 0  dropped 17  overruns 0  frame 0
        TX packets 604  bytes 52418 (52.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 所有适配器均已启动并运行
  • 所有适配器都反映正确的 IPv4 地址和网络掩码,与 netplan YAML 文件相对应(见下文)
  • 这里一切看起来都很正常。第一个 (enp1s0) 适配器上的接收/传输流量符合预期,端口镜像 enp2s0 上的接收流量也符合预期。

/etc/netplan

drwxr-xr-x   2 root root  4096 Jul  7 11:48 .
drwxr-xr-x 146 root root 12288 Jun 29 13:44 ..
-rw-r--r--   1 root root   330 May 19 17:47 01-static-ip.yaml
  • 只有一个文件,即配置文件 01-static-ip.yaml
  • 当前模式为 644
network:
   version: 2
   renderer: NetworkManager
   ethernets:
      enp1s0:
         dhcp4: no
         addresses:
            - 10.171.18.6/24
         nameservers:
            addresses: [10.30.3.29, 10.30.3.30]
         gateway4: 10.171.0.1
      enp2s0:
         dhcp4: no
         addresses:
            - 10.171.255.1/24
  • 这是01-static-ip.yaml的内容
  • 两个网络适配器的 IP 地址在 IFCONFIG(上图)中均正确显示,管理适配器的子网掩码 (/24 / 255.255.255.0) 也正确显示

/etc/网络

drwxr-xr-x   6 root root  4096 Jul  7 11:48 .
drwxr-xr-x 146 root root 12288 Jun 29 13:44 ..
drwxr-xr-x   2 root root  4096 May 19 14:56 if-down.d
drwxr-xr-x   2 root root  4096 May 19 14:56 if-post-down.d
drwxr-xr-x   2 root root  4096 May 19 14:56 if-pre-up.d
drwxr-xr-x   2 root root  4096 May 19 14:56 if-up.d
-rwxr-xr-x   1 root root     0 Jul 13 09:34 interfaces
  • 我曾尝试使用 sudo touch interface 创建一个空的接口文件,也曾尝试过不使用任何接口文件
  • 我知道从技术上讲,在 Ubuntu 20.04 下你仍然可以使用接口文件作为网络配置文件,但从 Ubuntu 18.04 开始,Netplan 是首选/推荐的网络配置方法。因此,我没有尝试在这里创建一个老式的接口文件并删除 Netplan YAML 文件

/etc/resolv.conf

nameserver 127.0.0.53
options edns0 trust-ad
  • 我尝试在名称服务器 127.0.0.53 之前添加名称服务器 10.30.3.29
  • 我尝试删除名称服务器 127.0.0.53 并只保留名称服务器 10.30.3.29
  • 都不起作用

resolvectl 状态

Link 2 (enp1s0)
      Current Scopes: DNS       
DefaultRoute setting: yes       
       LLMNR setting: yes       
MulticastDNS setting: no        
  DNSOverTLS setting: no        
      DNSSEC setting: no        
    DNSSEC supported: no        
  Current DNS Server: 10.30.3.29
         DNS Servers: 10.30.3.29
                      10.30.3.30
          DNS Domain: ~.    
  • 看来这里的 DNS 服务器配置正确...

/etc/systemd/resolved.conf

[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#DNSOverTLS=no
#Cache=no-negative
#DNSStubListener=yes
#ReadEtcHosts=yes         
  • 最常见的解决方案似乎是取消此处第一行的注释并添加您的 DNS 名称服务器 - 但这并不能解决问题。

nmcli -f ipv4.addresses,ipv4.dns,ipv4.gateway,IP4.ADDRESS,IP4.DNS,IP4.GATEWAY con 显示 netplan-enp1s0

[NMCLI con show SPECIFIC]
ipv4.addresses:                         10.171.18.6/24
ipv4.dns:                               10.30.3.29,10.30.3.30
ipv4.gateway:                           10.171.0.1
IP4.ADDRESS[1]:                         10.171.18.6/24
IP4.DNS[1]:                             10.30.3.29
IP4.DNS[2]:                             10.30.3.30
IP4.GATEWAY:                            10.171.0.1
  • 再次确认所有网络信息正确无误

/usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf

[keyfile]
unmanaged-devices=*,except:type:wifi,except:type:gsm,except:type:cdma,except:type:ethernet
  • 我以前遇到过问题,需要手动编辑此字段以包含“except:type:ethernet”,但这已经完成了

systemctl status 网络管理器

<warn>  [1657208914.3825] ifupdown: interfaces file /etc/network/interfaces doesn't exist
  • 这是在 /etc/network 中没有接口文件时生成的
  • 正如前面提到的,我已经尝试过有和没有这个文件的情况
  • 创建一个空的接口文件并重新加载 NetworkManager 后,这个问题就消失了
<warn>  [1657208914.4014] Error: failed to open /run/network/ifstate
  • 我以前也见过这个错误。通常可以通过编辑 10-globally-managed-devices.conf 来解决
<warn>  [1657208914.3941] device (enp1s0): connectivity: "/proc/sys/net/ipv4/conf/enp1s0/rp_filter" is set to "1". This might break connectivity checking for IPv4 on this device
  • 我以前也看到过这个错误,并尝试将该值编辑为 0。以前这种方法有效,但这里没有结果。

提前感谢您的时间和想法。我很乐意提供您想看到的任何附加信息!

答案1

Ubuntu 16.04 和 Ubuntu 20.04 之间的区别在于默认使用本地解析器 systemd-resolved。但是,在维护过程中,您注意到您已尝试在 resolve.conf 配置中禁用此解析器,只留下 10.xxx 服务器。这表明问题出在与 DNS 服务器的连接上,而不是 systemd-resolved 本身的问题。如果可能,您应该使用 Ubuntu 16.04 系统进行测试,以排除这是否实际上与客户端操作系统升级有关,或者是否发生了其他变化同时导致这些瞬时故障。

tcpdump工具可能对捕获 DNS 流量的网络跟踪很有用,可以查看协议级别发生的情况:tcpdump -i enp1s0 -n -s 1500 port 53。如果您使用该-w选项将此输出写入 pcap 文件,则可以使用诸如 之类的工具进行进一步分析ethereal

相关内容