RESOLVED.CONF(5)

NAME
resolved.conf, resolved.conf.d - 网络名字解析服务配置文件

SYNOPSIS

/etc/systemd/resolved.conf

/etc/systemd/resolved.conf.d/*.conf

/run/systemd/resolved.conf.d/*.conf

/usr/lib/systemd/resolved.conf.d/*.conf

描述

这些配置文件控制着本地DNS与LLMNR名字解析

配置目录及其优先级

默认设置是在编译期间确定的， 所以仅在确实需要修改默认设置的情况下， 才需要使用配置文件。位于 /etc/systemd/ 目录中的初始配置文件， 仅包含了展示选项默认值的注释， 目的在于方便系统管理员查看和直接修改。

如果软件包想要自定义某些默认设置， 那么必须将自定义的配置文件安装到 /usr/lib/systemd/*.conf.d/ 目录中。 /etc/ 目录仅供系统管理员使用。 系统管理员可以利用下面的逻辑来覆盖默认设置： 主配置文件最先被读取， 优先级也最低。 所有 *.conf.d/ 中的配置文件 都会覆盖主配置文件中的设置。 所有 *.conf.d/ 中的配置文件(无论位于哪个目录中)， 统一按照文件名的字典顺序处理。 如果在多个配置文件中设置了同一个选项， 那么仅以文件名最靠后(字典顺序)的那一个为准。 为了便于排序， 建议给所有 *.conf.d/ 中的配置文件 都加上两位十进制数字的文件名前缀。

如果系统管理员想要屏蔽 /usr/lib/ 目录中的某个配置文件， 那么最佳做法是在 /etc/ 目录中 创建一个指向 /dev/null 的同名符号链接， 即可彻底屏蔽 /usr/lib/ 目录中的同名文件。

选项

下列选项都位于 "[Resolve]" 小节：

DNS=
    一个空格分隔的 IPv4 与 IPv6 地址列表。用作系统的全局DNS服务器。 DNS请求将被首先发送给 systemd-networkd.service(8) 中针对特定连接设置的DNS服务器或者由外部程序在运行时设置的DNS服务器，然后才会发送给此处设置的全局DNS服务器。 出于兼容性考虑，如果未设置此选项，那么将使用 /etc/resolv.conf 中的DNS服务器(如果其中确实配置了DNS服务器的话)。 此选项的默认值为空。

FallbackDNS=
    一个空格分隔的 IPv4 与 IPv6 地址列表。用作系统的替补DNS服务器。 在 systemd-networkd.service(8) 中 针对特定连接配置的任何DNS服务器的优先级都高于此选项中设置的DNS服务器， 也高于上述 DNS= 中设置的DNS服务器，同样也高于 /etc/resolv.conf 中设置的DNS服务器。 所以，此选项所设置的DNS服务器仅在实在找不到可用DNS的情况下才会被使用。 若未设置此选项，则使用程序内置的默认DNS服务器列表。

Domains=
    一个空格分隔的域名列表。 在解析不含"."的域名时，将被用作域名后缀，以将这些域名转化为FQDN(全限定域名)。 这些后缀将会严格按照这里设置的顺序依次尝试，直到解析成功。 出于兼容性考虑，如果未设置此选项， 那么将使用 /etc/resolv.conf 中列出的搜索域(如果其中确实配置了搜索域的话)。 此选项的默认值为空。

    如果指定的域名带有 "~" 前缀， 那么表示它不是一个搜索域，而是一个"路由专用域名"，也就是仅用于将指定的域名查询请求 优先路由到上文 DNS= 设置的全局DNS服务器上去。 注意，如果不存在针对特定连接的DNS服务器，那么 "~" 语法没有任何实际效果。 特殊值 "~." 表示将所有DNS查询请求 优先路由到上文 DNS= 设置的全局DNS服务器上去 (前面的波浪号表示这是一个"路由专用域名"，后面的点表示DNS根域名(也就是所有域名的后缀))。

LLMNR=
    必须设为 "resolve" 或布尔值。 控制本机对LLMNR(Link-Local Multicast Name Resolution, RFC 4794[1])的支持。 设为 yes 表示完全支持 LLMNR responder 与 resolver ； 设为 no 表示彻底不支持 LLMNR ； 设为 "resolve" 表示仅支持 LLMNR resolver 而不支持 LLMNR responder ； 注意， systemd-networkd.service(8) 中还有针对特定连接的LLMNR设置。 对于某个特定的连接来说，LLMNR 将仅在针对该连接的设置与全局设置都开启的情况下，才会开启。

DNSSEC=
    必须设为布尔值或特殊值 "allow-downgrade" 。 设为 yes 表示使用 DNSSEC 机制检查所有 DNS 应答的有效性(多播DNS 与 LLMNR 除外)。 如果某个DNS应答被鉴定为无效， 那么上层应用将会得到一个"查询失败"的结果。 注意，这意味着 DNS 服务器必须支持 DNSSEC 。 如果某个 DNS 服务器不能正确支持 DNSSEC ， 那么从该 DNS 服务器接收到的所有应答都将被视为无效应答。 设为 "allow-downgrade" 表示： 如果某个 DNS 服务器不能正确支持 DNSSEC ， 那么将不使用 DNSSEC 机制检查该 DNS 应答的有效性。 注意，这将导致 DNSSEC 机制形同虚设，从而造成安全漏洞。 设为 no 则表示彻底禁用 DNSSEC 机制。

    注意，因为 DNSSEC 需要额外查询更多的DNS数据， 所以，开启此选项会减慢DNS查询速度。

    DNSSEC requires knowledge of "trust anchors" to prove data integrity. The trust anchor for the Internet root domain is built into the resolver, additional trust anchors may be defined with dnssec-trust-anchors.d(5). Trust anchors may change at regular intervals, and old trust anchors may be revoked. In such a case DNSSEC validation is not possible until new trust anchors are configured locally or the resolver software package is updated with the new root trust anchor. In effect, when the built-in trust anchor is revoked and DNSSEC= is yes, all further lookups will fail, as it cannot be proved anymore whether lookups are correctly signed, or validly unsigned. If DNSSEC= is set to "allow-downgrade" the resolver will automatically turn off DNSSEC validation in such a case.

    Client programs looking up DNS data will be informed whether lookups could be verified using DNSSEC, or whether the returned data could not be verified (either because the data was found unsigned in the DNS, or the DNS server did not support DNSSEC or no appropriate trust anchors were known). In the latter case it is assumed that client programs employ a secondary scheme to validate the returned DNS data, should this be required.

    It is recommended to set DNSSEC= to yes on systems where it is known that the DNS server supports DNSSEC correctly, and where software or trust anchor updates happen regularly. On other systems it is recommended to set DNSSEC= to "allow-downgrade".

    In addition to this global DNSSEC setting systemd-networkd.service(8) also maintains per-link DNSSEC settings. For system DNS servers (see above), only the global DNSSEC setting is in effect. For per-link DNS servers the per-link setting is in effect, unless it is unset in which case the global setting is used instead.

    Site-private DNS zones generally conflict with DNSSEC operation, unless a negative (if the private zone is not signed) or positive (if the private zone is signed) trust anchor is configured for them. If "allow-downgrade" mode is selected, it is attempted to detect site-private DNS zones using top-level domains (TLDs) that are not known by the DNS root server. This logic does not work in all private zone setups.

    默认值是 no

Cache=
    必须设为布尔值。 默认值 "yes" 表示缓存先前已经解析成功的域名直到缓存过期，以避免重复查询。 注意，关闭缓存不但浪费网络流量，更容易造成访问延迟，尤其是在使用了DNSSEC的时候。

    注意，对于IP地址为 127.0.0.1 或 ::1 之类的本机DNS来说，DNS缓存总是关闭的。 这样做是为了避免不必要的多次缓存。

参见

systemd(1), systemd-resolved.service(8), systemd-networkd.service(8), dnssec-trust-anchors.d(5), resolv.conf(4)

NOTES

1.  RFC 4794
    https://tools.ietf.org/html/rfc4795