为什么我需要在 resolv.conf 中添加名称服务器?

det*_*tly 4 dns systemd-resolved

我正在运行 Ubuntu 18.04(从某个早期版本升级),它使用网络管理器和 systemd-resolved 进行名称解析。当我开机,我的以太网连接enp0s31f6,通过网络管理提出并通过DHCP给予3个的域名服务器地址,10.1.13.1010.1.141.1010.1.13.36。运行nmcli显示“DNS 配置”下的三个名称服务器。运行将systemd-resolve --status它们显示在“链接 2 (enp0s31f6)”部分下。我可以ping通每一个。没有其他连接处于活动状态。

testuser ? systemd-resolve --status
Global
          DNS Domain: (my org's domain)
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa
                      168.192.in-addr.arpa
                      17.172.in-addr.arpa
                      18.172.in-addr.arpa
                      19.172.in-addr.arpa
                      20.172.in-addr.arpa
                      21.172.in-addr.arpa
                      22.172.in-addr.arpa
                      23.172.in-addr.arpa
                      24.172.in-addr.arpa
                      25.172.in-addr.arpa
                      26.172.in-addr.arpa
                      27.172.in-addr.arpa
                      28.172.in-addr.arpa
                      29.172.in-addr.arpa
                      30.172.in-addr.arpa
                      31.172.in-addr.arpa
                      corp
                      d.f.ip6.arpa
                      home
                      internal
                      intranet
                      lan
                      local
                      private
                      test

Link 3 (wlp4s0)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no

Link 2 (enp0s31f6)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 10.1.13.10
                      10.1.141.10
                      10.1.13.36
          DNS Domain: (my org's domain)
Run Code Online (Sandbox Code Playgroud)

但是,当我实际尝试解析名称时,即使是其中一个名称服务器的名称,也会dig声称“连接超时:无法访问服务器”。

testuser ? dig dcpdc001.(my org's domain)

; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> dcpdc001.(my org's domain)
;; global options: +cmd
;; connection timed out; no servers could be reached
Run Code Online (Sandbox Code Playgroud)

请注意,此名称应解析为10.1.13.10第一个名称服务器。

我已配置resolvconf为使用动态更新。/etc/resolv.conf指向/run/resolvconf/resolv.conf. 此文件仅包含(非注释):

nameserver 127.0.0.53
search (my orgs local search domain)
Run Code Online (Sandbox Code Playgroud)

如果我nameserver 10.1.13.10手动添加到这个文件,突然dig可以再次解析,其他任何需要查看本地名称的内容都可以这样做。删除名称服务器再次破坏了这一点。

我对服务器了解不多。它们是基于 Windows 的网络的一部分,但如果我resolv.conf手动编辑,我可以使用它们,所以我认为这不是问题,这意味着我不需要对域进行身份验证即可使用它们。(我可以使用 Realmd/SSSD 通过 Ubuntu 对域进行身份验证,但如果我无法解析域控制器则不行......)

journalctl条目systemd-resolved显示只有“使用降级功能集...的DNS服务器”,但仅指第三域名服务器,而不是其他一些消息。主名称服务器没有任何内容。

如何在resolv.conf每次启动时无需手动编辑即可获得名称解析?

我假设我的resolv.conf意思是网络管理器或 Systemd 有某种本地缓存解析器正在运行?如果是这样,绕过它会解决问题吗?


我增加了日志记录级别systemd-resolvedjournalctl -f -u systemd-resolved显示:

Jul 20 10:33:23 heerij-ubuntu systemd-resolved[2352]: Got DNS stub UDP query packet for id 19836
Jul 20 10:33:23 heerij-ubuntu systemd-resolved[2352]: Looking up RR for dcpdc001.(org domain) IN A.
Jul 20 10:33:23 heerij-ubuntu systemd-resolved[2352]: Switching to DNS server 10.1.13.10 for interface enp0s31f6.
Jul 20 10:33:23 heerij-ubuntu systemd-resolved[2352]: Cache miss for dcpdc001.(org domain) IN A
Jul 20 10:33:23 heerij-ubuntu systemd-resolved[2352]: Transaction 12728 for <dcpdc001.(org domain) IN A> scope dns on enp0s31f6/*.
Jul 20 10:33:23 heerij-ubuntu systemd-resolved[2352]: Using feature level UDP+EDNS0+DO+LARGE for transaction 12728.
Jul 20 10:33:23 heerij-ubuntu systemd-resolved[2352]: Using DNS server 10.1.13.10 for transaction 12728.
Jul 20 10:33:23 heerij-ubuntu systemd-resolved[2352]: Sending query packet with id 12728.
Jul 20 10:33:23 heerij-ubuntu systemd-resolved[2352]: Processing query...
Jul 20 10:33:23 heerij-ubuntu systemd-resolved[2352]: Timeout reached on transaction 12728.
Run Code Online (Sandbox Code Playgroud)

det*_*tly 13

Systemd 带有一个“存根”解析器,systemd-resolved,根据他们的说法,它实际上并不打算用作 DNS 服务器

好吧,resolved 不应该是 DNS 服务器,它应该足够好,以便类似 libc 的 DNS 客户端可以解析它们的内容,并且我们携带足够的信息来设置 AD 位。

无论出于何种原因,Ubuntu 被配置为将其用作 DNS 服务器,事实上,这是唯一的一个。

一个注释的bug#1624320指出,systemd分辨有三种操作模式,而第二个就是固定我的问题。即:

$ sudo rm -f /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

  • 这实际上很好知道,因为我很快就会升级到 18.04,我担心它会解析为 127.0.0.53 而不是我的 DNS 服务器。在我看来更好的控制。+1 (2认同)