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


34

我的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以在其中自动设置DHCP服务器的IP /etc/resolv.conf

Answers:


37

尝试编辑/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

这是更改/ etc / systemd / resolved后的systemd-resolve --status.conf pastebin.com/AeUFQkyB 浏览器仍然无法解析名称。
FireSpore

12
systemd太坏了。DHCP告诉主机DNS应该是什么(以及许多其他网络设置),您无需更改主机上的任何文件即可工作。
teknopaul

4
看起来并不理想,每次更改DNS服务器/网络时都必须执行此操作
Victor

1
每次更改DNS IP(例如在不同的网络上)时,您都需要重新配置。
维克多

34

已知的系统错误

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

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

2
该解决方案有些奏效,host和nslookup命令可以正确解析名称,但是wget和浏览器无法正常运行
-FireSpore

1
这是正确的...当前的错误是链接的/etc/resolv.conf来源/run/systemd/resolve/stub-resolv.conf是bollox,应/run/systemd/resolve/resolv.conf 注意的是,/etc/resolv.conf在两种情况下均不存在
先生

@FireSpore:ping那可以吗?host并以nslookup不同于ping或的方式解析主机名wget。您可能需要寻找/etc/nsswitch.conf一种溶质。
朱洪波

9

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

为了使用自定义dns代替本地systemd解析的缓存,请执行以下操作:

  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

1
每次更改DNS IP(例如在不同的网络上)时,您都需要重新配置。
维克多

维克多,您有最佳的解决方案吗?如果您使用静态网络配置,则情况相同
Fabio Fumarola

此答案适用于静态和动态配置:askubuntu.com/a/974482/343617
维克多

谢谢,我指出的解决方案是静态的。我同意
Fabio Fumarola

这对我来说适用于新的18.04安装
JamesCW

1

我整理了一个脚本来解决Netplan问题,该脚本当前不支持取代DHCP提供的DNS服务器和域搜索顺序的功能。它创建Netplan yaml文件并配置systemd-resolved以按预期工作。

################## Start Netplan config (renderer: NetworkManager)
#  Some useful commands for customisation
# NetConn=$(nmcli device show|grep GENERAL.CONNECTION|head -n1|awk '{print $2}')
# IP=$(nmcli device show|grep IP4.ADDRESS|head -n1|awk '{print $2}')
# GATEWAY=$(nmcli device show|grep IP4.GATEWAY|head -n1|awk '{print $2}')
# sed -i 's/renderer: networkd/renderer: NetworkManager/' //etc/netplan/01-netcfg.yaml
######################################
systemctl start NetworkManager
NIC=$(nmcli device show|grep GENERAL.DEVICE|head -n1|awk '{print $2}')

#####   create Netplan yaml config file
cat >/etc/netplan/01-netcfg.yaml <<EOF 
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
  network:
   version: 2
   renderer: NetworkManager
   ethernets:
EOF
echo "    ${NIC}:" >> /etc/netplan/01-netcfg.yaml
cat >>/etc/netplan/01-netcfg.yaml <<EOF
      dhcp4: yes
      nameservers:
        search: [abc.domain.edu, def.domain.edu]
        addresses: [10.10.11.22, 10.10.11.23]

EOF

#work around DNS resolv bug
systemctl stop systemd-resolved
sed -i 's/#DNS=/DNS=10.10.11.22 10.10.11.23/' /etc/systemd/resolved.conf
sed -i 's/#Domains=/Domains=abc.domain.edu def.domain.edu' /etc/systemd/resolved.conf
systemctl start systemd-resolved
systemctl restart NetworkManager
netplan apply
reboot
############### End Netplan Config

1

对我有用的解决方案已发布在我的博客上

使用Nano Editor编辑这2个文件

nano /etc/resolv.conf
nano /etc/resolvconf/resolv.conf.d/head

添加您要使用的DNS服务器

nameserver 9.9.9.9
nameserver 127.0.0.1

然后重新启动服务

service systemd-resolved restart

最终检查:

cat /etc/resolv.conf

做nslookup

nslookup google.com 

我只是使用了它,它解决了我家里的笔记本电脑上的问题,但是将来在我离开家庭网络时,我会看到它会引起问题,因为主要和辅助dns服务器仍将是我的家具有局域网地址的服务器。


2
每次更改DNS IP(例如在不同的网络上)时,您都需要重新配置。
维克多

它不是很优雅,但是它的工作有时会破坏我的就寝时间。
罗德里戈·法拉利

/etc/resolv.conf由于systemd-resolved重启期间文件将被覆盖,因此无法进行编辑。只需编辑/etc/systemd/resolved.conf。在这里看到我的答案:askubuntu.com/questions/977243/ubuntu-17-10-disable-netplan/…–
EnzoR

1

/etc/resolv.conf不是问题。systemd-resolved只是默认为未配置,因此它将使所有查找失败。随意抱怨未配置与合理的默认值。

手动将名称服务器添加到中systemd-resolved。(根据Olorin在下面的评论进行编辑,以添加mkdir/etc而不是正确的路径/lib,以便保留系统更新的权限)

sudo mkdir -p /etc/systemd/resolved.conf.d
sudo nano /etc/systemd/resolved.conf.d/00-my-dns-server-is.conf

加:

[Resolved]
Cache=yes
DNS=192.168.1.152

然后...

sudo systemctl daemon-reload

systemd-resolved虽然很聪明,但是由于软件包维护者没有对其进行配置,它看起来很愚蠢,因为软件包维护者不相信合理的默认值。我们可以将13个Internet根服务器(也称为“ djb方式”)放置在其中,或10个Opennic服务器:https ://pastebin.com/JBfYVVtG 或三个最快的Opennic服务器(按名称平台衡量)。当然,还有ISP名称服务器。当然还有Google。systemd-resolved不是问题。我是问题。


尽管您可能不想编辑文件/usr/lib,但在软件包升级时这些文件可能会被覆盖。我认为应该在某处找到相应的文件/etc/systemd(它已经/etc/systemd/resolved.conf准备好可供管理员编辑了)。
Olorin

1
man resolve.conf.d和d是,是/etc/systemd/resolved.d。我注意到我们经常必须使用/etc/[path].d。bob @ laptop l /etc/systemd/resolved.conf.d ls:无法访问“ /etc/systemd/resolved.conf.d”:没有这样的文件或目录
BobDodds

0

在我的系统上,我发现一个错误的符号链接:/etc/resolv.conf是一个指向以下内容的符号链接:/run/systemd/resolve/stub-resolv.conf

该文件仅包含一行:

nameserver 127.0.0.53#53

结果,经常缺少本地网络的DNS查找。

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

现在可以正常工作了。


0

奇怪,但是在Ubuntu 18.04上对我有用的唯一解决方案是在这里找到的解决方案:

首先,/etc/resolv.conf通过设置所需的名称服务器进行更改:

# nano /etc/resolv.conf

设置例如

nameserver 8.8.8.8

然后做

# chattr +i /etc/resolv.conf

这样可以保护/etc/resolv.conf文件,因此包括root用户在内的任何人都不能对其进行修改。


-3

我也有同样的问题。每次重新启动,都无法解决。我已经卸载了所有内容,并已将其重新安装约50次。简直就是坏了。

因此解决方法是...。“每次启动PC时只需应用一些设置,即可允许90%的主机名解析,但wget和apt-get更新和升级会无缘无故地随机失败”

猫/etc/systemd/resolved.conf

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See resolved.conf(5) for details

[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=yes
#MulticastDNS=yes
#DNSSEC=no
#Cache=yes
#DNSStubListener=udp

使用Ubuntu 17.10 Desktop时,您必须编辑一个文件,该文件显示请勿编辑此文件BLAH BLAH BLAH

好吧,这是它唯一的工作方式〜!

root@nas:~# cat /etc/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.
nameserver 8.8.8.8

因此,删除127.0.0.53 IP作为名称服务器,然后输入另一个,例如google。看来我的实际DNS IP地址也不能解析主机名(即使它可以在家里的其他10台计算机和设备上运行),但google的工作正常。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.