一、什么是DNS?
DNS(Domain Name System)即域名系统,是英文 Domain Name System 的缩写。顾名思义,它主要是用来管理域名和 IP 地址之间的映射关系,使得用户可以通过便捷易记的域名来访问互联网上的网站或其他网络服务。
在 DNS 中,每一个域名都属于一个层次结构,并被划分成若干个单元。通常我们所使用的域名是最顶层的 DNS 单元,例如以 .com、.cn、.org等结尾的域名。
二、DNS查询方式
在 Linux 中,可以通过多种方式进行 DNS 域名解析,主要包括以下几种:
1. 使用dig命令
dig 命令是最常见的 Linux 命令之一,它可以快速进行 DNS 查询。通过简单的命令格式,可以查询一个或多个域名对应的 IP 地址。
dig example.com ; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> example.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25399 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;example.com. IN A ;; ANSWER SECTION: example.com. 3598 IN A 93.184.216.34 ;; Query time: 294 msec ;; SERVER: 172.17.0.2#53(172.17.0.2) ;; WHEN: Tue Jul 28 08:45:04 UTC 2020 ;; MSG SIZE rcvd: 55
通过上述例子,我们可以看到查询 example.com 这个域名对应的 IP 地址结果为:93.184.216.34。
2. 使用host命令
host 命令是 Linux 中另一个进行 DNS 查询的命令,使用方法和 dig 相似。
host example.com example.com has address 93.184.216.34 example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946 example.com mail is handled by 0 .
从上面的输出结果可以看出,该域名不仅对应一个 IPv4 地址,还对应一个 IPv6 地址。
3. 使用nslookup命令
nslookup 命令也是 Linux 中常用的进行 DNS 查询的命令。
nslookup example.com Server: 172.17.0.2 Address: 172.17.0.2#53 Non-authoritative answer: Name: example.com Address: 93.184.216.34
从上面的输出结果可以看出,使用 nslookup 命令同样可以快速查询到域名所对应的 IP 地址。
三、使用DNS缓存加速查询
DNS 查询的效率不仅仅取决于本地 DNS 服务器的速度,还受到是否启用 DNS 缓存的影响。 因为很多 DNS 查询都是重复性的操作,为了加快 DNS 解析的速度,Linux 系统具备了 DNS 缓存机制。
在 Linux 下,通过设置 /etc/nsswitch.conf 文件中的 hosts 条目为“files dns”或“files mdns” 来开启 DNS 缓存功能,加快查询速度:
# /etc/nsswitch.conf hosts: files dns
如果已经开启了 DNS 缓存,可以通过以下指令清除 DNS 缓存,以获得最新的 DNS 解析结果:
systemd-resolve --flush-caches
四、使用DNS Trace追踪域名解析
DNS Trace 一种网络工具,可以用于追踪 DNS 域名解析的全过程。通过 DNS Trace,我们可以了解某个域名需要经过哪些 DNS 服务器进行解析以及中间结果与延迟情况。
使用 dig 命令配合 DNS Trace 工具,可以进行 DNS 域名解析的全过程追踪。
dig google.com +trace ; <<>> DiG 9.10.3-P4-Ubuntu <<>> google.com +trace ;; global options: +cmd . 342503 IN NS a.root-servers.net. . 342503 IN NS b.root-servers.net. . 342503 IN NS c.root-servers.net. . 342503 IN NS d.root-servers.net. . 342503 IN NS e.root-servers.net. . 342503 IN NS f.root-servers.net. . 342503 IN NS g.root-servers.net. . 342503 IN NS h.root-servers.net. . 342503 IN NS i.root-servers.net. . 342503 IN NS j.root-servers.net. . 342503 IN NS k.root-servers.net. . 342503 IN NS l.root-servers.net. . 342503 IN NS m.root-servers.net. ;; Received 239 bytes from 10.0.2.3#53(10.0.2.3) in 29 ms com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. ;; Received 489 bytes from 192.5.5.241#53(192.5.5.241) in 139 ms google.com. 172800 IN NS ns2.google.com. google.com. 172800 IN NS ns1.google.com. google.com. 172800 IN NS ns3.google.com. google.com. 172800 IN NS ns4.google.com. ;; Received 163 bytes from 192.26.92.30#53(192.26.92.30) in 16 ms google.com. 300 IN A 216.58.220.238 ;; Received 44 bytes from 216.239.36.10#53(216.239.36.10) in 7 ms
从上述结果可以看出,本次 DNS 查询过程中经过了 4 个 DNS 服务器实现解析,耗时约 191 毫秒。
五、DNS查询结果解析
在进行 DNS 域名解析时,我们得到的结果往往是一些关键的记录类型,下面给出了一些常见 DNS 记录类型的含义和作用:
1. A 记录
A 记录(Address Record),通常也称为主机记录或 IP 记录。用于将 IPv4 地址与主机名关联起来。例如:域名foo.com对应的 IPv4地址为 192.168.1.1。
2. AAAA 记录
AAAA 记录(IPv6 Address Record),和 A 记录类似,但用于将 IPv6 地址与主机名关联起来。例如:域名foo.com对应的 IPv6地址为 2a00:1450:400e:805::200e。
3. CNAME 记录
CNAME 记录(Canonical Name Record),用于将一个 DNS 域名解析成另一个域名。例如:域名 www.baidu.com 指向的实际上是 www.a.shifen.com,是通过 CNAME 记录实现的。
4. MX 记录
MX 记录(Mail Exchange Record),表示邮件交换记录。通过 MX 记录,可以告诉邮件服务器如何向该域名的邮件服务器传递邮件。
结语
DNS 查询命令的快速查询和正确使用可以有效地缩短网络访问时间。同时,通过 DNS 追踪和其他的命令,可以深入了解 DNS 的工作原理和网络访问的整体机制,有助于进一步优化网络架构和提高网络安全性。