Skip to content

Latest commit

 

History

History
360 lines (236 loc) · 21.1 KB

85.3、dig 命令.adoc

File metadata and controls

360 lines (236 loc) · 21.1 KB

dig - DNS 查找工具

Note

翻译自 dig - DNS lookup utility v9_17_9

语法

dig [@server] [-b address] [-c class] [-f filename] [-k filename] [-m] [-p port#] [-q name] [-t name] [-v] [-x addr] [-y [hmac:]name:key] [ [-4] | [-6] ] [name] [type] [class] [queryopt…​]

dig [-h]

dig [global-queryopt] [query…​]

描述

dig 是一个灵活的用于查询 DNS 名称服务器的工具。它执行 DNS 查找,并显示来自所请求的名称服务器返回的回答。大多数 DNS 管理员使用 dig 排查 DNS 问题,因为它灵活、便于使用、输出清晰。其他的查找工具的功能大概比 dig 的少。

虽然 dig 通常与命令行参数连用,但它也有一个批量操作模式用于从文件读取查找请求。当给出 -h 选项时,会打印出一个简略的命令行参数和选项的摘要。BIND 9 所实现的 dig 允许从命令行发出多个查找。

除非它被要求请求特定的名称服务器,否则 dig 会尝试每个列举在 /etc/resolv.conf 中的服务器。若不存在可用的服务器地址,那么 dig 将会向本机发送请求。

当不给出任何命令行参数或选线时,dig 执行对 .(也就是根域名)的 NS 请求。

可以通过 ${HOME}/.digrc 设置每用户的 dig 默认值。读取该文件,并将该文件中的任何选项附在任何命令行参数之前。-r 选项关闭该特性,对于需要可预测行为的脚本很有用。

IN 和 CH 类型名与 IN 和 CH 顶级域名重叠。要么使用 -t-c 选项分别指定类型和类别,并使用 -q 指定域名,或者使用 IN.CH. 来查找该顶级域名。

简单用法

一个典型的 dig 调用如下所示:

dig @server name type

其中:

server

是要请求的名称服务器的名称或 IP 地址。它可以是 点-数字 格式的 IPv4 地址,或者 分号分隔 格式的 IPv6 地址。当提供给 server 参数是一个主机名,dig 首先解析该名称,之后再请求该名称服务器。
若不给出 server 参数,那么 dig 就会参考 /etc/resolv.conf;若找到了一个地址,则向那个地址的名称服务器发送请求。如果使用了 -4 或者 -6 选项,那么仅会尝试该限定对应的地址。若不存在可用的地址,那么 dig 向本机发送请求。会显示来自名称服务器的响应。

name

将要被查找的资源记录的名称。

type

指出将要查找什么类型——ANY、A、MX、SIG 等。type 可以为任意有效请求类型。若不给出 type,那么 dig 执行 A 记录查找。

选项

-4

该选项指出仅使用 IPv4。

-6

该选项指出仅使用 IPv6。

-b address[#port]

该选项设置请求的源 IP 地址。address 必须为主机网络接口上的一个有效地址,或者为 0.0.0.0::。可以额外地通过 #port 指定一个端口。

-c class

该选项设置请求的类别。默认的 class 为 IN;其它的类别有 HS 对应的 Hesiod 记录,或者 CH 对应的 Chaosnet 记录。

-f file

该选项设置批处理模式,在此模式下 dig 从给出的 file 中读取要处理的查找请求。文件中的每一行都应该以 dig 命令行界面所使用的方式来指定。

-k keyfile

该选项告诉 named 用一个给定文件中读取的密钥以 TSIG 签名请求。密钥文件可以通过 tsig-keygen 生成。在 dig 中使用 TSIG 认证,所请求的名称服务器需要知道密钥以及所使用的算法。在 BIND 中,这些信息可以通过在 named.conf 中提供合适的 key 以及 server 语句来实现。

-m

该选项启用内存使用排错。

-p port

该选项将请求发送至服务器的非标准端口,而非默认端口 53。该选项用于测试被配置为监听非标准端口上的请求的名称服务器。

-q name

该选项指定要请求的名称服务器。该选项方便将 name 与其它参数区分开来。

-r

该选项指出不应该读取来自 ${HOME}/.digrc 的选项。它常用于需要可预测行为的脚本。

-t type

该选项指出要请求的资源记录类型。可以为任何有效的请求类型。若它是被 BIND 9 支持的资源记录类型,那么它就可以以类型助记(比如 NS 或者 AAAA)的形式指定。默认请求类型为 A,除非使用了表示反向查询的 -x 选项。可以指定类型 AXFR 来请求 zone 转换。当需要增量 zone 转换(IXFR)时,设置 typeixfr=N。增量 zone 转换包含了自 zone 的 SOA 记录的序列号为 N 之后的的全部修改。
全部的资源记录类型都可以以 TYPEnn 的形式表达,其中 nn 为类型的数字。若是 BIND 9 不支持的资源记录类型,那么结果将以 RFC 3597 中描述的显示。

-u

该选项指出打印出的请求时间应该以微秒而非毫秒作为单位。

-v

该选项会打印版本号并退出。

-x addr

该选项设置简单反向查询,以将地址对应名称。addr 是一个 点-数字 格式的 IPv4 地址,或者 分号分隔 的 IPv6 地址。当使用 -x 选项是,就不需要提供 nameclasstype 参数了。dig 会自动执行名称类似 94.2.0.192.in-addr.arpa 的查询,并分别设置请求类型和类别为 PTR 和 IN。 IPv6 地址以 IP6.ARPA 域中的 nibble 格式查询。

-y keyname:secret

该选项用给定的认证密钥以 TSIG 签名请求。keyname 是密钥的名称,secret 是 base64 编码的分享密钥。hmac 是密钥算法的名称;有效值为 hmac-md5 hmac-sha1 hmac-sha224 hmac-sha256 hmac-sha384 hmac-sha512。若不指定 hmac,那么默认值为 hmac-md5;若 MD5 不可用,则默认值为 hmac-sha256

Note

仅应该使用 -k 选项,而不应该使用 -y 选项,因为 -y 中分享密钥以明文形式出现在命令行参数中。它可能会在 PS1 中输出,或者由用户 shell 维护的历史文件中出现。

请求选项

dig 提供了一系列影响查找的执行以及返回的显示的请求选项。有些选项会设置/取消请求头的标识位,有些选项决定回答中的那些段应该被打印,其他的选项决定超时和重试的策略。

每个请求选项由关键字和前序的一个加号(+)构成。有些关键字可以设置/取消一个选项;这些选项可以通过在前面追加关键字 no 来反转该关键字的含义。其它关键字向该选项设置值,比如超时间隔。它们具有形式 +keyword=value。关键字可以简写,只要该简写不会产生歧义;举例来说,+cd 等价于 +cdflag。请求选项为:

+[no]aaflag

该选项为 +[no]aaonly 的同义词。

+[no]aaonly

该选项设置请求中的 aa 标识。

+[no]additional

该选项显示[或不显示]回复中的 additional section。默认为显示。

+[no]adflag

该选项设置[或不设置]请求中的 AD(authentic data)位。其要求服务器按照服务器的安全策略返回全部的 answer 和 authority section 均被验证是否为安全的。AD=1 表示全部的记录均被验证为安全的,且挥发并非来自 OPT-OUT 范围。AD=0 表示 answer 的部分内容非安全,或者未验证。该位默认设置。

+[no]all

该选项设置或清理全部的显示标识。

+[no]answer

该选项显示[或不显示]回答的 answer section。默认为显示。

+[no]authority

给选项显示[或不显示]回答的 authority section。默认为显示

+[no]badcookie

该选项在收到 BADCOOKIE 响应后对一个新的服务器重试查找。

+[no]besteffort

该选项尝试显示错误的报文中的内容。默认为不显示错误的回答。

+bufsize[=B]

该选项将使用 EDNS0 通告的 UDP 报文缓冲大小设置为 B 字节。该缓冲的最大、最小量分别为 65535 和 0。+bufsize 还原默认的缓冲大小。

+[no]cdflag

该选项设置[或取消设置]请求中的 CD(checking disable)位。它要求服务器不要对响应执行 DNSSEC 检查。

+[no]class

该选项显示[或不显示]记录中的 CLASS。

+[no]cmd

该选项切换在输出中打印初始注释、dig 版本、以及以启用的请求选项。该选项永远有一个全局影响;它不可以在全局设置,然后再每个查找中覆写。默认为打印该注释。

+[no]comments

该选项切换输出中的部分注释行的显示,它们是关于包头部和 OPT pseudosection、以及 response section 的名称的信息。默认为打印这些注释。
输出中其他类型的注释将不会受该选项的影响,但可以通过其他命令行参数控制。它们包括 [no]cmd`、`[nquestiono][no]stats` 以及 `[no]rrcomments

+[no]cookie=####

该选项发送[或不发送]一个 COOKIE EDNS 选项,并附带一个可选值。重演上一个回复的 COOKIE 允许服务器识别上一个客户端。默认为 +cookie

+[no]crypto

该选项切换 DNSSEC 记录中 cryptographic 字段的显示。这些字段的内容对于大多数 DNSSEC 检验失败的排错都是没必要的。默认为显示这些字段。当隐藏时,它们由字符串 [omitted] 替代,若是 DNSKEY 导致,那么会替换 key ID 的显示为 [ key id = value ]

+[no]defname

该选项被启用,被认为与 +[no]search 同义。

+[no]dns64prefix

查找 IPV4ONLY.ARPA AAAA,并答应任何找到的 DNS64 前缀。

+[no]dnssec

该选项要求在请求的 addtional section 中的 OPT 记录中设置 DNSSEC OK(DO)来发送 DNSSEC 记录。

+domain=somename

该选项设置搜索列表包含单一域名 somename,如同它在 /etc/resolv.conf 中以 domain 语句指定的一样,并启用搜索列表处理,就如同给出了 +search 选项一样。

+dscp=value

该选项设置发送请求时,要使用的 DSCP 码点。有效的 DSCP 码点在范围 [0..63]。默认不明确设置任何码点。

+[no]edns[=#]

该选项指请求中的 EDNS 版本。有效值为 0 至 255。设置 EDNS 版本会导致发送 EDNS 请求。+noedns 将清除已记忆的 EDNS 版本。ENDS 默认被设置为 0。

+[no]ednsflags[=#]

该选项位为 must-be-zero EDNS 标识位(Z bits)设置值。可接受十进制、十六进制、八进制的值。将忽略具名标识(比如 DO)。默认情况下,不设置任何 Z bits。

+[no]ednsnegotiation

该选项启用/停用 EDNS 版本协商。默认情况下,启用 EDNS 协商。

+[no]ednsopt[=code[:value]]

该选项以码点 code 以及可选的十六进制的 value 指定 EDNS 选项。code 可以为 EDNS 选项名(比如 NSIDECS)或者任意的数字值。+noednsopt 清除已设置的 EDNS 值。

+[no]expire

该选项发送uoge EDNS Expire 选项。

+[no]fail

该选项指出如果收到了 SERVFAIL,named 应该尝试[不应该尝试]下一个服务器。默认值为不要尝试下一个服务器,为普通呆解析器行为的反转。

+[no]header-only

该选项将发送一个具有 DNS 头部但是不具有 question section 的请求。默认为加上 question section。当设置该参数时,忽略请求类型和请求名称。

+[no]identify

当指定 +short 选项时,该选项指定显示[或不显示]提供答案的 IP 地址和端口号。若要求了名称的短格式,那么默认值为不显示提供答案的服务器的源地址和端口号。

+[no]idnin

该选项处理[或不处理]输入的 IDN 域名。它要求在编译时启动了 IDN SUPPORT
默认值为在标准输出为 tty 时处理 IDN。当 dig 的输出被重导向至文件、管道以及其它非 tty 的文件描述符时,关闭在输入中处理 IDN。

+[no]idnout

该选项在输出时转换[或不转换] puny code。它要求在编译时启动了 IDN SUPPORT
默认值为在标准输出为 tty 时处理 puny code。当 dig 的输出被重导向至文件、管道以及其它非 tty 的文件描述符时,关闭在输出中处理 puny code。

+[no]ignore

该选项忽略[或不忽略] UDP 响应中截断,若不忽略就尝试使用 TCP 重试。默认值为尝试 TCP 重试。

+[no]keepalive

该选项发送[或不发送] EDNS Keepalive 选项。

+[no]keepopen

该选项在请求之间保持[或不保持] TCP 套字节打开,并复用它,而不是每次查询都新建一个 TCP 套字节。默认为 +nokeepopen

+[no]mapped

该选项允许[或不允许]使用 映射过的 IPv4-over-IPv6 地址。默认为 +mapped

+[no]multiline

该选项以[或不以]附注了人类可读注释的详细的多行格式打印记录——比如 SOA 记录。默认为将每个记录打印至一行来满足机器解析 dig 的输出。

+ndots=D

该选项设置了要被认为是绝对路径 name 必须具有的点号的数量(D)。默认值为使用 /etc/resolv.conf 中的 ndots 语句的值,若未出现 ndots 则使用 1。点号少于该数量的名称被认为是相对名,且当设置了 +search 后就会按照 /etc/resolv.conf 中的 searchdomain 语句所设置的域名来搜索。

+[no]nsid

当启用时,发送请求时,该选项会包含一个 EDNS 名称服务器 ID 请求。

+[no]nssearch

当设置该选项后,dig 尝试在包含了所查找的名称的 zone 中找到权威名称服务器,并显示该 zone 中每个名称服务器的 SOA 记录。即便是不响应的服务器的地址也会被一同打印。

+[no]onesoa

当启用时,该选项在执行一个 AXFR 时仅会显示一个(起始的)SOA 记录。默认为打印起始和结束的 SOA 记录。

+[no]opcode=value

当启用时,该选项设置(或还原)DNS 报文 opcode 至指定值。默认值为 QUERY(0)。

+padding=value

该选项用 EDNS Padding option 将请求网络包的大小扩大(pad)至整数倍的块大小,块的大小为 value 字节。举例来说,+padding=32 将让 48 字节的请求扩展至 64 字节。默认的块大小为 0,也就是关闭 pad;最大值为 512。值通常期望为 2 的指数,比如 128;但是,它并非必须。被 pad 的请求对应的回复也可能被 pad,但仅当请求使用 TCP 或 DNS COKKIE 时才可能生效。

+qid=value

该选项指定发送请求时所使用的 query ID。

+[no]qr

该选项切换所发送的请求报文的显示与否。默认情况下,请求不被打印。

+[no]question

该选项切换是否在收到回答时,显示请求的 question section。默认值为以注释的方式打印 question section。

+[no]raflag

该选项设置[或不设置]请求中的 RA(Recursion Available)位。默认为 +noraflag。该位在 QUERY 下被服务器忽略。

+[no]rdflag

该选项为 +[no]recurse 的同义词。

+[no]recurse

该选项切换请求中的 RD(recursion desired)位设置。默认设置该位,也就是说 dig 通常会发送递归请求。当设置 +nssearch 或者 +trace 时自动关闭递归。

+retry=T

该选项将向服务器重试 UDP 请求的次数设置为 T 而非默认值 2。与 +tries 不同,它不会包含初始请求。

+[no]rrcomments

该选项切换输出中的每记录注释的显示(比如,人类可读的 DNSKEY 记录的关键信息)。默认值为除非激活多行模式,否则不打印记录注释。

+[no]search

该选项使用[或不使用] /etc/resolv.conf 中以 searchlistdomain 语句定义的搜索列表。默认不使用搜索列表。
resolv.conf 中的 ndots(默认值为 1)可能会被 +ndots 覆盖,该值决定一个名称是否被认为是相对的,从而决定是否要执行搜索。

+[no]short

该选项切换是否显示简洁回答。默认为打印详细回答。该选项总是具有全局影响;它不能在全局设置后再依照每查找进行设置。

+[no]showsearch

该选项执行[或不执行]一个用于显示中间结果的搜索。

+[no]sigchase

该特性已过时且被移除;请转而使用 delv

+split=W

该选项把长的十六进制或 base64 编码的资源记录中的字段分段为 W 个字符(W 会被上进位至最近的 4 的倍数)的块。指定 +nosplit 或者 +splite=0 将导致不分段字段。默认为 56 个字符,激活多行模式时为 44 个字符。

+[no]stats

该选项切换是否打印统计:请求是何时产生的,回复的大小,等等。默认值为在每次查找之后以注释的方式打印请求统计。

+[no]subnet=addr[/prefix-length]

该选项发送[或不发送]设置了特定 IP 地址和网络前缀的 EDNS CLIENT-SUBNET option。
dig +subnet=0.0.0.0/0 或简写为 dig +subnet=0,发送空地址和零前缀长度的 EDNS CLIENT-SUBNET option,以提示解析器客户端地址信息禁止用于解析该请求。

+[no]tcflag

该选项设置[或不设置]请求中的 TC(TrunCation)位。默认为 +notcflag。在 QUERY 中服务器忽略该选项。

+[no]tcp

该选项指出在请求名称服务器时是否使用 TCP。默认行为了使用 UDP,除非指定了类型 any,或者要求了 ixfr=N 请求,上述两种情况下默认使用 TCP。AXFR 请求总是使用 TCP。

+[timeout]=T

该选项将请求的超时时间设置为 T 秒。默认值为 5 秒。当尝试将 T 值设置小于 1 时,将静默设置为 1.

+[no]tls

该选项指出当请求名称服务器时,是否要使用 DNS over TLS(DoT)。

+[no]topdown

该特性与 dig +sigchase 相关。而其已过时且被移除。请转而使用 delv

+[no]trace

该选项切换对于所查找的名称的从根名称服务器开始的委托路径跟踪(tracing of the delegation path)。默认关闭跟踪。当启用跟踪后,dig 发送迭代请求来解析被查找的名称。它跟随来自根服务器的推荐,并显示用于解析查找的每个服务器的回复。
若同时指定了 @server,那么它仅影响对于根 zone 名称服务器的初始请求。
当设置 +trace 时会一同设置 +dnssec,来更好的模拟对于一个名称服务器的默认请求。

+tries=T

该选项将对于服务器的 UDP 请求的尝试次数由默认值 3 修改为 T。若 T 等于或小于 0,那么将设置为 1。

+trusted-key=####

该选项先前与 dig +sigchase 连用,用于指定可信密钥。该特性已过时并被移除;请转而使用 devl

+[no]ttlid

该选项在打印记录时,显示[或不显示] TTL。

+[no]ttlunits

该选项以[或不以]友好的人类可读的时间单位显示 TTL。单位有 smhdw,依次表示秒、分、小时、天、周。其隐含 +ttlid

+[no]unknowformat

该选项打印未知 RR 类型表现格式(RFC 3597)中的全部 RDATA。默认为打印已知类型表现格式的类型的 RDATA。

+[no]vc

该选项使用[或不使用] TCP 请求名称服务器。它是为了向前兼容性而保留的 +[no]tcp 的替代语法。vc 表示 virtual circuit。

+[no]yaml

当启用时,该选项以 YAML 格式详细打印回应(若使用了 +qr,则同时打印发出的请求)。

+[no]zflag

该选项设置[或不设置] DNS 请求中最后一位未指定的 DNS 头部标识。该标识默认为未设置。

多次请求

BIND 9 实现的 dig 支持在命令行中指定多次请求(也额外支持 -f 批量文件选项)。可以为每个请求提供它自己的标识、选项、以及请求选项。

在该情况下,每个 query 参数表示一个独立的使用上面描述的命令行语法的请求。每一个都包含了任意的标准选项和标识、要查找的名称、可选项的请求类型和类别,以及任何需要应用至该请求的请求选项。

也可以提供应该附加给全部请求的全局请求选项。这些全局选项必须先于命令行中第一个名称、类别、类型、选项、标识和请求选项所组成的元组之前。任何全局请求选项(除了 [no]cmd` 和 `[no]short 选项)均可以被请求特定的请求选项所覆盖。比如:

dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr

表示了可以如何使用 dig 命令行执行三个查找:一个对 www.isc.org 的 ANY 请求,一个对 127.0.0.1 的反向查找,一个对于 isc.org 的 NS 记录的请求。最后的请求具有局部请求选项 +noqr 表示 dig 在查找 isc.org 的 NS 记录时,不会显示初始的请求。

IDN 支持

dig 在构建时启用了 IDN(国际化域名)支持,那么它就可以接受并显示非 ASCII 域名。dig 会在向 DNS 服务器发送请求前、或是显示来自服务器的回复时,正确地转换域名的编码。要关闭 IDN 支持,使用参数 +noidnin 以及 +noidnout,或者定义 IDN_DISABLE 环境变量。

文件

/etc/resolv.conf

${HOME}/.digrc

参见

delv(1),host(1),named(8),dnssec-keygen(8),RFC 1035