resolvconf 和 NetworkManager 設定了錯誤的名稱伺服器

resolvconf 和 NetworkManager 設定了錯誤的名稱伺服器

我的 DNS 伺服器是192.168.1.152.

此 DNS 由 DHCP 提供給用戶端。我的 LAN 上的 Windows 用戶端可以使用該 DNS 正確解析名稱,但我的 Ubuntu VM 卻不能。

VM 設定了橋接網絡,並正確提供了 DNS 伺服器,但 nslookup 或瀏覽器無法解析我的本機主機名稱。

這是nslookup我的本地域之一:

# nslookup unraid.local
Server:     127.0.0.53
Address:    127.0.0.53#53

** server can't find unraid.local: SERVFAIL

以下是使用我的 DNS 伺服器應該解析的內容:

# nslookup unraid.local 192.168.1.152
Server:     192.168.1.152
Address:    192.168.1.152#53

Name:   unraid.local
Address: 192.168.1.152

/etc/resolv.conf有一個錯誤的名稱伺服器:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 127.0.0.53

我運行了那個命令。在 DNS 伺服器下,令人困惑的是,它指定了正確的伺服器(和我的預設網關)。

root@ubuntu:~# systemd-resolve --status
Global
          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 2 (ens33)
      Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.1.152
                      192.168.1.1

我不想在設定檔中「硬編碼」DNS 伺服器的 IP,因為當我更改網路時我將無法解析。

我怎麼才能讓resolvconf和NetworkManager自動地/etc/resolv.conf在?中設定 DHCP 伺服器的 IP

答案1

已知系統漏洞

臨時解決方法如果 DNS IP 發生變化,則無需重新配置:

sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
reboot

答案2

嘗試編輯/etc/systemd/resolved.conf,新增您想要的 DNS 伺服器:

改變這個:

[Resolve]
#DNS=

對此(但使用你想要的 - 這是一個例子):

[Resolve]
DNS=192.168.1.152

之後,重新啟動服務:

service systemd-resolved restart

當你檢查狀態時你應該看到

$ systemd-resolve --status
Global
         DNS Servers: 192.168.1.152

      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

答案3

我終於在 ubuntu 17.10 上找到了這個問題的解決方案。預設情況下,這個版本的 Ubuntu 使用systemd-resolved,我希望它在下一個版本中能夠保持穩定。

若要使用自訂 dns 而不是本機 systemd 解析的緩存,請執行以下操作:

  1. 新增的名稱伺服器。以 sudoer 身分編輯該檔案/etc/systemd/resolved.conf。在這裡我註解掉了 DNS 條目並放置了我的 dns [Resolve] DNS=10.96.0.10 8.8.8.8 8.8.4.4

  2. 取消實際的符號鏈接/etc/resolv.conf

  3. 建立一個新的符號鏈接sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
  4. 重新啟動服務sudo service systemd-resolved restart
  5. 重新啟動網路管理員sudo systemctl restart networking

現在,如果您挖掘到新增 DNS 提供的名稱,您應該會看到記錄已解析dig nexus.default.svc.cluster.mydomain

/etc/nsswitch.conf最後一步是透過將 dns 放在 mdns4_minimal 之前來更新 中的解析順序

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

答案4

在我的系統上,我發現了一個錯誤的符號連結:/etc/resolv.conf是一個指向的符號鏈接/run/systemd/resolve/stub-resolv.conf

該文件僅包含一行:

nameserver 127.0.0.53#53

結果,本地網路的 DNS 查找經常遺失。

所以,我改為/etc/reolv.conf指向/run/systemd/resolve/resolv.conf

現在可以正常工作了。

相關內容