Sol*_*eng 6 dns systemd-networkd systemd-resolved
我查看了 systemd-networkd 和 systemd-resolved:
我对一些话感到困惑:
systemd-resolved.service(8)
使用 LLMNR 协议将单标签名称路由到所有能够进行 IP 多播的本地接口。对以每个接口域之一结尾的主机名的查找被专门路由到匹配的接口。
systemd.network(5)
“搜索”和“仅路由”域都用于 DNS 查询的路由:查找以这些域结尾的主机名(因此,如果列出了任何“搜索域”,也会将单标签名称路由到为此接口配置的 DNS 服务器。
我的问题是:对于配置了“搜索域”并启用 LLMNR 的一堆接口的主机,单标签查找请求会去哪里?
我的困惑的更多细节:
这个问题需要很长时间来解释。简短(不精确)的描述是:
单标签查找请求会去哪里?
单标签?(不是localhost等人):总是到 LLMNR 系统。
多标签?:到每个接口的DNS服务器。出现故障(或未配置)时,发送到全球 DNS 服务器。
是的,一般顺序如systemd-resolved.service(8) BUT 中所述:
配置每个接口的域名可能会影响查找的路由。有关详细信息,请参阅systemd.network(5)。
将systemd.network(5)设置为 DNS 解析的附加资源。
并且,从 RFC 4795 中了解:
由于 LLMNR 仅在本地链路上运行,因此不能将其视为 DNS 的替代品。
序列(简化)是:
本地配置的主机名被解析为按其作用域排序的所有本地配置的 IP 地址,或者——如果没有配置——IPv4 地址 127.0.0.2(在本地环回上)和 IPv6 地址 ::1(这是本地主机)。
主机名“localhost”和“localhost.localdomain”(以及任何以“.localhost”或“.localhost.localdomain”结尾的主机名)被解析为IP地址127.0.0.1和::1。
主机名“_gateway”被解析为……
中定义的映射/etc/hosts包括(前后)。
如果要搜索的名称没有点(名称类似home.有点),则由 LLMNR 协议解析。
LLMNR 查询在端口 5355 上发送和接收 。RFC 4795
某些域后缀(如“.local”,请参阅带有 的完整列表systemd-resolve --status)的多字(一个点或多个)名称通过 MulticastDNS 协议进行解析。
根据每个接口的systemd.network(5)Domains=列表检查多词名称,如果匹配,则使用该接口的 DNS 服务器列表。
其他多标签名称将路由到所有配置了 DNS 服务器的本地接口,以及全局配置的 DNS 服务器(如果有)。
你的问题的标题是:
systemd-resolved 如何处理单标签 dns 查找请求?
所以,我把我的答案集中在systemd-resolved独家上。
现在你问:
如果某个接口配置了搜索域“mydomain”并且禁用了 LLMNR,是否将任何单标签查找请求路由到该接口?
如果一个接口配置了搜索域“mydomain”并启用了 LLMNR 并且一个对“xyz”的查找请求进来了,“xyz”通过 LLMNR 和“xyz.mydomain”通过指定的 dns 服务器都会发生吗?
那些似乎在systemd-resolved排他性之外。
让我们尝试分析它们:
LLMNR 禁用 ? 如何?我可以问吗?。通过禁用systemd-resolved本身有类似的东西systemctl mask systemd-resolved?
如果systemd-resolved被禁用/停止,则没有使用LLMNR(很可能,除非您安装 Avahi、Apple bonjour 或类似程序)但当然,这不在systemd-resolved配置范围内。
在这种情况下,我们应该问:当名称解析失败时会发生什么?(因为没有服务器来回答它)。这是在nsswitch(file /etc/nsswitch.conf) 中配置的。Ubuntu(作为 Debian)的默认配置包含这一行:
主机:文件 mdns4_minimal [NOTFOUND=return] dns myhostname
这意味着(用 nsswitch 的说法):
首先检查/etc/hosts文件。如果没有找到,继续。
尝试mdns4_minimal(Avahi 等人),它仅在名称以 .local 结尾时才尝试通过多播 DNS 解析名称。如果有但没有找到这样的 mDNS 主机,mdns4_minimal 将返回 NOTFOUND。对 NOTFOUND 的默认名称服务切换响应将尝试下一个列出的服务,但 [NOTFOUND=return] 条目覆盖该条目并停止搜索,名称未解析。如果 mdns4_minimal 返回 UNAVAIL(未运行),则转到 dns。
情节变厚了,每个人都想成为第一个解决名字的人,每个人都提出自己做所有的决议。
中的dns条目nsswitch 实际上nss-resolve首先调用它替换 nss-dns
nss-resolve 是 GNU C 库 (glibc) 的 GNU 名称服务切换 (NSS) 功能的插件模块,使其能够通过 systemd-resolved(8) 本地网络名称解析服务解析主机名。它取代了传统上通过 DNS 解析主机名的 nss-dns 插件模块。
这将取决于DOMAINS=一般的几个条目/etc/systemd/resolved.conf和/或通过/etc/systemd/network文件的每个接口。这在上面的EDIT条目中进行了解释。
了解 sytemd-resolved 可能会在 nsswitch 中的 dns 条目之前自行查询 dns 服务器。
如果尚未找到(没有[notfound=return]条目),则尝试 DNS 服务器。如果名称不以 .local 结尾,这或多或少会立即发生,或者根本不以 .local 结尾。如果删除 [NOTFOUND=return] 条目,nsswitch 将尝试通过单播 DNS 定位未解析的 .local 主机。这通常是一件坏事,因为它会将许多此类请求发送到永远不会解析它们的 Internet DNS 服务器。显然,这种情况经常发生。
finalmyhostname充当localhost、hostname、*.local 和其他一些基本名称的最后一个解析器。
如果在与上述相同的列表中systemd-resolved有一个LLMNR=no集合,/etc/systemd/resolved.conf但systemd-resolved仍然能够解析localhost和应用DOMAINS=设置(全局或每个接口)。
了解systemd-resolved 中有 LLMNR 设置,systemd-networkd 中有每个链接的 LLMNR 设置。 链接。
除非配置非常具体,否则很难确定会发生什么。您将不得不禁用服务并尝试(在您的计算机中使用您的配置)会发生什么。
如果某个接口配置了搜索域“mydomain”并且禁用了 LLMNR,是否将任何单标签查找请求路由到该接口?
是的,当然可以。禁用 LLMNR 只会阻止本地解析(不会询问本地(是:.local)网络上的其他服务器)但该名称的解析必须找到答案(即使是否定的),因此它可能(如果没有NOTFOUND =return entry,例如)发生在开始解析mylocalhost.mylocaldomain时联系匹配接口的 DNS 服务器进行解析,mylocalhost并且mylocaldomain在“搜索域”中有一个条目。一般意义上的回答几乎是不可能的,变数太多了。
如果一个接口配置了搜索域“mydomain”并启用了 LLMNR 并且一个对“xyz”的查找请求进来了,“xyz”通过 LLMNR 和“xyz.mydomain”通过指定的 dns 服务器都会发生吗?
不。如果所有配置都正确,单个标签名称“xyz”应该只由 LLMNR 解析,并且即使被询问,DNS 服务器也不应该尝试解析它。嗯,这就是理论。但是 DNS 系统必须解析com(显然,否则网络会像现在这样崩溃)。但是有一个简单的解决方法: ask for com.,它有一个点,它是一个 FQDN。在任何情况下,NOERROR如果服务器没有关于标签的足够信息并且解析应该继续与根服务器(对于.),则 DNS 服务器应该回答(带有空的 A(或 AAAA))。或者使用 NXDOMAIN(避免进一步解析的最佳答案)用于它知道不存在的域。
控制这一点的唯一安全方法是拥有一个本地 DNS 服务器,并选择要解析哪些名称以及不解析哪些名称。
| 归档时间: |
|
| 查看次数: |
1880 次 |
| 最近记录: |