标签: systemd-resolved

如何配置 systemd-resolved 和 systemd-networkd 使用本地 DNS 服务器解析本地域和远程 DNS 服务器解析远程域?

我已连接到局域网,并通过网关访问 Internet。本地网络中有 DNS 服务器,它能够从本地网络解析计算机的主机名。

我想配置systemd-resolvedsystemd-networkd,以便本地主机名的查找请求将专门定向(路由)到本地 DNS 服务器,而所有其他主机名的查找请求将专门定向到另一个远程 DNS 服务器。

假设我不知道配置文件在哪里,或者我是否应该添加更多文件并要求在答案中指定它们的路径。

linux dns systemd systemd-networkd systemd-resolved

60
推荐指数
2
解决办法
11万
查看次数

升级到 Ubuntu 22.04 后使用 ifupdown 和 systemd-resolved 时 DNS 损坏

长话短说

sudo cp -p /etc/network/if-up.d/resolved /etc/network/if-up.d/.resolved.broken-orig

#Edit /etc/network/if-up.d/resolved and take out the extraneous quotes on lines 48 and 52
#The fix looks like:
diff /etc/network/if-up.d/.resolved.broken-orig /etc/network/if-up.d/resolved
48c48
< "$DNS"="$NEW_DNS"
---
> $DNS="$NEW_DNS"
52c52
< "$DOMAINS"="$NEW_DOMAINS"
---
> $DOMAINS="$NEW_DOMAINS"
Run Code Online (Sandbox Code Playgroud)

至少,这看起来是有效的。


最近通过将旧系统升级到 Ubuntu 22.04.1 LTSdo-release-upgrade并遇到 DNS 问题,错误消息为:

nslookup google.com
Server:     127.0.0.53
Address:    127.0.0.53#53

** server can't find google.com: SERVFAIL
Run Code Online (Sandbox Code Playgroud)

/etc/network/if-down.d/resolved: 12: mystatedir: not found
/etc/network/if-up.d/resolved: 71: DNS: not found
/etc/network/if-up.d/resolved: 1: /run/network/ifupdown-inet-em1: DNS=8.8.8.8: not found
/etc/network/if-up.d/resolved: 2: /run/network/ifupdown-inet-em1: DOMAINS=local_search_domain.com: …
Run Code Online (Sandbox Code Playgroud)

ubuntu systemd-resolved ifupdown

19
推荐指数
1
解决办法
7155
查看次数

为什么 systemd-resolved 不使用我的本地 DNS 服务器?

我正在使用本地 BIND9 服务器来托管一些本地 dns 记录。在尝试挖掘本地域名时,如果我没有明确告诉 dig 使用我的本地 BIND9 服务器,我将无法找到它。

user@heimdal:~$ dig +short heimdal.lan.se
user@heimdal:~$ dig +short @192.168.1.7 heimdal.lan.se
192.168.1.2
Run Code Online (Sandbox Code Playgroud)

使用 Ubuntu 17.04 和 systemd-resolved。这是我的/etc/resolved的内容

# 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)

以及 systemd-resolve --status 的输出

Global
         DNS Servers: 192.168.1.7
                      192.168.1.1
          DNSSEC NTA: 10.in-addr.arpa …
Run Code Online (Sandbox Code Playgroud)

ubuntu dns bind dig systemd-resolved

15
推荐指数
2
解决办法
6万
查看次数

如何允许 systemd-resolved 侦听环回以外的接口?

systemd-resolved 是一个守护进程,除其他外,它通过侦听本地环回接口上的 IP 地址 127.0.0.53 充当 DNS 服务器。

我想让守护进程监听另一个接口。我的用例是将它公开给 docker 容器,以便 docker 容器共享由 systemd-resolved 提供的 DNS 缓存。我知道如何将主机配置为 docker 容器的 DNS 服务器,但至少在默认情况下,systemd-resolved 拒绝这些 DNS 查询,因为它们不是来自环回接口,而是来自 docker 桥接接口。

使用 dnsmasq(类似于 systemd-resolved 的工具),我通过添加listen-address=172.17.0.1到配置文件. 不幸的是,我找不到 systemd 解析的等效项。

由于 systemd-resolved 至少在 Ubuntu 18.04 上是默认设置,因此我想要一个适用于此配置的解决方案。

有没有办法配置 systemd-resolved 侦听的接口?

dns systemd docker systemd-resolved

14
推荐指数
3
解决办法
8172
查看次数

/run/systemd/resolve/stub-resolv.conf 和 /run/systemd/resolve/resolv.conf 有什么区别?

要在全新的 Kubuntu 19.10 笔记本电脑中配置自定义 DNS 服务器,仅添加以下内容是不够的/etc/systemd/resolved.conf

DNS=77.88.8.7 77.88.8.3 #Yandex 的 DNS,即使在 Google 图片上也没有色情内容

我还必须更改符号链接 /etc/resolv.conf

$ ls -l /etc/resolv.conf 
lrwxrwxrwx 1 root root 37 oct 26 01:48 /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf
$ sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

/run/systemd/resolve/stub-resolv.conf只有 ISP 给定的 DNS,而自定义 DNS 仅在/run/systemd/resolve/resolv.conf.

看的时候:

man systemd-resolved.service
Run Code Online (Sandbox Code Playgroud)

它说推荐的文件是/run/systemd/resolve/stub-resolv.conf,但我不明白它们的区别(可以理解和简单的解释应该是公认的答案)。如果是这样,我如何将系统设置为使用该文件而不是其他文件使用全局配置的 DNS?

注意:在有大量 WiFi 连接的笔记本电脑上,配置每个连接的 DNS 是不可行的,就像许多站点中所建议的那样,这些站点说明了我刚刚描述的如何实现这一点

好奇的补充信息:

/run/systemd/resolve/$ diff stub-resolv.conf resolv.conf 
3,8c3,4
< # This is a dynamic resolv.conf file for connecting local clients …
Run Code Online (Sandbox Code Playgroud)

resolv.conf systemd-resolved

14
推荐指数
1
解决办法
4361
查看次数

使用 systemd-resolved 覆盖 Ubuntu 20.04 DNS

如何配置 Ubuntu 20.04 系统以覆盖默认 DNS?

似乎默认情况下有一个全局和每个链接的 DNS 设置。

我尝试了一些不起作用的事情:

  • /etc/systemd/resolved.conf使用 DNS 服务器进行编辑
  • /etc/systemd/network/enp0s3.conf使用配置的 DNS 服务器创建
  • 通过编辑从 DHCP 请求中删除所有与 DNS 相关的参数 /etc/dhcp/dhclient.conf

所有这些更改(和组合)都会导致 DNS 服务器被添加到全球 DNS 服务器列表中。

大多数“解决方案”是安装resolvconf或用/etc/resolv.conf文件替换符号链接,并在那里设置 DNS 服务器。这两个似乎都是一种解决方法。

我想使用现有工具 ( systemd-resolved) 来覆盖 DNS 服务器。

正如@xenoid 在评论中所建议的那样:通过 GUI 设置接口的 DNS 会生成一个/etc/NetworkManager/system-connections/enp0s3.nmconnection包含正确 DNS 服务器的文件,输出resolvectl status包括正确的 DNS 服务器,但这不是我的想法。我正在寻找一种使用 进行配置的解决方案,这在systemd-resolved我能找到的情况下是可能的,但目前尚不清楚如何。因为这需要 GUI 安装。

ubuntu dns systemd-resolved

14
推荐指数
2
解决办法
2万
查看次数

如何在本地网络上为 mdns 多播 dns 配置 systemd-resolved?

Ubuntu 18

我已经做了大量的研究,并且接近把这张图片拼凑起来,但不太明白:

如何为 mdns 配置 systemd-resolved?

我的目标具体是:

  • 在 10.0.0.0/16 网络上启动服务器
  • 让新服务器给自己一些任意的名字,比如 foo1
  • 能够使用名称 foo1 从同一网络上的另一台机器连接到该服务器

谁能告诉我如何专门使用 systemd-resolved 来实现这一点?

谢谢

到目前为止,我已经在下面配置了resolved.conf

ubuntu@ip-10-0-0-229:/etc$ --> CHROME -> cat /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. …
Run Code Online (Sandbox Code Playgroud)

ubuntu systemd mdns systemd-resolved

11
推荐指数
3
解决办法
2万
查看次数

什么是 DNS 服务器、解析器和存根解析器?

https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html#Description

此外,systemd-resolved 在本地环回接口上的 IP 地址 127.0.0.53 上提供本地 DNS 存根侦听器。直接发出 DNS 请求、绕过任何本地 API 的程序可能会被定向到这个存根,以便将它们连接到 systemd-resolved。

我该如何理解`/etc/resolv.conf` 的格式?

DNS 服务器和解析器(“存根解析器”)可以不同,您可以将 DNS 请求传递给 127.0.0.53,后者将它们传递给您的路由器以获得实际的 DNS(例如,它可以处理本地主机但传递对远程主机的请求以获得完整的 DNS) )。

什么是 DNS 服务器、解析器和存根解析器?

我也听说过两种 DNS 服务器(一种叫做“解析器”,另一种我忘记了)。这两种是什么意思?

dns terminology systemd-resolved

10
推荐指数
2
解决办法
9396
查看次数

使用 systemd-resolved 在系统上设置全局 DNS 服务器覆盖的推荐方法是什么?

我希望我较新的 GNU/Linux 系统 (Ubuntu 18.04 LTS) 对所有DNS 查询使用单个手动配置的 DNS 服务器。在过去,我可以简单echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf地破坏/etc/resolv.conf文件并为我的整个系统持久设置 DNS 服务器的 IP 地址。

在这个(以及许多较新的 GNU/Linux 发行版)上,/etc/resolv.confresolvconf(8)实用程序管理。在 Ubuntu 18.04 上,此文件包含如下一行:

nameserver 127.0.0.53
Run Code Online (Sandbox Code Playgroud)

从 中可以看出sudo ss --listening --numeric --processes,本地系统的systemd-resolvedDNS 存根解析器绑定到此 IP 地址,并在端口53上侦听传入的 DNS 请求。因此,文件中的上述nameserver行通过“正常”DNS 请求/etc/resolv.conf将所有不使用systemd-resolvedD-Bus 或 glibc API 的应用程序定向到systemd-resolved服务。

这一切都很好,但这一切都意味着我不能再简单地将持久更改写入/etc/resolv.conf文件以影响名称服务器更改。

在阅读了大量 手册 博客文章后,我了解到我可以通过编辑/etc/systemd/resolve.conf …

dns systemd-resolved

10
推荐指数
3
解决办法
3509
查看次数

如何从 systemd-resolved 中删除错误的 DNS 服务器 IP?

所以我正在测试一个路由器,它向我网络上的所有机器添加了一些随机的 IPv6 地址,包括我的 DNS 服务器。不知何故,这些 IP 作为有效的 DNS 服务器被广播(不确定只有真正的路由器如何发送 IPv6 RA 数据包)但长话短说,现在我所有的机器都向一个不存在的 IP 地址发送 DNS 查询。

如果我重新启动resolvedsystemctl restart systemd-resolved那么resolvectl仍然将这些虚假 IP 显示为有效的名称服务器。

它们被列在/etc/resolv.conf所以如果我在那里删除它们并重新启动systemd-resolved它只会再次添加虚假的 IP。

如果我查看日志,journalctl --unit=systemd-resolved它会告诉我虚假 IP 正在“降级功能模式”下运行,但没有告诉我从哪里找到这些 IP。

它从哪里获取这些错误的 IP 地址?是否有一些缓存文件我需要删除才能让它回到仅使用 IPv6 路由器广告提供的 IP?

ipv6 systemd-resolved

7
推荐指数
1
解决办法
7272
查看次数