AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 482348
Accepted
Solaroi Zeng
Solaroi Zeng
Asked: 2018-11-18 06:53:11 +0800 CST2018-11-18 06:53:11 +0800 CST 2018-11-18 06:53:11 +0800 CST

systemd-resolved 如何处理单标签 dns 查找请求?

  • 772

我查看了 systemd-networkd 和 systemd-resolved:

  • manpages.ubuntu.com 上的 systemd.network(5)

  • manpages.ubuntu.com 上的 systemd-resolved.service(8)

我对一些词感到困惑:

  • systemd-resolved.service(8)

    使用 LLMNR 协议将单标签名称路由到所有能够进行 IP 多播的本地接口。查找以每个接口域之一结尾的主机名将专门路由到匹配的接口。

  • systemd.network(5)

    “搜索”和“仅路由”域都用于路由 DNS 查询:查找以这些域结尾的主机名(因此,如果列出了任何“搜索域”,也将单标签名称)路由到为此接口配置的 DNS 服务器。

我的问题是:对于具有配置了“搜索域”和启用 LLMNR 的一堆接口的主机,单标签查找请求将去哪里?

我的困惑的更多细节:

  • 如果接口配置了搜索域“mydomain”并且禁用了 LLMNR,是否会将任何单标签查找请求路由到该接口?
  • 如果接口配置了搜索域“mydomain”并启用了 LLMNR,并且对“xyz”的查找请求进入,那么通过 LLMNR 的“xyz”和通过指定 dns 服务器的“xyz.mydomain”是否都会发生?
dns systemd-networkd
  • 2 2 个回答
  • 2282 Views

2 个回答

  • Voted
  1. Best Answer
    user232326
    2018-11-18T13:18:05+08:002018-11-18T13:18:05+08:00

    这个问题需要很长时间才能解释。简短(不精确)的描述是:

    单标签查找请求会去哪里?

    单标?(not localhostet al.):始终使用 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完全集中在上面。

    现在你问:

    1. 如果接口配置了搜索域“mydomain”并禁用了 LLMNR,是否会将任何单标签查找请求路由到该接口?

    2. 如果接口配置了搜索域“mydomain”并启用了 LLMNR,并且输入了“xyz”的查找请求,那么通过 LLMNR 的“xyz”和通过指定的 dns 服务器的“xyz.mydomain”是否都会发生?

    那些似乎是systemd-resolved排他性的。

    让我们尝试分析它们:

    • LLMNR 禁用?如何?我可以问吗?通过使用类似于systemd-resolvedsystemctl mask systemd-resolved? _

    如果systemd-resolved禁用/停止,则没有使用LLMNR(很可能,除非您安装 Avahi、Apple bonjour 或类似程序)但当然,这超出了systemd-resolved配置范围。

    在这种情况下,我们应该问:当名称解析失败时会发生什么?(因为没有服务器来回答它)。这是在nsswitch(文件/etc/nsswitch.conf)中配置的。Ubuntu(作为 Debian)的默认配置包含以下行:

    hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname
    

    这意味着(用 nsswitch 的说法):

    1. 首先检查/etc/hosts文件。如果没有找到,继续。

    2. 尝试mdns4_minimal(Avahi 等人),仅当名称以 .local 结尾时,它才会尝试通过多播 DNS 解析名称。如果找到但没有找到这样的 mDNS 主机,mdns4_minimal 将返回 NOTFOUND。对 NOTFOUND 的默认名称服务切换响应将尝试下一个列出的服务,但 [NOTFOUND=return] 条目会覆盖该条目并停止名称未解析的搜索。如果 mdns4_minimal 返回 UNAVAIL(未运行)然后转到 dns。

    情节加深了每个人都想成为第一个解决名字的人,每个人都提出自己做所有的决议。

    1. 中的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 服务器。

    2. 如果尚未找到(没有[notfound=return]条目),请尝试 DNS 服务器。如果名称不以 .local 结尾,或者根本不以 .local 结尾,这或多或少会立即发生。如果您删除 [NOTFOUND=return] 条目,nsswitch 将尝试通过单播 DNS 定位未解析的 .local 主机。这通常是一件坏事,因为它会将许多此类请求发送到永远无法解析它们的 Internet DNS 服务器。显然,这种情况经常发生。

    3. finalmyhostname充当 localhost、hostname、*.local 和其他一些基本名称的最后解析器。

    如果在与上述相同的列表中systemd-resolved有一个LLMNR=no集合,则应用但仍然能够解析和应用设置(全局或每个接口)。/etc/systemd/resolved.confsystemd-resolvedlocalhostDOMAINS=

    了解systemd-resolved 中有 LLMNR 设置,systemd-networkd 中也有 per-link LLMNR 设置。 链接。

    #这一切是什么意思?除非配置非常具体,否则很难确定会发生什么。您将不得不禁用服务并尝试(在您的计算机上使用您的配置)会发生什么。

    #Q1

    如果接口配置了搜索域“mydomain”并禁用了 LLMNR,是否会将任何单标签查找请求路由到该接口?

    是的,当然可以。禁用 LLMNR 只会阻止本地解析(不会询问本地(是:.local)网络上的其他服务器),但该名称的解析必须找到答案(即使是否定的)所以它可能(如果没有NOTFOUND =return entry,例如)mylocalhost.mylocaldomain当解析mylocalhost开始并且mylocaldomain在“搜索域”中有一个条目时,会联系匹配接口的 DNS 服务器以解析。笼统地回答几乎是不可能的,变数太多了。

    #Q2

    如果接口配置了搜索域“mydomain”并启用了 LLMNR,并且输入了“xyz”的查找请求,那么通过 LLMNR 的“xyz”和通过指定的 dns 服务器的“xyz.mydomain”是否都会发生?

    不,如果所有配置都正确,单个标签名称“xyz”应该只由 LLMNR 解析,即使被询问,DNS 服务器也不应该尝试解析它。嗯,这就是理论。但是 DNS 系统必须解析com(显然,否则网络会像现在这样崩溃)。但是有一个简单的解决方法:询问com.,它有一个点,它是一个 FQDN。NOERROR在任何情况下,如果服务器没有关于标签的足够信息并且解析应该继续使用根服务器(对于) ,则 DNS 服务器应该回答(带有空 A(或 AAAA) .)。或者对它知道不存在的域使用 NXDOMAIN(避免进一步解决的最佳答案)。

    控制这种情况的唯一安全方法是拥有本地 DNS 服务器并选择要解析的名称和不解析的名称。

    • 7
  2. filbranden
    2018-11-18T09:33:57+08:002018-11-18T09:33:57+08:00

    它将使用 LLMNR 和 DNS 路由到所有这些,并且将使用收到的第一个响应。

    请参阅 systemd-resolved 手册页的这一部分:

    如果查找被路由到多个接口,则返回第一个成功的响应(从而有效地合并所有匹配接口上的查找区域)。如果在所有接口上查找失败,则返回最后一个失败的响应。

    • 1

相关问题

  • Nginx - 创建链接到另一个(本地)网站的子域

  • 什么是根域?[关闭]

  • 如何使用不同的 DNS 服务器将主机名解析为 ip?

  • bind9反向解决问题

  • 如何验证我使用 9.9.9.9 作为 DNS?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve