刚刚尝试了最新的 Ubuntu 19.04,当我在本地运行自己的绑定时,它与 resolv.conf 有一些不同。以前在 18.04 中,resolv.conf 如下所示
nameserver 127.0.0.1
nameserver 127.0.0.53
而在 19.04 中它已经变成了这样
nameserver 127.0.0.53
options edns0
如果我使用 dig 或 nslookup 检查 DNS 查找,它不会使用本地绑定配置并会找不到。
如果我把
dig www.example.com @127.0.0.1
与默认 dig www.example.com 相比
dig www.example.com @127.0.0.53
它正在运行并对查找得到了正确的响应。
我尝试添加 netplan yaml 文件 /etc/netplan/00-private-nameservers.yaml
network:
version: 2
ethernets:
enp0s3:
nameservers:
addresses:
- 127.0.0.1
- 1.1.1.1
- 1.0.0.1
- 8.8.8.8
- 4.4.4.4
#search: [ nyc3.example.com ]
但它并没有像我认为的那样改变 resolv.conf 来执行本地查找。
这个版本对我来说很新,我不确定这是不是一个错误?我再次在本地运行 bind,并期望它能够在本地解析域查找。
[我已针对以下评论添加了此内容。]
root@server:/tmp# systemd-resolve --status
Global
LLMNR setting: no
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
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 (enp0s3)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 127.0.0.1
1.1.1.1
1.0.0.1
8.8.8.8
4.4.4.4
192.168.2.1
2001:569:7552:3900:4a5f:38ee:fe29:130
如果没有私有名称服务器 yaml,则会显示
Link 2 (enp0s3)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 192.168.2.1
2001:569:7552:3900:4a5f:38ee:fe29:130
答案1
您可以编辑/etc/systemd/resolved.conf
并通过以下方式将 DNS 设置为本地运行的绑定(又称 DNS 服务器)
[Resolve]
DNS=127.0.0.1
重新启动
systemctl restart systemd-resolved.service
并且当您挖掘(或如上所述查找)时,您确实会获得(仅)一个带有本地服务的 DNS 区域文件的 www.example.com A 记录,该记录具有适当的 IP 结果,但它显示的信息不如您在附加 @127.0.0.1 或 resolv.conf 在 127.0.0.53 之前包含 127.0.0.1 时显示的信息那么多
这是来自评论帮助的部分答案,应该保留,而不是像我添加的所有其他回复一样被删除,因为它们没有像这个一样被声明为有效/有用的答案或部分答案,但它们可能在某些情况下有用。 就我而言,我正在执行 DNSSEC 等,需要看到更多实质性的结果,例如来自 @127.0.0.1 的结果,或者至少这就是为什么我没有更清楚地说明它在某些情况下是正确的。 我当然期待当 resolv.conf 直接指向在 127.0.0.1 系统上运行的 DNS 而不是通过 127.0.0.53 链接到 DHCP 提供的路由器网关(通常)时获得的完整响应。
[另请注意,微薄的评论不足以展示代码块和结果的工作,因此不要删除社区关于共同解决这些问题的讨论非常重要。请考虑使用多个用户标记来指示删除状态。]
答案2
是的,这也让我抓狂。坦白说,我没有足够的耐心去彻底分析它,所以我不会直接回答你的问题。
但基本上,还有另一个疯狂的 systemd 单元,叫做systemd-已解决,它127.0.0.53:53
同时绑定在 tcp 和 udp 上。这就是您nameserver 127.0.0.53
在 中看到的原因/etc/resolv.conf
。
为了实现兼容性,systemd 还留下了更多内容,/etc/resolv.conf
作为符号链接进行解析/run/systemd/resolve/stub-resolv.conf
。
这是我不太理解的部分,但即使我在 中设置了 DNS 服务器/etc/systemd/resolved.conf
(似乎是 systemd-resolved 配置文件),有些程序根本就不会使用它。为什么?目前还不清楚。
我该如何面对?我还在 中设置了我的 DNS 服务器。然后在 中NetworkManager
设置了我的 DNS 服务器,我真正设置好了。/etc/systemd/resolved.conf
NetworkManager
那怎么办netplan.io
?我还没搞明白。但说到 DNS 服务器,目前它似乎对我没什么用。
答案3
好的,谢谢。我拒绝接受这个显而易见的事实,因为它没有包括在内。我很确定这实际上是一个错误,但操作系统开发人员的期望和想象中的用途肯定不同或正在改变。我认为他们认为如果你运行 DNS,它本身什么也不会查找,在我看来这是不切实际的。我觉得很奇怪,他们删除了之前的工作方式,没有正确地覆盖他们的基础。(我会再次尝试报告错误,因为它似乎可能是一个疏忽或意见分歧,试图精益求精等。我曾希望(并且仍然有机会)有人找到了更好的方法(并将在这里发表评论),然后手动恢复以前的功能,这样它才能真正起作用。无论如何,直到他们在 Ubuntu 20.04 或其他什么中再次恢复理智。
apt install resolvconf
然后编辑或附加到 resolvconf 服务守护进程 conf 文件以指向本地 ip 127.0.0.1
pico /etc/resolvconf/resolv.conf.d/head
就像这样看起来
nameserver 127.0.0.1
然后重新启动该部分
service resolvconf restart
然后 dig www.example.com 就会返回,/etc/resolve.conf 也会恢复到适当的状态
nameserver 127.0.0.1
nameserver 127.0.0.53
options edns0
嗯,选项 edns0 是新添加到 Ubuntu 19.04 中的,而 18.04 中没有这个选项,您知道这是因为我们添加了 bind9 包,所以我想如果您希望本地机器能够解析它提供的 DNS 记录,您也必须添加/恢复这个 resolveconf 包。我想如果它们被正确地绑定到全局系统中,您可能也不需要它,所以也许您/我们需要更多地相信 resolveconf,但我认为必须测试它是否在本地工作,是的,我希望它在本地工作,而不需要告诉每个命令如何先找到本地服务器,等等。
答案4
- 确保以下服务正常运行:
bind9
,netplan
和systemd-resolved
- 仅在 /etc/bind/named.conf.options 中向受信任的客户端提供递归服务
allow-recursion { localhost; };
(localnets
也可以)参见https://kb.isc.org/docs/aa-00269 - 从 netplan 配置文件中删除名称服务器
- 确保 /etc/resolv.conf 的内容正确设置为
nameserver 127.0.0.53
(systemd-resolved) - 编辑文件 /etc/systemd/resolved.conf 并将 DNS 选项更改为
DNS=127.0.0.1
- 检查输出
systemd-resolve --status
您不需要 resolveconf 或 NetworkManager 软件包。
可以使用以下命令确保一切正常:
host -tTXT askubuntu.com
dig A askubuntu.com
systemd-resolve query askubuntu.com
nslookup askubuntu.com
在您的 netplan 配置中设置 localhost 将是每个链接网络。