本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
resolvectl, resolvconf — 解析主机名、IP地址、域名、DNS资源记录、服务;内省及重新配置DNS解析器
resolvectl
[OPTIONS...] {COMMAND} [NAME...]
resolvectl 利用 systemd-resolved.service(8) 系统服务解析主机名、IP地址、域名、DNS资源记录、服务。 默认情况下,参数列表将被视为域名/主机名的列表,程序的输出将是它们所对应的 IPv4 或 IPv6 地址。 如果参数符合 IPv4 或 IPv6 格式,那么表示反解析IP地址所对应的主机名。
程序的输出包括查找所使用的协议与网络接口,
还包括查找到的信息是否是可靠的。
所有通过 DNSSEC 认证的信息将被认为是可靠的,
所有从本地可信源获取的信息也被认为是可靠的,
包括对本机主机名的解析、特殊的 "localhost
" 主机名、所有来自 /etc/hosts
中的结果。
-4
, -6
¶在解析主机名时,默认同时查询 IPv4 与 IPv6 地址。
使用 -4
表示仅查询 IPv4 地址,
使用 -6
表示仅查询 IPv6 地址。
-i
INTERFACE
, --interface=
INTERFACE
¶指定使用哪个网络接口。
可以使用网卡的数字序号,也可以使用例如 "en0
" 这样的网卡名称。
注意,在使用全局DNS(位于 /etc/resolv.conf
或
/etc/systemd/resolve.conf
)的时候,此选项没有效果。
-p
PROTOCOL
, --protocol=
PROTOCOL
¶指定查询所用的协议。可以设为下列值之一: "dns
"(经典的单播DNS)、
"llmnr
" (链路本地多播名称解析(Link-Local Multicast Name Resolution))、
"llmnr-ipv4
"(IPv4上的LLMNR)、 "llmnr-ipv6
"(IPv6上的LLMNR)、
"mdns
" (多播DNS(Multicast DNS)),
"mdns-ipv4
"(IPv4上的MDNS)、 "mdns-ipv6
"(IPv6上的MDNS) 。
默认使用所有适合的协议。
可以多次使用此选项以指定多个查询协议。
注意:(1)设置 "llmnr
" 等价于同时设置
"llmnr-ipv4
" 与 "llmnr-ipv6
" ;
(2)此选项并不表示必须强制使用指定的查询协议,
因为某个必需的网络接口与相应的配置可能并不存在;
(3)特殊值 "help
" 可用于列出所有可用的协议。
-t
TYPE
, --type=
TYPE
, -c
CLASS
, --class=
CLASS
¶指定查找的DNS资源记录的 type(A, AAAA, MX, …) 与 class(IN, ANY, …)。
如果使用了此选项,那么仅查询与指定的 type/class 匹配的DNS资源记录。
如果仅指定了 type 的话,那么 class 的默认值是"IN"。
特殊值 "help
" 可用于列出所有可用的值。
--service-address=
BOOL
¶默认值 yes 表示在使用
--service
查找服务时,同时也解析包含在 SRV 资源记录内的主机名。
--service-txt=
BOOL
¶默认值 yes 表示在使用
--service
查找 DNS-SD 服务时,同时也解析 TXT 服务元数据记录。
--cname=
BOOL
¶默认值 yes 表示追踪 DNS 的 CNAME 或 DNAME 重定向。 否则,在接收到 CNAME 或 DNAME 应答后, 直接返回错误。
--search=
BOOL
¶默认值 yes 表示 所有不含"."的主机名 都将在搜索域列表(若非空)中进行搜索。
--raw
[=payload|packet]¶以原始的二进制格式显示应答的数据。
"payload
"(缺省值)表示导出数据包的荷载。
"packet
" 表示导出原始的数据帧,
并在前面加上一个小端序形式表示的64位整数。
此选项仅用于调试目的。
--legend=
BOOL
¶默认值 yes 表示 显示应答内容的标题头与元数据。
-h
, --help
¶--version
¶--no-pager
¶不将程序的输出内容管道(pipe)给分页程序。
query HOSTNAME|ADDRESS
…
¶解析域名、IPv4/IPv6 地址。
service [[NAME
] TYPE
] DOMAIN
¶根据指定的参数列表,解析 DNS-SD 与 SRV 服务。 如果指定了三个参数,那么第一个是 DNS-SD 服务名,第二个是 SRV 服务类型,第三个是要查找的域。 在这种情况下,将会执行一次完整的 DNS-SD 风格的 SRV 与 TXT 查询。 如果只指定了二个参数,那么第一个是 SRV 服务类型,第二个是要查找的域。 在这种情况下,将省略 TXT 查询。最后,如果只指定了一个参数,那么该参数将被视为域名,并且已经加上了 SRV 类型前缀。 在这种情况下,将会执行一个 SRV 查询(不含 TXT)。
openpgp EMAIL@DOMAIN
…
¶查询存储在 OPENPGPKEY 资源记录中的 PGP 公钥。 指定的Email地址将被转换为对应的DNS域名, 并打印出所有 OPENPGPKEY 公钥。
tlsa [FAMILY
] DOMAIN
[:PORT
]…
¶查询存储在 TLSA 资源记录中的 TLS 公钥。
对每一个带有 port 与 family 前缀的
名字("_
")都会执行一次查询。
端口号(port)可以明确的写在冒号(:)之后,否则将使用默认的 port
._family
.domain
443
端口。
family 可以作为第一个参数指定,否则将使用默认值 tcp
。
status [LINK
…]
¶显示全局DNS设置、以及针对每个连接的DNS设置。 如果没有使用任何命令,那么该命令就是隐含的默认命令。
statistics
¶显示解析统计。 包括 DNSSEC 是否可用、以及 DNSSEC 验证成功与失败的数量、DNS缓存统计等数据。
reset-statistics
¶重置各种解析统计的计数器(也就是 statistics
命令输出的统计数据)。
此操作需要超级用户权限。
flush-caches
¶刷新本地全部DNS资源记录缓存。
大致相当于发送 SIGUSR2
信号给 systemd-resolved
服务。
reset-server-features
¶刷新所有已缓存的DNS服务器特性(例如是否支持DNSSCE),
以确保在执行下一次DNS查询的时候重新检测DNS服务器的各项特性。
大致相当于发送 SIGRTMIN+1
信号给 systemd-resolved
服务。
dns [LINK
[SERVER
…]]
, domain [LINK
[DOMAIN
…]]
, default-route [LINK
[BOOL
…]]
, llmnr [LINK
[MODE
]]
, mdns [LINK
[MODE
]]
, dnssec [LINK
[MODE
]]
, dnsovertls [LINK
[MODE
]]
, nta [LINK
[DOMAIN
…]]
¶获取/设置针对单个网络连接的DNS配置。
注意,这些命令仅能用于设置不受
systemd-networkd.service(8)
管理的网络连接的DNS配置,对于受 systemd-networkd 管理的网络连接,
只能通过直接编辑 .network
文件进行DNS配置(强行使用这些命令会失败)。
这些命令还可以让 systemd-resolved 知晓通过外部手段配置的网络连接的DNS配置信息。
dns
命令使用 IPv4 或 IPv6 地址来针对单个网络连接设置DNS服务器地址。
domain
命令使用有效的DNS域名(可能带有
"~
" 前缀)来针对单个网络连接设置搜索域/路由域。
default-route
命令使用一个布尔值来设置指定的网络连接是否可以用作DNS查询的默认路由,
也就是,该网络连接是否可以用来查询没有明确配置为使用特定网络连接查询的域名。
llmnr
, mdns
, dnssec
,
dnsovertls
命令分别针对单个网络连接设置 LLMNR, MulticastDNS, DNSSEC, DNSOverTLS 属性。
nta
命令针对单个网络连接设置
额外的 DNSSEC NTA 域名。
dns
, domain
, nta
命令都可以接受一个空白字符串作为参数,
表示清空先前已经设置的值列表。
有关这些设置的解释、取值、效果,详见 systemd.network(5) 手册中对应的选项。
revert LINK
¶撤销针对单个网络连接的DNS配置,也就是将指定网络连接的全部DNS设置都重置为默认值、
撤销全部 dns
,
domain
, default-route
, llmnr
, mdns
,
dnssec
, dnsovertls
, nta
命令的效果。
注意,当某个网络连接消失时,所有与之关联的配置也将自动消失,
因此,无需画蛇添足的在已经消失的网络连接上使用此命令。
resolvconf
的兼容性¶resolvectl 是一个可以多重调用的二进制可执行文件。当以 resolvconf
之名(通常是一个指向 resolvectl 的软连接)调用时,
它将以受限的 resolvconf
兼容模式运行。
它接受几乎完全相同的命令行参数,并将所有数据推送到
systemd-resolved.service(8) 服务中,
其行为与 dns
和 domain
命令非常类似。注意,此兼容命令仅支持
systemd-resolved.service 后端,这是与其他实现的显著不同。
特别需要注意的是,此兼容命令并不支持一些在其他实现中通常会支持的操作,
特别是下面这些:
-a
¶将指定的网络连接的DNS配置数据注册到
systemd-resolved 服务中。仅接受一个单独的网络连接名称作为参数,并从标准输入中读取符合
resolv.conf(5)
格式的DNS配置数据(也就是 "nameserver
" 与
"domain
"/"search
" 字段)。此操作大致等价于同时调用
resolvectl 的 dns
与
domain
组合命令。
-d
¶将指定的网络连接的DNS配置数据从 systemd-resolved 服务中删除。 此操作大致等价于调用 resolvectl revert 命令。
-f
¶与 -a
和 -d
联用,
表示悄无声息的忽略指定的网络连接不存在的警告消息,并且不做任何操作。
-x
¶这个"排除"操作仅得到了不完整的支持。
它被映射到了一个额外配置的 "~.
" 搜索域,也就是,
如果某个域名没有更精确的匹配其他网络连接上的DNS配置,
那么该域名的DNS流量将会被优先路由到此处指定的网络连接上。
-m
, -p
¶完全不支持这些选项,即使使用,也会被会被悄无声息的忽略。
-u
, -I
, -i
, -l
, -R
, -r
, -v
, -V
, --enable-updates
, --disable-updates
, --are-updates-enabled
¶完全不支持这些选项,如果使用,那么将会导致命令失败。
例 1. 解析 "www.0pointer.net
" 域名所对应的地址
$ resolvectl query www.0pointer.net www.0pointer.net: 2a01:238:43ed:c300:10c3:bcf3:3266:da74 85.214.157.71 -- Information acquired via protocol DNS in 611.6ms. -- Data is authenticated: no
例 2. 反解析 "85.214.157.71
" 地址所对应的域名
$ resolvectl query 85.214.157.71 85.214.157.71: gardel.0pointer.net -- Information acquired via protocol DNS in 1.2997s. -- Data is authenticated: no
例 3. 查找 "yahoo.com
" 域名的 MX 记录
$ resolvectl --legend=no -t MX query yahoo.com yahoo.com. IN MX 1 mta7.am0.yahoodns.net yahoo.com. IN MX 1 mta6.am0.yahoodns.net yahoo.com. IN MX 1 mta5.am0.yahoodns.net
例 4. 查找一个 SRV 服务
$ resolvectl service _xmpp-server._tcp gmail.com _xmpp-server._tcp/gmail.com: alt1.xmpp-server.l.google.com:5269 [priority=20, weight=0] 173.194.210.125 alt4.xmpp-server.l.google.com:5269 [priority=20, weight=0] 173.194.65.125 …
例 5. 查找一个 PGP 公钥
$ resolvectl openpgp zbyszek@fedoraproject.org d08ee310438ca124a6149ea5cc21b6313b390dce485576eff96f8722._openpgpkey.fedoraproject.org. IN OPENPGPKEY mQINBFBHPMsBEACeInGYJCb+7TurKfb6wGyTottCDtiSJB310i37/6ZYoeIay/5soJjlMyf MFQ9T2XNT/0LM6gTa0MpC1st9LnzYTMsT6tzRly1D1UbVI6xw0g0vE5y2Cjk3xUwAynCsSs …
例 6. 查找一个 TLS 公钥 (可以省略 "tcp
" 与
":443
" )
$ resolvectl tlsa tcp fedoraproject.org:443 _443._tcp.fedoraproject.org IN TLSA 0 0 1 19400be5b7a31fb733917700789d2f0a2471c0c9d506c0e504c06c16d7cb17c0 -- Cert. usage: CA constraint -- Selector: Full Certificate -- Matching type: SHA-256