resolvconf 和 NetworkManager 设置了错误的名称服务器

Fir*_*ore 58 networking dns dhcp 17.10

我的 DNS 服务器是192.168.1.152.

此 DNS 由 DHCP 提供给客户端。LAN 上的 Windows 客户端使用该 DNS 正确解析名称,但我的 Ubuntu 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
Run Code Online (Sandbox Code Playgroud)

这是它应该使用我的 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
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

我运行了那个命令。在 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
Run Code Online (Sandbox Code Playgroud)

我不想在配置文件中对 DNS 服务器的 IP 进行“硬编码”,因为我在更改网络时将无法解析。

如何让 resolvconf 和 NetworkManager自动设置 DHCP 服务器的 IP /etc/resolv.conf

tek*_*aul 70

已知的systemd错误

如果 DNS IP 发生变化,无需重新配置的临时解决方法

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

  • 这个解决方案有点工作,主机和 nslookup 命令正确解析名称,但 wget 和浏览器不是 (2认同)
  • 这是正确的...当前的错误是“/etc/resolv.conf”的链接来自“/run/systemd/resolve/stub-resolv.conf”,它应该是“/run/systemd/” solve/resolv.conf` **请注意,`/etc/resolv.conf` 在任何一种情况下都不真正存在** (2认同)
  • 而不是`reboot`,它对我来说是做`service systemd-resolved restart && sudo systemctl restart networking` (2认同)

小智 65

尝试编辑/etc/systemd/resolved.conf,添加您想要的 DNS 服务器:

改变这个:

[Resolve]
#DNS=
Run Code Online (Sandbox Code Playgroud)

对此(但使用你想要的 - 这是一个例子):

[Resolve]
DNS=192.168.1.152
Run Code Online (Sandbox Code Playgroud)

之后,重新启动服务:

service systemd-resolved restart
Run Code Online (Sandbox Code Playgroud)

当你检查状态时,你应该看到

$ 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
Run Code Online (Sandbox Code Playgroud)

  • systemd 太坏了。DHCP 告诉主机 DNS 应该是什么(以及一堆其他网络设置),您不必更改主机上的任何文件即可使其正常工作。 (23认同)
  • 看起来不太理想,每次更改 DNS 服务器/网络时都必须这样做 (5认同)
  • 每次 DNS IP 更改时(例如在不同网络上),您都需要重新配置。 (3认同)

Fab*_*ola 16

我终于为 ubuntu 17.10 解决了这个问题。默认情况下,此版本的 Ubuntu 使用systemd-resolved,我希望它在下一个版本中会稳定。

为了使用自定义 dns 而不是本地 systemd-resolved 缓存,请执行以下操作:

  1. 添加新的名称服务器。/etc/systemd/resolved.conf以 sudoer 的身份编辑文件。在这里,我已经注释掉了 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
Run Code Online (Sandbox Code Playgroud)