dig 命令详解与参数实测(Ubuntu 22.04)
实测 Ubuntu 22.04 的 dig:默认输出逐段解读、+short、@server 指定 DNS、A/CNAME/MX/NS/TXT/SOA/AAAA、+trace 迭代追踪、-x 反查 PTR、+noall+answer/+stats、-p 端口与 +tcp、-4/-6、NXDOMAIN 与退出码、权威与递归应答、/etc/hosts 对照。
dig 命令详解与参数实测(Ubuntu 22.04)
目标:全面掌握 dig 的每一个常用参数——默认全量输出逐段解读、+short、@server 指定 DNS、A/CNAME/MX/NS/TXT/SOA/AAAA 记录类型、+trace 迭代追踪、-x 反查 PTR、+noall/+answer/+comments/+stats 输出控制、-p 端口与 +tcp 传输、-4/-6、NXDOMAIN 与失败形态的退出码、/etc/hosts 与 dig 的关系,全部命令与回显已在 Ubuntu 22.04(DiG 9.18.39)实测通过。
一、环境信息
本章记录实测环境的操作系统、内核、工具版本与 DNS 基线,保证文中所有回显可追溯、可复现。以下信息均在实测机上真实采集。
- 操作系统:Ubuntu 22.04.5 LTS(取自
/etc/os-release,实测见下) - 内核版本:6.8.0-138-generic(
uname -r实测) - 硬件架构:x86_64(
uname -m实测) - 本机主机名 / 地址:f1034b9326b2 / 172.17.0.2(实测,见下)
- 默认 DNS 服务器:192.168.146.2(取自
/etc/resolv.conf的 nameserver 行;本文所有未指定服务器的 dig 查询均发往它,每条输出末尾的SERVER:行可印证) - 外部公共 DNS:223.5.5.5(阿里)与 8.8.8.8(Google),实测均可达(见 3.3)
- 工具版本:DiG 9.18.39-0ubuntu0.22.04.7-Ubuntu(软件包
bind9-dnsutils 1:9.18.39-0ubuntu0.22.04.7,dig -v实测,见 2.3) - 演示数据目录:/root/demo/dig/(存放 /etc/hosts 演示的备份文件 hosts.bak,见 3.13)
环境基线采集命令与实测回显:
head -2 /etc/os-release; hostname; hostname -I
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
f1034b9326b2
172.17.0.2
uname -r; uname -m
6.8.0-138-generic
x86_64
dpkg -l bind9-dnsutils | tail -1
ii bind9-dnsutils 1:9.18.39-0ubuntu0.22.04.7 amd64 Clients provided with BIND 9
💡 说明:dig 属于 bind9-dnsutils 软件包(BIND 9 的客户端工具集),Ubuntu 22.04 默认未预装,安装命令为
apt install dnsutils(dnsutils 是 bind9-dnsutils 的过渡包名)。同包还提供 nslookup 与 host 两个查询工具(对比见第五章)。
二、命令概览
2.1 语法与测试数据
dig(Domain Information Groper)向 DNS 服务器发起查询并把应答报文按节完整展示:问题节(QUESTION)、答案节(ANSWER)、权威节(AUTHORITY)与统计信息,因此它是排查 DNS 问题时信息量最大的工具。
官方语法(来自 dig -h 首部,完整帮助见 2.2):
Usage: dig [@global-server] [domain] [q-type] [q-class] {q-opt}
{global-d-opt} host [@local-server] {local-d-opt}
[ host [@local-server] {local-d-opt} [...]]
三个书写要点:
@server指定要问的 DNS 服务器,可放在命令最前面(全局),也可放在域名后(仅影响该次查询);- 记录类型直接跟在域名后(如
dig baidu.com MX),或用-t type; - 行为微调靠
+开头的 d-opt,+[no]opt前缀形式表示开关可反转(如+short/+noall);
本文测试数据约定:
- 默认查询
www.baidu.com(答案为 CNAME + 两条 A,最适合逐段讲解); - 记录类型演示统一用
baidu.com;指定服务器演示覆盖本地 DNS(192.168.146.2)与两个公共 DNS(223.5.5.5 / 8.8.8.8); - /etc/hosts 演示采用"追加条目 → 对照实测 → 删除条目 → diff 核验还原"流程(见 3.13)。
参数速查表(每项实测值均来自第三章):
| 参数/用法 | 语义 | 本机实测 |
|---|---|---|
dig <域名> | 默认 A 查询,全量分节输出 | CNAME+A 3 条答案,flags qr rd ra(3.1) |
+short | 只显示答案的简短形态 | 3 行:CNAME 名 + 2 个 IP(3.2) |
@223.5.5.5 / @8.8.8.8 | 指定 DNS 服务器 | 三方结果一致(3.3) |
baidu.com MX/NS/TXT/SOA | 指定记录类型 | MX 2 条、NS 5 条、TXT 4 条、SOA 1 条(3.4) |
+trace | 从根开始的迭代追踪 | 根 → com → baidu.com 三级委托(3.5) |
-x <IP> | 反向查询 PTR | 223.5.5.5 → public1.alidns.com(3.6) |
+noall +answer | 精简输出组合 | 只留答案节(3.7) |
+stats | 只看统计 | Query time/SERVER/MSG SIZE(3.7) |
-p <port> | 指定服务器端口 | 53 正常;5353 无服务报 connection refused,rc=9(3.8) |
+tcp | 用 TCP 传输 | 结果与 UDP 一致(3.8) |
-4 / -6 | 限定传输协议族 | 本机 -6 无 IPv6 DNS,rc=9(3.9) |
| 查不存在域名 | NXDOMAIN 形态 | status: NXDOMAIN,rc=0(3.10) |
| 多域名一次查 | 依次查多个名字 | 3 个域名答案依次输出(3.11) |
@权威NS | 直查权威服务器 | flags 出现 aa,TTL 变为 600(3.12) |
关键差异:dig 域名 与 dig @server 域名 的区别只在"问谁";记录类型决定答案内容;+short/+noall +answer 是输出裁剪,不改变查询行为;+trace/-x 则改变查询方式本身。
2.2 -h 帮助全量输出(逐行照抄)
dig 的帮助入口是 -h。以下为完整实测回显,逐行照抄未删减:
dig -h
Usage: dig [@global-server] [domain] [q-type] [q-class] {q-opt}
{global-d-opt} host [@local-server] {local-d-opt}
[ host [@local-server] {local-d-opt} [...]]
Where: domain is in the Domain Name System
q-class is one of (in,hs,ch,...) [default: in]
q-type is one of (a,any,mx,ns,soa,hinfo,axfr,txt,...) [default:a]
(Use ixfr=version for type ixfr)
q-opt is one of:
-4 (use IPv4 query transport only)
-6 (use IPv6 query transport only)
-b address[#port] (bind to source address/port)
-c class (specify query class)
-f filename (batch mode)
-k keyfile (specify tsig key file)
-m (enable memory usage debugging)
-p port (specify port number)
-q name (specify query name)
-r (do not read ~/.digrc)
-t type (specify query type)
-u (display times in usec instead of msec)
-x dot-notation (shortcut for reverse lookups)
-y [hmac:]name:key (specify named base64 tsig key)
d-opt is of the form +keyword[=value], where keyword is:
+[no]aaflag (Set AA flag in query (+[no]aaflag))
+[no]aaonly (Set AA flag in query (+[no]aaflag))
+[no]additional (Control display of additional section)
+[no]adflag (Set AD flag in query (default on))
+[no]all (Set or clear all display flags)
+[no]answer (Control display of answer section)
+[no]authority (Control display of authority section)
+[no]badcookie (Retry BADCOOKIE responses)
+[no]besteffort (Try to parse even illegal messages)
+bufsize[=###] (Set EDNS0 Max UDP packet size)
+[no]cdflag (Set checking disabled flag in query)
+[no]class (Control display of class in records)
+[no]cmd (Control display of command line -
global option)
+[no]coflag (Set compact denial of existence ok flag)
in query)
+[no]comments (Control display of packet header
and section name comments)
+[no]cookie (Add a COOKIE option to the request)
+[no]crypto (Control display of cryptographic
fields in records)
+[no]defname (Use search list (+[no]search))
+[no]dns64prefix (Get the DNS64 prefixes from ipv4only.arpa)
+[no]dnssec (Request DNSSEC records)
+domain=### (Set default domainname)
+[no]edns[=###] (Set EDNS version) [0]
+ednsflags=### (Set undefined EDNS flag bits)
+[no]ednsnegotiation (Set EDNS version negotiation)
+ednsopt=###[:value] (Send specified EDNS option)
+noednsopt (Clear list of +ednsopt options)
+[no]expandaaaa (Expand AAAA records)
+[no]expire (Request time to expire)
+[no]fail (Don't try next server on SERVFAIL)
+[no]header-only (Send query without a question section)
+[no]https[=###] (DNS-over-HTTPS mode) [/]
+[no]https-get (Use GET instead of default POST method
while using HTTPS)
+[no]http-plain[=###] (DNS over plain HTTP mode) [/]
+[no]http-plain-get (Use GET instead of default POST method
while using plain HTTP)
+[no]identify (ID responders in short answers)
+[no]idnin (Parse IDN names [default=on on tty])
+[no]idnout (Convert IDN response [default=on on tty])
+[no]ignore (Don't revert to TCP for TC responses.)
+[no]keepalive (Request EDNS TCP keepalive)
+[no]keepopen (Keep the TCP socket open between queries)
+[no]multiline (Print records in an expanded format)
+ndots=### (Set search NDOTS value)
+[no]nsid (Request Name Server ID)
+[no]nssearch (Search all authoritative nameservers)
+[no]onesoa (AXFR prints only one soa record)
+[no]opcode=### (Set the opcode of the request)
+padding=### (Set padding block size [0])
+qid=### (Specify the query ID to use when sending
queries)
+[no]qr (Print question before sending)
+[no]question (Control display of question section)
+[no]raflag (Set RA flag in query (+[no]raflag))
+[no]rdflag (Recursive mode (+[no]recurse))
+[no]recurse (Recursive mode (+[no]rdflag))
+retry=### (Set number of UDP retries) [2]
+[no]rrcomments (Control display of per-record comments)
+[no]search (Set whether to use searchlist)
+[no]short (Display nothing except short
form of answers - global option)
+[no]showbadcookie (Show BADCOOKIE message)
+[no]showsearch (Search with intermediate results)
+[no]split=## (Split hex/base64 fields into chunks)
+[no]stats (Control display of statistics)
+subnet=addr (Set edns-client-subnet option)
+[no]tcflag (Set TC flag in query (+[no]tcflag))
+[no]tcp (TCP mode (+[no]vc))
+timeout=### (Set query timeout) [5]
+[no]tls (DNS-over-TLS mode)
+[no]tls-ca[=file] (Enable remote server's TLS certificate
validation)
+[no]tls-hostname=hostname (Explicitly set the expected TLS
hostname)
+[no]tls-certfile=file (Load client TLS certificate chain from
file)
+[no]tls-keyfile=file (Load client TLS private key from file)
+[no]trace (Trace delegation down from root [implies
+dnssec])
+tries=### (Set number of UDP attempts) [3]
+[no]ttlid (Control display of ttls in records)
+[no]ttlunits (Display TTLs in human-readable units)
+[no]unknownformat (Print RDATA in RFC 3597 "unknown" format)
+[no]vc (TCP mode (+[no]tcp))
+[no]yaml (Present the results as YAML)
+[no]zflag (Set Z flag in query)
global d-opts and servers (before host name) affect all queries.
local d-opts and servers (after host name) affect only that lookup.
-h (print help and exit)
-v (print version and exit)
逐项解读:
- 语法骨架:
@global-server(问哪台服务器)→domain(查什么名字)→q-type/q-class(查什么类型/类别,默认 A/in)→q-opt(-x、-p、-4/-6 等短选项)→d-opt(+short 等加号选项); - 短选项里最常用:
-x反查、-p端口、-4/-6传输协议族、-f批量文件模式、-t类型、-b绑定源地址; - d-opt 是 dig 的精髓,
+[no]opt开关式设计:控制显示的(+comments/+answer/+authority/+additional/+stats/+question)、控制行为的(+tcp/+trace/+recurse/+dnssec/+timeout/+tries/+retry); - 末尾两行是作用域规则:写在域名前的全局选项影响所有查询,写在域名后的只影响该次查询;
- 帮助中的默认值一目了然:+timeout 默认 5 秒、+tries 默认 3 次、+retry 默认 2 次。
💡 技术拓展:命令行 DNS 查询三件套横向对比——
工具 输出风格 强项 短板 dig 分节结构化(HEADER/QUESTION/ANSWER + 统计) 信息完整:flags、权威链路、耗时、报文大小 输出长,新手不友好 nslookup 两段式(Server 头 + Answer 列表) 人类友好,上手快 无 flags 细节,历史遗留交互式设计 host 一行一记录的短句 快、适合脚本 无计时、无报文细节 三者同属 bind9-dnsutils 包。本文以 dig 为主线;三者的实测输出对照见第五章 Q7。
2.3 版本信息
实测 dig -v:
dig -v
DiG 9.18.39-0ubuntu0.22.04.7-Ubuntu
💡 说明:
-v输出即软件包完整版本串(BIND 9.18.39,Ubuntu 修订号 0ubuntu0.22.04.7),与dpkg -l bind9-dnsutils对应(见第一章)。dig 与 nslookup 同包同版本;Ubuntu 22.04 各小版本的修订号会随安全更新变化,以dig -v实测为准。
三、参数逐项实测
本章逐个参数实测:每个参数给出实测命令、真实回显与要点说明。所有查询均真实发出,回显中的时间戳与 Query time 每次运行会变,属正常现象。
3.1 无参数默认查询:全输出逐段解读
裸 dig 域名 发起默认的 A 记录递归查询,输出一张完整的 DNS 应答报文。实测:
dig www.baidu.com
; <<>> DiG 9.18.39-0ubuntu0.22.04.7-Ubuntu <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58783
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 5 IN CNAME www.a.shifen.com.
www.a.shifen.com. 5 IN A 110.242.69.21
www.a.shifen.com. 5 IN A 110.242.70.57
;; Query time: 5 msec
;; SERVER: 192.168.146.2#53(192.168.146.2) (UDP)
;; WHEN: Thu Oct 15 20:07:08 UTC 2026
;; MSG SIZE rcvd: 90
逐段解读:
- 首行
`; <<>> DiG 9.18.39-0ubuntu0.22.04.7-Ubuntu <<>> www.baidu.com`——回显本次查询的版本与命令行(诊断时先确认自己问了什么);;; global options: +cmd表示启用了默认显示选项; ;; ->>HEADER<<-应答头:opcode: QUERY标准查询;status: NOERROR查询成功(对比 NXDOMAIN 见 3.10);id: 58783报文事务 ID;flags: qr rd ra——qr(Query/Response,这是应答不是询问)、rd(Recursion Desired,我们要求递归)、ra(Recursion Available,服务器支持递归)——三个标志同时出现说明这是一次递归解析;QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0是各节记录数;
;; QUESTION SECTION——问题节:www.baidu.com. IN A,查 www.baidu.com 的 Internet 类 A 记录;;; ANSWER SECTION——答案节,逐列是名字 TTL 类 记录类型 值:www.baidu.com. 5 IN CNAME www.a.shifen.com.——www.baidu.com 是别名,真实名字是 www.a.shifen.com(CDN 调度的典型形态);- 后两行是 www.a.shifen.com 的 A 记录(两个 IP,轮询负载);
- TTL 5 表示这条答案 5 秒后过期——缓存命中且临近过期的典型小 TTL;
- 统计三行:
Query time: 5 msec查询耗时;SERVER: 192.168.146.2#53(192.168.146.2) (UDP)——应答服务器与端口、传输协议;WHEN时间戳;MSG SIZE rcvd: 90应答字节数。
💡 要点:看 dig 输出先抓三处——
status(成功与否)、flags(递归还是权威)、SERVER(谁回答的)。AUTHORITY 为 0 说明递归服务器直接给缓存答案,没有附带权威 NS 信息。
3.2 +short:最常用的精简输出
+short 只打印答案的"值",一域一行(有 CNAME 时先别名后 IP),脚本取值首选。实测:
dig +short www.baidu.com
www.a.shifen.com.
110.242.70.57
110.242.69.21
dig +short baidu.com
110.242.74.102
124.237.177.164
111.63.65.247
111.63.65.103
第一条输出里第一行 www.a.shifen.com. 是 CNAME 目标,后两行是它的 A 记录——+short 会把解析链展开打印;第二条 baidu.com 无 CNAME,直接 4 个 A 记录。
💡 要点:+short 不显示 TTL、不显示 status——想要"快"就别想"全";顺序不做轮询保证,脚本不要假设第一个 IP 固定。
3.3 @server:指定 DNS 服务器
@服务器地址 让 dig 绕过系统默认 DNS 直接询问指定服务器,是排查"本地 DNS 与公共 DNS 解析不一致"的标准手段。实测本地 DNS 与两个公共 DNS:
dig @223.5.5.5 www.baidu.com +short
www.a.shifen.com.
110.242.69.21
110.242.70.57
dig @8.8.8.8 www.baidu.com +short
www.a.shifen.com.
110.242.70.57
110.242.69.21
dig @192.168.146.2 www.baidu.com +short
www.a.shifen.com.
110.242.69.21
110.242.70.57
三方应答一致(答案顺序可能因轮询而异)。如果不指定 @,dig 读取 /etc/resolv.conf 的 nameserver(本机为 192.168.146.2,与 3.1 输出的 SERVER 行互相印证)。
💡 要点:对比多个服务器的应答可快速定位两类问题——本地 DNS 缓存被污染(各家答案不同)、某域名的智能调度(不同地区答案不同,属正常)。
3.4 记录类型:A / CNAME / MX / NS / TXT / SOA / AAAA
类型写在域名后即可(等价 -t 类型)。以下实测同一域名 baidu.com 的五种类型 + www 的 CNAME + AAAA:
dig baidu.com A +noall +answer
baidu.com. 5 IN A 111.63.65.103
baidu.com. 5 IN A 111.63.65.247
baidu.com. 5 IN A 124.237.177.164
baidu.com. 5 IN A 110.242.74.102
dig www.baidu.com CNAME +noall +answer
www.baidu.com. 5 IN CNAME www.a.shifen.com.
dig baidu.com MX +noall +answer
baidu.com. 5 IN MX 10 mx.maillb.baidu.com.
baidu.com. 5 IN MX 20 mx.baidu.com.
dig baidu.com NS +noall +answer
baidu.com. 5 IN NS ns4.baidu.com.
baidu.com. 5 IN NS dns.baidu.com.
baidu.com. 5 IN NS ns3.baidu.com.
baidu.com. 5 IN NS ns2.baidu.com.
baidu.com. 5 IN NS ns7.baidu.com.
dig baidu.com TXT +noall +answer
baidu.com. 5 IN TXT "9279nznttl321bxp1j464rd9vpps246v"
baidu.com. 5 IN TXT "google-site-verification=GHb98-6msqyx_qqjGl5eRatD3QTHyVB6-xQ3gJB5UwM"
baidu.com. 5 IN TXT "_globalsign-domain-verification=qjb28W2jJSrWj04NHpB0CvgK9tle5JkOq-EcyWBgnE"
baidu.com. 5 IN TXT "v=spf1 include:spf1.baidu.com include:spf2.baidu.com include:spf3.baidu.com include:spf4.baidu.com -all"
dig baidu.com SOA +noall +answer
baidu.com. 5 IN SOA dns.baidu.com. sa.baidu.com. 2012151573 300 300 2592000 600
dig www.qq.com AAAA +short
ins-r23tsuuf.ias.tencent-cloud.net.
tra-kbagmtra.ias.tencent-cloud.net.
2408:80f1:21:c120::e
2408:80f1:21:c120::c
逐类型解读:
- A——域名到 IPv4;AAAA——域名到 IPv6(本例还有两级 CNAME 链,+short 一并展开);
- CNAME——别名记录,指向"正名";一个名字有 CNAME 时就不能再有 A/AAAA(互斥);
- MX——邮件交换,
优先级 主机名:10 的 mx.maillb.baidu.com 优先于 20 的 mx.baidu.com; - NS——域名的权威服务器清单,排查"域名由谁解析"先看它;
- TXT——文本记录,实测可见三类典型用途:随机串(站点归属)、
google-site-verification=(搜索引擎验证)、v=spf1开头的 SPF 记录(发件服务器白名单,防伪造邮件); - SOA——权威起始记录,字段依次是:主 DNS(dns.baidu.com.)、管理员邮箱(sa.baidu.com.,第一个点即 @)、序列号(2012151573,改一次区域文件加一)、刷新/重试/过期时间(300/300/2592000)、否定缓存 TTL(600)。
💡 要点:+noall +answer 组合(见 3.7)把输出裁到只剩答案节,配记录类型查证非常顺手;裸
dig 域名 类型也能用,只是要自己翻节。
3.5 +trace:从根开始的迭代追踪
+trace 不再让递归服务器代劳,而是从根服务器开始逐级迭代:问根拿 com 的 NS,问 com 拿 baidu.com 的 NS,问 baidu.com 的权威拿最终答案——把整条委托链打给用户看。实测(+trace 隐含 +dnssec,故能看到 DS/RRSIG 记录):
dig +trace www.baidu.com
; <<>> DiG 9.18.39-0ubuntu0.22.04.7-Ubuntu <<>> +trace www.baidu.com
;; global options: +cmd
. 5 IN NS e.root-servers.net.
. 5 IN NS b.root-servers.net.
. 5 IN NS d.root-servers.net.
. 5 IN NS m.root-servers.net.
. 5 IN NS f.root-servers.net.
. 5 IN NS j.root-servers.net.
. 5 IN NS k.root-servers.net.
. 5 IN NS c.root-servers.net.
. 5 IN NS a.root-servers.net.
. 5 IN NS l.root-servers.net.
. 5 IN NS i.root-servers.net.
. 5 IN NS g.root-servers.net.
. 5 IN NS h.root-servers.net.
;; Received 492 bytes from 192.168.146.2#53(192.168.146.2) in 3 ms
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 86400 IN DS 19718 13 2 8ACBB0CD28F41250A80A491389424D341522D946B0DA0C0291F2D3D7 71D7805A
com. 86400 IN RRSIG DS 8 1 86400 20261028170000 20261015160000 8763 . tch7qJ4PlBiAy+DtfS49NeEsheyLpgYE8qrCOQpPbb5WRJdeTQtHkuoV DMAIzGJyTP4zLGZjIj5Ua5rt5xAP2egMbryXcyQG61mTfylD/AO4ahaR SgonOiyqGjiN4Qp4g4prEXtidsxUVCKS7h9jYhlTTPKrBGSHSaMeNmtI sTKtSonSuhlAcuq4XntUVRGcSalzGGr528n8cYPdKVH9q5Hzg4Mmsv/F Hu6a5KZoeDHmBLWlsFVmYKMBVpq85eAzEsdhg3ly1YPfwmy/obfJTmpy Z7RTNxT1AACqMXvrermXEV0whHqoGNnO1BQ2AcAkbXlSdkkhZhvE5rPx Mkx94A==
;; Received 1173 bytes from 170.247.170.2#53(b.root-servers.net) in 230 ms
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns1.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 900 IN NSEC3 1 1 0 - CK0Q35HRS4H76G6CHNB9414CJN6S5UPL NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 900 IN RRSIG NSEC3 13 2 900 20261021002613 20261013231613 41446 com. WGu9eCYN4llrPDQrAGMwuJAr6dW0g2lyD6XJ3y97RBM3MStpEvNq3sXW izdX1obtpIQFpXhCAgOOZwjMGnIkSA==
HPVV1UNKTCF9TD77I2AUR73709T975GH.com. 900 IN NSEC3 1 1 0 - HPVV6R16UOVJ2R5VFOVRGPCVJ6O2KMD9 NS DS RRSIG
HPVV1UNKTCF9TD77I2AUR73709T975GH.com. 900 IN RRSIG NSEC3 13 2 900 20261020010549 20261012235549 41446 com. l1rvVp8Fja/6K95BoZbDjtPZqNo8WsSoKgCB76jGZBW5oevriC7yEFXj IryHNZiA+xjZYdAs/pDdoje6r843vA==
;; Received 713 bytes from 192.5.6.30#53(a.gtld-servers.net) in 243 ms
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
;; Received 100 bytes from 14.215.178.80#53(ns7.baidu.com) in 53 ms
逐段解读(每段末尾以 ;; Received 起始的一行,例:;; Received 1173 bytes from 170.247.170.2#53(b.root-servers.net) in 230 ms,说明这一级是谁答的):
- 第一段:13 台根服务器(a–m.root-servers.net)名单。首个根名单(priming)查询由本机配置的 DNS 192.168.146.2 应答;
- 第二段:
.com顶级域的 13 台权威(a–m.gtld-servers.net)+ DS/RRSIG(DNSSEC 委托签名)——由根服务器 b.root-servers.net(170.247.170.2)实际应答; - 第三段:baidu.com 的权威 NS 清单——由 a.gtld-servers.net(192.5.6.30)应答;附带两条 NSEC3/RRSIG(com 域的 DNSSEC 存在性证明,可忽略其内容);
- 第四段:最终答案
www.baidu.com CNAME www.a.shifen.com.——由 baidu.com 自己的权威 ns7.baidu.com(14.215.178.80)应答; - 整条链路 = 根名单 → 根(答 com)→ com(答 baidu.com)→ baidu.com 权威(答 www),与理论迭代流程完全一致。
💡 要点:+trace 能定位"哪一级开始解析坏了"——某段的 NS 应答异常,问题就出在那一级的权威配置;它绕过缓存,耗时明显长于普通查询(本例累计约 0.5 秒)。
3.6 -x:反向查询(PTR 记录)
-x IP 自动把地址翻成 in-addr.arpa 反查名并查 PTR 记录,等价于手写 dig 5.5.5.223.in-addr.arpa PTR。实测:
dig -x 223.5.5.5
; <<>> DiG 9.18.39-0ubuntu0.22.04.7-Ubuntu <<>> -x 223.5.5.5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21731
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;5.5.5.223.in-addr.arpa. IN PTR
;; ANSWER SECTION:
5.5.5.223.in-addr.arpa. 5 IN PTR public1.alidns.com.
;; Query time: 3 msec
;; SERVER: 192.168.146.2#53(192.168.146.2) (UDP)
;; WHEN: Thu Oct 15 20:07:09 UTC 2026
;; MSG SIZE rcvd: 72
dig -x 223.5.5.5 +short
public1.alidns.com.
dig @223.5.5.5 -x 8.8.8.8 +short
dns.google.
无 PTR 记录的地址(如本网段网关)实测——答案为空但状态正常,rc=0:
dig -x 172.17.0.1 +short; echo rc=$?
rc=0
解读:223.5.5.5 反查名 = 5.5.5.223.in-addr.arpa(四段倒序 + 固定后缀),PTR 答案 public1.alidns.com 正是阿里公共 DNS 的名字;8.8.8.8 反查为 dns.google;网关 172.17.0.1 没有配置 PTR,+short 空输出、rc=0。
💡 要点:邮件服务器反查、日志里的 IP 转名字、排查"谁家的 IP"都靠 -x;空输出 + NOERROR 表示"该地址无 PTR",与 NXDOMAIN 不同。
3.7 +noall +answer / +comments / +stats:输出控制组合
+noall 先清空所有显示节,再按需打开想要的节——组合出最精炼的输出。实测三连:
dig www.baidu.com +noall +answer
www.baidu.com. 5 IN CNAME www.a.shifen.com.
www.a.shifen.com. 5 IN A 110.242.70.57
www.a.shifen.com. 5 IN A 110.242.69.21
dig baidu.com MX +noall +answer +comments
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56819
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; ANSWER SECTION:
baidu.com. 5 IN MX 20 mx.baidu.com.
baidu.com. 5 IN MX 10 mx.maillb.baidu.com.
dig www.baidu.com +noall +stats
;; Query time: 3 msec
;; SERVER: 192.168.146.2#53(192.168.146.2) (UDP)
;; WHEN: Thu Oct 15 20:07:09 UTC 2026
;; MSG SIZE rcvd: 104
组合语义:+noall +answer 只留答案(人看记录);+noall +answer +comments 加回应答头(要看 status/flags 时用);+noall +stats 只看统计(压测/比对耗时)。
💡 要点:可用的节还有 +question、+authority、+additional、+cmd;
+noall之后按需加,等价于"白名单"式输出控制。
3.8 -p 端口与 +tcp:传输层控制
-p 端口 指定服务器的查询端口(默认 53);+tcp 强制走 TCP(默认 UDP,应答过大被截断或查区域传送时才回退 TCP)。实测:
dig @223.5.5.5 -p 53 www.baidu.com +short
www.a.shifen.com.
110.242.69.21
110.242.70.57
对没有服务的端口发查询的失败形态(本机 5353 无监听):
dig @127.0.0.1 -p 5353 www.baidu.com; echo rc=$?
;; communications error to 127.0.0.1#5353: connection refused
;; communications error to 127.0.0.1#5353: connection refused
;; communications error to 127.0.0.1#5353: connection refused
; <<>> DiG 9.18.39-0ubuntu0.22.04.7-Ubuntu <<>> @127.0.0.1 -p 5353 www.baidu.com
; (1 server found)
;; global options: +cmd
;; no servers could be reached
rc=9
dig @223.5.5.5 +tcp www.baidu.com +short
www.a.shifen.com.
110.242.70.57
110.242.69.21
解读:-p 53 与默认等价;5353 无服务时 dig 依次重试后报 ;; no servers could be reached,退出码 9;+tcp 结果与 UDP 一致,仅传输不同(抓包能看到三次握手)。
💡 要点:rc=9(无服务器可达)与 rc=0 的区别见 3.10 的退出码汇总;
+tcp常用于验证"UDP 被封但 TCP 可用"的网络环境,以及触发/验证 DNS over TCP 的服务器配置。
3.9 -4 / -6:限定传输协议族
-4 只用 IPv4 传输,-6 只用 IPv6。本机没有可达的 IPv6 DNS(resolv.conf 中仅 IPv4 nameserver),正好能看到 -6 的失败形态。实测:
dig -4 www.baidu.com +short
www.a.shifen.com.
110.242.70.57
110.242.69.21
dig -6 www.baidu.com +short; echo rc=$?
;; communications error to ::1#53: connection refused
;; communications error to ::1#53: connection refused
;; communications error to ::1#53: connection refused
; <<>> DiG 9.18.39-0ubuntu0.22.04.7-Ubuntu <<>> -6 www.baidu.com +short
;; global options: +cmd
;; no servers could be reached
rc=9
解读:-4 一切正常;-6 时 dig 只会尝试 IPv6 形态的 DNS(含本机 ::1),本机没有可用的 v6 DNS,逐个 connection refused 后 rc=9。注意 -6 限制的是查询传输,不代表只能查到 AAAA 记录。
3.10 NXDOMAIN 形态与退出码
查一个不存在的域名,看 dig 怎么报告"名字不存在"。实测:
dig no-such-8zq7.invalid; echo rc=$?
; <<>> DiG 9.18.39-0ubuntu0.22.04.7-Ubuntu <<>> no-such-8zq7.invalid
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 29347
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 4096
; COOKIE: aebff04996a10756010000006ad1326e0af75607ba863e48 (good)
;; QUESTION SECTION:
;no-such-8zq7.invalid. IN A
;; AUTHORITY SECTION:
. 5 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2026101501 1800 900 604800 86400
;; Query time: 71 msec
;; SERVER: 192.168.146.2#53(192.168.146.2) (UDP)
;; WHEN: Thu Oct 15 20:07:10 UTC 2026
;; MSG SIZE rcvd: 152
rc=0
dig @223.5.5.5 no-such-8zq7.invalid +noall +comments; echo rc=$?
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 44152
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
rc=0
解读:
status: NXDOMAIN(Non-eXistent Domain)即"名字不存在";ANSWER: 0、AUTHORITY: 1——权威节给出根 SOA,用于告诉解析器"这个否定答案可以缓存多久"(SOA 末字段 86400);OPT PSEUDOSECTION是 EDNS 扩展信息(udp 缓冲 4096、COOKIE 校验),属协议层细节;- rc=0——dig 默认把 NXDOMAIN 视为"查询成功送达、正常应答",退出码不反映域名是否存在。
本组实测的 dig 退出码汇总:
| 场景 | status/输出 | 退出码 |
|---|---|---|
| 正常应答(含 NXDOMAIN、无 PTR 空答案) | NOERROR / NXDOMAIN | 0 |
| 服务器不可达(端口无服务 / 无 v6 DNS) | no servers could be reached | 9 |
💡 要点:脚本判断"域名是否存在"不能依赖 dig 退出码,要么检查输出里的
status: NXDOMAIN,要么用dig +short 域名 | grep -q .的 grep 结果做判断。
3.11 一次查询多个域名
域名可以一次给多个,dig 依次查询、答案顺序输出。实测:
dig +short baidu.com www.baidu.com www.qq.com
110.242.74.102
111.63.65.103
111.63.65.247
124.237.177.164
www.a.shifen.com.
110.242.69.21
110.242.70.57
ins-r23tsuuf.ias.tencent-cloud.net.
tra-kbagmtra.ias.tencent-cloud.net.
116.128.170.212
58.246.163.58
解读:三组答案按命令行顺序依次输出(baidu.com 4 个 A → www.baidu.com 的 CNAME+2 个 A → www.qq.com 的 2 个 CNAME+2 个 A),但 +short 输出没有分隔标记,批量查询建议用不带 +short 的形式或 -f 文件 批量模式(帮助见 2.2)。
💡 要点:要"多域名 + 每域标记"时,用
dig baidu.com www.baidu.com +noall +answer +comments保留命令行回显行,或干脆循环调用 dig——循环外置便于记录每个域名的独立耗时。
3.12 递归应答与权威应答:直查权威 NS
先拿到权威服务器清单,再直接问权威,对比 flags 的变化。实测:
dig baidu.com NS +short
ns3.baidu.com.
ns2.baidu.com.
dns.baidu.com.
ns4.baidu.com.
ns7.baidu.com.
dig @ns1.baidu.com baidu.com +noall +comments +answer
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42639
;; flags: qr aa rd; QUERY: 1, ANSWER: 4, AUTHORITY: 5, ADDITIONAL: 11
;; WARNING: recursion requested but not available
;; ANSWER SECTION:
baidu.com. 600 IN A 110.242.74.102
baidu.com. 600 IN A 111.63.65.103
baidu.com. 600 IN A 111.63.65.247
baidu.com. 600 IN A 124.237.177.164
解读:
- 直查权威后 flags 从
qr rd ra变为qr aa rd——aa(Authoritative Answer)出现,表示应答来自该域的权威服务器本身;ra消失,并出现WARNING: recursion requested but not available——权威服务器不提供递归服务; - TTL 从递归缓存的小值(5 秒)变成权威的真实值(600 秒)——递归服务器给的是"剩余 TTL",权威给的才是记录原始 TTL;
- AUTHORITY: 5 附带的是该域 NS 清单(ADDITIONAL: 11 是 NS 对应的地址胶水记录)。
💡 要点:"递归应答看 ra、权威应答看 aa"——怀疑缓存数据陈旧时直查权威对账;本例 ns1.baidu.com 未在 NS 清单(dns.baidu.com 才在清单里),但同属百度权威集群照样应答,说明权威集群间互为备份。
3.13 dig 与 /etc/hosts 的关系:hosts 不影响 dig
操作系统层面的名字解析(getent/ping)会先查 /etc/hosts,但 dig 是纯 DNS 查询工具,只问 DNS 服务器,从不读 /etc/hosts。用追加条目做两态对照,全程备份核验。先备份并追加条目:
cp /etc/hosts /root/demo/dig/hosts.bak
echo '127.0.0.1 demo.local' >> /etc/hosts
tail -2 /etc/hosts
172.17.0.2 f1034b9326b2
127.0.0.1 demo.local
系统解析器(getent)能从 hosts 拿到答案:
getent hosts demo.local
127.0.0.1 demo.local
dig 却向 DNS 服务器查询并返回 NXDOMAIN(附一条 .local 保留域的 mDNS 提示):
dig demo.local; echo rc=$?
; <<>> DiG 9.18.39-0ubuntu0.22.04.7-Ubuntu <<>> demo.local
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 21660
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 4096
; COOKIE: 7af4e71c43c42750010000006ad1326ea132afad3cbc276e (good)
;; QUESTION SECTION:
;demo.local. IN A
;; AUTHORITY SECTION:
. 5 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2026101501 1800 900 604800 86400
;; Query time: 57 msec
;; SERVER: 192.168.146.2#53(192.168.146.2) (UDP)
;; WHEN: Thu Oct 15 20:07:10 UTC 2026
;; MSG SIZE rcvd: 142
rc=0
ping 走系统解析器,hosts 条目生效(能对上 127.0.0.1):
ping -c 1 -W 1 demo.local | head -1
PING demo.local (127.0.0.1) 56(84) bytes of data.
结论落地:同一个名字,getent/ping 能解析(读 hosts),dig 报 NXDOMAIN(只认 DNS)。清理条目并核验还原(删除行后覆写回 /etc/hosts):
grep -v 'demo.local' /etc/hosts > /tmp/hosts.clean && cat /tmp/hosts.clean > /etc/hosts
diff /etc/hosts /root/demo/dig/hosts.bak; echo rc=$?
rc=0
diff 无差异、rc=0,hosts 还原完成。
💡 要点:排查"本机能 ping 通、服务却解析失败"时先想这一层差异——名字只写在 /etc/hosts 里的环境(内网服务、本地开发),用 dig 验证必须问真实 DNS;反过来,dig 查不到但应用能用,多半就是 hosts 在起作用。
四、实战示例
本章给出一组组合场景,命令均来自第三章实测,可按场景直接套用。
4.1 快速验证域名解析与 CDN 调度
场景:确认业务域名当前解析到哪些 IP、别名链是什么。
dig +short www.baidu.com
www.a.shifen.com.
110.242.70.57
110.242.69.21
dig www.baidu.com +noall +answer
www.baidu.com. 5 IN CNAME www.a.shifen.com.
www.a.shifen.com. 5 IN A 110.242.70.57
www.a.shifen.com. 5 IN A 110.242.69.21
第一条看结果,第二条带 TTL——TTL 小(秒级)说明是 CDN 动态调度域名,变更会很快生效。
4.2 邮箱迁移前的 MX/SOA 检查
场景:给域名配邮件服务前,确认 MX 优先级与主权威。
dig baidu.com MX +noall +answer
baidu.com. 5 IN MX 10 mx.maillb.baidu.com.
baidu.com. 5 IN MX 20 mx.baidu.com.
dig baidu.com SOA +noall +answer
baidu.com. 5 IN SOA dns.baidu.com. sa.baidu.com. 2012151573 300 300 2592000 600
解读:MX 按优先级升序投递(10 先于 20);SOA 的管理员邮箱字段(sa.baidu.com.)在排障时可换算成 sa@baidu.com 联系域名管理员。
4.3 用 +trace 定位解析链路断点
场景:某子域解析异常,怀疑权威配置错。直接复用 3.5 的完整实测命令 dig +trace www.baidu.com,判读口诀是盯住每段末尾以 ;; Received 起始的那一行——它标明"这一级是谁在应答"。本例实测的四级应答方依次为:
;; Received 492 bytes from 192.168.146.2#53(192.168.146.2) in 3 ms
;; Received 1173 bytes from 170.247.170.2#53(b.root-servers.net) in 230 ms
;; Received 713 bytes from 192.5.6.30#53(a.gtld-servers.net) in 243 ms
;; Received 100 bytes from 14.215.178.80#53(ns7.baidu.com) in 53 ms
判读:根名单 ← 本地 DNS;com 委托 ← b.root-servers.net;baidu.com 委托 ← a.gtld-servers.net;最终答案 ← ns7.baidu.com,链路完整。若其中某一级超时或应答错误,断点即在那一级权威(配合 3.5 的完整输出逐段核对)。
⚠️ 注意:+trace 的输出每次运行细节可能不同(各级应答附带 DS/RRSIG/NSEC3 与否、末段是否直接给出 A 记录),但"根 → 顶级域 → 二级域 → 权威"的委托骨架不变;做对比留档时以完整输出为准,勿只截末行。
4.4 多 DNS 对比排查解析不一致
场景:怀疑本地 DNS 缓存污染或被劫持,横向对比三家:
dig @192.168.146.2 www.baidu.com +short
dig @223.5.5.5 www.baidu.com +short
dig @8.8.8.8 www.baidu.com +short
www.a.shifen.com.
110.242.69.21
110.242.70.57
www.a.shifen.com.
110.242.69.21
110.242.70.57
www.a.shifen.com.
110.242.70.57
110.242.69.21
解读:三家答案集合一致(顺序差异来自轮询),判定解析正常;若某家给出的 IP 明显不属于该业务,即可锁定污染源。再补一发直查权威(见 3.12)可拿到"标准答案"。
4.5 脚本化取值:+short + 状态判断 + 传输选项
场景:巡检脚本要确认域名可解析且拿到 IP 列表。dig 对 NXDOMAIN 也返回 0(见 3.10),所以用输出内容判断:
dig +short www.baidu.com
www.a.shifen.com.
110.242.70.57
110.242.69.21
dig @223.5.5.5 +tcp www.baidu.com +short
www.a.shifen.com.
110.242.70.57
110.242.69.21
脚本骨架:ips=$(dig +short www.baidu.com A); [ -n "$ips" ] || echo "解析为空"——空串即"无答案"(NXDOMAIN 或无 A 记录);再配合 +tcp 与 -p(见 3.8)可覆盖"仅 TCP 可达""非标准端口"的特殊网络。
五、注意事项与常见问题
Q1:/etc/hosts 里写了条目,为什么 dig 还是查不到?
dig 是纯 DNS 协议工具,只向 DNS 服务器发查询、从不读 /etc/hosts;hosts 只影响走系统解析器(nsswitch)的程序。实测对照(见 3.13):hosts 加了 127.0.0.1 demo.local 后 getent hosts demo.local 返回 127.0.0.1、ping 也能通,而 dig demo.local 是 NXDOMAIN。要验证 hosts 生效用 getent;要验证 DNS 用 dig。
Q2:dig 查询失败时退出码怎么用?
实测汇总:正常应答(NOERROR、NXDOMAIN、空答案)rc=0;"no servers could be reached"(服务器不可达/端口无服务/无对应协议族)rc=9(见 3.8/3.9/3.10)。NXDOMAIN 的 rc 也是 0,脚本判断"名字存在"必须解析输出(如 dig +short 域名 | grep -q .),不能看退出码。
Q3:为什么同一条 dig 命令,Query time 有时 3ms 有时 60ms?
Query time 是"这一跳"的耗时:递归服务器命中缓存时只有几毫秒(3.1 实测 5ms);缓存过期需向上游迭代时明显变长(3.10 NXDOMAIN 实测 71ms)。判断"是否命中缓存"的最简单办法:连跑两次看第二次是否骤降,或直接 dig @权威NS 域名 直查权威对账(见 3.12)。
Q4:flags 里的 qr / rd / ra / aa 分别是什么?
qr Query-Response(这是应答报文);rd Recursion Desired(客户端要求递归);ra Recursion Available(应答方支持递归)——rd ra 同现即递归解析(3.1 实测);aa Authoritative Answer(应答方就是权威)——直查权威 NS 时出现、ra 消失(3.12 实测)。记住口诀:看 ra 知递归、看 aa 知权威。
Q5:dig 能查 hosts 里的自定义域名做验证吗?
不能,原理同 Q1。想让自定义名字走 dig 验证,只能搭真实 DNS 记录(或用 dnsmasq 等本地 DNS 服务把条目挂进 DNS);临时验证解析行为可用 dig @localhost 指向本地 DNS 服务。
Q6:用 sed -i 修改 /etc/hosts 报 Device or resource busy 怎么办?
sed -i 的实现是"写临时文件再重命名替换",当 /etc/hosts 是以挂载方式注入的(部分虚拟化/托管平台如此)时,重命名会被拒绝,实测报错:sed: cannot rename /etc/sedNGuB4X: Device or resource busy。改用覆写式写入:grep -v 'demo.local' /etc/hosts > /tmp/hosts.clean && cat /tmp/hosts.clean > /etc/hosts(实测见 3.13,diff 核验 rc=0)。
Q7:dig、nslookup、host 该怎么选?三者的输出差在哪? 同一台机器、同一个域名(baidu.com)的三种实测输出——
host(一行一记录,连 MX 都贴心带出来):
host baidu.com
baidu.com has address 124.237.177.164
baidu.com has address 110.242.74.102
baidu.com has address 111.63.65.103
baidu.com has address 111.63.65.247
baidu.com mail is handled by 20 mx.baidu.com.
baidu.com mail is handled by 10 mx.maillb.baidu.com.
nslookup(Server 头 + 简洁答案):
nslookup baidu.com
Server: 192.168.146.2
Address: 192.168.146.2#53
Non-authoritative answer:
Name: baidu.com
Address: 111.63.65.247
Name: baidu.com
Address: 124.237.177.164
Name: baidu.com
Address: 110.242.74.102
Name: baidu.com
Address: 111.63.65.103
dig(分节全量,flags/耗时/报文大小齐全,见 3.1)。选型:日常快速核对用 host,人工解释给非运维用 nslookup,排障与脚本以 dig 为准——只有 dig 能看到 flags、权威链路与统计信息。
六、参考链接
- dig(1) 手册(man7.org):https://man7.org/linux/man-pages/man1/dig.1.html
- BIND 9 官方文档(ARM,dig 章节含全部 +option 说明):https://bind9.readthedocs.io/
- ISC Knowledgebase(dig 用法与疑难):https://kb.isc.org/
- dig(1) Ubuntu 22.04 联机手册:https://manpages.ubuntu.com/manpages/jammy/en/man1/dig.1.html
- RFC 1035(DNS 协议与报文格式):https://datatracker.ietf.org/doc/html/rfc1035
- RFC 2308(否定缓存与 NXDOMAIN 语义):https://datatracker.ietf.org/doc/html/rfc2308