DNS基本工具
DNS基本工具
使用命令行工具如dig、nslookup进行DNS查询
dig
参考 系统极客
dig 命令可以查询各种类型 DNS 记录信息,包括:主机名称记录(A、AAAA)、邮件交换记录(MX)和别名记录(CNAME)等等。由于其灵活性和易用性,它是系统管理员解决 DNS 问题时最常用的工具。
验证是否安装dig
1 | dig -v |
dig命令语法
1 | dig [server] [name] [type] |
- [server]查询指向的主机名或 IP 地址
- [name]要查询服务器的 DNS(域名服务器)
- [type]要检索的 DNS 记录类型。默认情况下(或如果留空),dig 查询 A 记录。
dig命令输出
1 | dig www.aliyun.com |
第一行显示 dig 命令的版本,以及查询的域名;
第二行显示全局选项(默认情况下,仅有 cmd)
HEADER
部分显示从被请求机构(DNS 服务器)收到响应的详细技术信息。标题显示由 dig 执行操作的「操作码」和「操作状态」的「标头」,上述示例中的「操作状态」是NOERROR,这意味着被请求的 DNS 服务器可以没有任何阻碍地提供查询。
Flags是回答格式的参考。
OPT PSEUDOSECTION
显示高级数据
EDNS
DNS 的扩展机制Flags
未指定标志时为空UDP
UDP 数据包大小
QUESTION
部分显示发送的查询数据:
- 第一列是查询的域名
- 第二列是查询的类型(IN 表示互联网)
- 第三列指定了记录类型(如果未指定则默查询 A 记录)
最重要的部分是ANSWER
部分:
- 第一列列出了被查询的服务器名称
- 第二列是
TTL
(存活时间),在此之后记录将被刷新 - 第三列显示查询的类别 – 在本例中,
IN
代表互联网 - 第四列显示查询的类型 – 在本例中,
CNAME
代表 CNAME(别名)记录,A
代表 A(地址)记录 - 最后一列显示与域名关联的别名和 IP 地址(结果)
最后的STATISTICS
统计信息部分显示关于查询的元数据:
Query time
响应花费的时间SERVER
响应 DNS 服务器的 IP 地址和端口WHEN
命令运行的时间戳MSG SIZE rcvd
从 DNS 服务器收到的回复大小
指定DNS服务器
默认情况下,如果未指定名称服务器,dig 命令会使用/etc/resolv.conf文件中列出的服务器进行查询。
要指定 DNS 服务器进行查询,可以使用@后跟 DNS 服务器 IP 地址的方式来手动指定 DNS 服务器。
例如,要使用 阿里云 DNS 的233.5.5.5查询www.aliyun.com域名,可以使用如下 命令:
1 | dig www.aliyun.com @233.5.5.5 |
仅输出响应结果
在绝大多数情况下,只使用 dig 查询相应的 DNS 记录,而不需要太多复杂的、不相关的响应和输出。此时就可以使用以下两种方式。
- 输出简短结果
1 | dig www.aliyun.com +short |
- 输出详细响应,先使用
+noall
参数关闭所有结果,再使用+answer
参数打开结果部分。
1 | dig www.aliyun.com +noall +answer |
使用dig命令查询特定记录类型
- 查询A记录,要获取域名的所有 IP 地址列表,请使用a参数:
1 | dig +nocmd www.aliyun.com a +noall +answer |
- 查询CNAME记录
1
dig +nocmd www.aliyun.com cname +noall +answer
- 查询TXT记录,使用
txt
参数检索特定域的所有「TXT 记录」:1
dig +nocmd aliyun.com txt +noall +answer
- 查询MX记录,获取特定域的所有邮件交换记录
1
dig +nocmd aliyun.com mx +noall +answer
- 查询NS记录,查找特定域的权威名称服务器
1
dig +nocmd aliyun.com ns +noall +answer
使用 dig 命令进行 PTR 反向 DNS 查询
要查询与特定 IP 地址关联的主机名,请使用-x参数。
1 | dig -x 208.118.235.148 +noall +answer |
Trace 参数
+trace
参数可以列出查询经过的不同 DNS 服务器,直到最终目的地。可以使用此参数来确定流量中断的 IP 地址:
1 | dig www.aliyun.com +trace |
对域名www.baidu.com A记录的trace查询可以看到根域.,顶级域.com,以及baidu.com的域名权威服务器的地址及其各自的返回结果,这样对于追踪dns解析中的问题有很大的帮助。
dig 命令批量 DNS 查询
如果要对大量域名进行 DNS 查询,可以将其全部写入到一个文本文件中(一行一个),然后使用-f参数,再跟止文件名即可,例如:
1 | dig -f domains.txt +short |
.digrc 文件
还可通过不同用户的${HOME}/.digrc文件来控制 dig 命令的行为,如果.digrc文件存在于用户的主目录中,则 dig 可以读取其中的参数,而无需用户在执行命令时手动添加。例如,直接在~/.digrc文件中写入+nocmd +noall +answer参数。
nslookup
nslookup
代表 名称服务器查找。它是一个命令行工具,用于查询 DNS(域名系统)服务器,以检索有关域名、IP 地址和其他 DNS 记录的信息。通过促进 DNS 查询,nslookup
帮助用户和管理员诊断和解决与 DNS 相关的问题。
作用
- 验证 DNS 服务器配置。
- 确认 DNS 记录的存在和配置。
- 检测 DNS 传播问题。
- 协助排除与 DNS 相关的连接问题。
与其他 DNS 工具的区别
- dig(域信息探测器): 提供比 nslookup 更详细和灵活的查询选项。许多网络管理员更喜欢它,因为它的输出更全面。
- host: 一个更简单的 DNS 查找工具,适合快速查询而无需大量输出。
基本语法
1 | nslookup [选项] [主机名] [DNS 服务器] |
基本主机名查找
1 | nslookup www.aliyun.com |
反向 IP 查找
1 | nslookup xxx.xxx.xxx.xxx |
指定 DNS 服务器
1 | nslookup www.aliyun.com 223.5.5.5 |
设置查询类型
1 | nslookup -type=[记录类型] [主机名] |
检索A记录
1
nslookup -type=A www.aliyun.com
检索MX记录
1
nslookup -type=MX aliyun.com
检索CNAME记录
1
nslookup -type=CNAME www.aliyun.com
交互模式
- set type=[记录类型]: 指定要查询的 DNS 记录类型(例如 A、MX、CNAME)。
- server [DNS 服务器]: 更改会话中用于查询的 DNS 服务器。
- exit: 退出交互模式。
在脚本中使用 nslookup
nslookup
可以集成到脚本中,以自动化 DNS 查询,实现批处理和 DNS 记录监控。
1 | !/bin/bash |
常见的DNS系统(如:Bind、PowerDNS等)及相关软件特性
Bind
BIND(Berkeley Internet Name Domain)作为一款目前市面是最主流的开源DNS软件,占据了市面上DNS服务器软件的九成,目前由 互联网系统协会 (Internet Systems Consortium) 负责开发和维护。
PowerDNS
PowerDNS(PDNS)成立于20世纪90年代末,是开源DNS软件、服务和支持的主要供应商,它们提供的权威认证DNS服务器和递归认证DNS服务器都是100%开源的软件,同时也和红帽等开源方案提供商一样提供了付费的技术支持版本。同时官方表示为了避免和软件使用者出现竞争,他们只提供服务支持而不提供DNS托管服务。
编程语言中常用的相关库(Go, Java)
Java
DNSJava
Go
1 | go get github.com/miekg/dns |