dig 命令参数大全

dig (Domain Information Groper) 是一个强大的命令行工具,用于查询 DNS 域名服务器。它提供了高度的灵活性和详细的输出,是网络管理员和开发者诊断 DNS 问题的首选工具。

1. 基本语法

1
dig [@server] [name] [type] [options]
  • **@server (可选)**:指定要查询的 DNS 服务器的 IP 地址或主机名。
    • 示例:@8.8.8.8 (Google Public DNS), @1.1.1.1 (Cloudflare DNS)
  • **name (必选)**:要查询的域名。
    • 示例:example.com, www.google.com
  • **type (可选)**:要查询的 DNS 记录类型。如果不指定,默认查询 A 记录。
    • 示例:A, AAAA, MX, NS, CNAME, TXT, SRV, SOA, PTR, ANY
  • **options (可选)**:控制 dig 命令行为的各种选项,通常以 + 开头。

2. 常用记录类型 (type)

这些参数用于指定你希望 dig 查询的 DNS 记录类型。

  • **A**:查询域名的 IPv4 地址记录。
    1
    dig example.com A
  • **AAAA**:查询域名的 IPv6 地址记录。
    1
    dig example.com AAAA
  • **MX**:查询邮件交换记录,用于指定负责接收邮件的服务器。
    1
    dig example.com MX
  • **NS**:查询域名服务器记录,用于指定负责该域名的权威 DNS 服务器。
    1
    dig example.com NS
  • **CNAME**:查询规范名称记录,用于将一个域名指向另一个域名(别名)。
    1
    dig www.example.com CNAME
  • **TXT**:查询文本记录,用于存储任意文本信息,常用于 SPF、DKIM、DMARC 等邮件验证和域名所有权验证。
    1
    dig example.com TXT
  • **SRV**:查询服务记录,用于指定特定服务的主机和端口。
    1
    dig _sip._tcp.example.com SRV
  • **SOA**:查询起始授权机构记录,包含域名的基本管理信息。
    1
    dig example.com SOA
  • **PTR**:查询指针记录,用于反向 DNS 查询(将 IP 地址解析为域名)。
    1
    dig -x 192.0.2.1
  • **ANY**:尝试查询所有可用的记录类型。并非所有 DNS 服务器都支持或完整返回。
    1
    dig example.com ANY
  • **AXFR**:区域传送,用于获取整个 DNS 区域的所有记录。通常只允许授权的次级 DNS 服务器进行,且需要 TCP 连接。
    1
    dig @ns1.example.com example.com AXFR

3. 控制输出的选项 (+options)

这些选项用于控制 dig 命令的输出格式和详细程度。

  • **+short**:只显示查询结果中最核心的信息(通常是 IP 地址)。非常适合脚本自动化。
    1
    dig +short example.com
  • **+noall**:禁用所有默认输出部分。通常与 +answer 等选项结合使用。
    1
    dig +noall +answer example.com
  • **+answer**:显示应答部分。
  • **+question**:显示问题部分。
  • **+authority**:显示授权部分。
  • **+additional**:显示附加部分。
  • **+stats**:显示统计信息(查询时间、服务器等)。
  • **+nocomments**:不显示注释行。
  • **+noquestion**:不显示问题部分。
  • **+noauthority**:不显示授权部分。
  • **+noadditional**:不显示附加部分。
  • **+nostats**:不显示统计信息。
  • **+nocmd**:不显示 dig 命令本身的信息(如版本号)。
  • **+multiline**:以多行格式显示 SOA 和 RRSIG 记录,更易读。
    1
    dig +multiline example.com SOA

4. 控制查询行为的选项 (+options)

这些选项用于控制 dig 命令执行 DNS 查询的方式。

  • **+trace**:启用追踪模式。dig 会从根服务器开始,一步步追踪到最终的权威服务器,显示完整的 DNS 解析路径。这对于诊断委派错误或了解解析过程非常有用。
    1
    dig +trace example.com
  • **+norecurse**:禁用递归查询。dig 只会向指定的服务器发送一次查询,如果该服务器没有缓存结果,它不会继续向上游查询。通常用于直接测试权威 DNS 服务器。
    1
    dig +norecurse @ns1.example.com www.example.com
  • **+vc+tcp**:强制使用 TCP 协议进行查询。默认情况下,dig 使用 UDP。当 DNS 响应过大(超过 UDP 限制)时,DNS 会自动回退到 TCP。区域传送 (AXFR) 必须使用 TCP。
    1
    dig +tcp example.com
  • **+ignore**:忽略截断错误。如果 DNS 响应因过大而被截断,dig 默认会重试 TCP。此选项会强制 dig 不重试。
  • **+domain=<domain>**:设置一个默认的搜索域。如果查询的域名不是完全限定域名 (FQDN),会自动附加此域。
    1
    dig +domain=example.com www
  • **+search**:启用搜索列表查找。如果查询的域名不是 FQDN,dig 会尝试在 /etc/resolv.conf 中定义的搜索列表中查找。
  • **+noadflag**:不设置 AD (Authentic Data) 标志。
  • **+cdflag**:设置 CD (Checking Disabled) 标志,表示不要求 DNSSEC 验证。
  • **+dnssec**:请求 DNSSEC 相关记录 (RRSIG, DNSKEY)。这只是请求这些记录,不代表 dig 客户端会执行完整的 DNSSEC 验证。
    1
    dig +dnssec example.com A
  • **+sigchase**:追踪 DNSSEC 签名链,验证 DNSSEC 签名。这需要安装并配置 DNSSEC 验证工具。
  • **+edns=<version>**:指定 EDNS (Extension Mechanisms for DNS) 版本。
  • **+bufsize=<bytes>**:设置 EDNS0 UDP 缓冲区大小。
    1
    dig +bufsize=1200 example.com
  • **+timeout=<seconds>**:设置查询超时时间。
    1
    dig +timeout=2 example.com
  • **+retries=<number>**:设置重试次数。
    1
    dig +retries=1 example.com

5. 其他常用选项

  • **-x <IP address> (反向查询)**:执行反向 DNS 查询,将 IP 地址解析为域名 (PTR 记录)。
    1
    dig -x 192.0.2.1
  • **-f <file> (从文件读取查询)**:从文件中读取查询列表,每行一个查询。
    1
    dig -f queries.txt
  • **-p <port> (指定端口)**:指定查询的 DNS 服务器端口,默认是 53。
    1
    dig -p 5353 @localhost example.com
  • **-4**:强制使用 IPv4。
  • **-6**:强制使用 IPv6。
  • **-k <keyfile>**:使用 TSIG (Transaction Signature) 密钥文件进行认证。
  • **-y <keyname:secret>**:使用 TSIG 密钥字符串进行认证。
  • **-h**:显示帮助信息。
  • **-v**:显示 dig 版本信息。

6. 组合使用示例

  • 快速获取一个域名的 IPv4 和 IPv6 地址
    1
    dig +short example.com A example.com AAAA
  • 追踪域名解析过程并只显示应答部分
    1
    dig +trace +noall +answer example.com
  • 查询指定服务器的 MX 记录,并只显示短格式结果
    1
    dig @8.8.8.8 example.com MX +short
  • 反向查询 IP 地址,并只显示短格式结果
    1
    dig -x 192.0.2.1 +short

dig 是一个功能极其强大的工具,它的输出虽然详细,但理解其结构后,能够帮助你深入了解 DNS 解析的每一个环节。对于网络工程师和系统管理员来说,熟练掌握 dig 是非常重要的技能。