CNAME 是 Canonical Name 的缩写,它是 DNS(域名系统)记录的一种类型。CNAME 记录用于将一个域名映射(别名)到另一个域名。换句话说,当你访问一个设置了 CNAME 记录的域名时,你实际上被重定向到了另一个域名。
例如,假设你有一个域名 www.baidu.com
,你想让用户通过 example.com
访问你的网站。你可以为 example.com
设置一个 CNAME 记录,将其映射到 www.baidu.com
。这样,当用户访问 example.com
时,他们实际上访问的是 www.baidu.com
。
CNAME 记录在以下情况下非常有用:
注意,CNAME 记录不能与任何其他数据共享同一个名称。也就是说,如果一个域名有 CNAME 记录,那么它不能有其他类型的记录(如 A 记录或 MX 记录)。
A 记录是“地址记录”的缩写,它用于将域名映射到一个 IPv4 地址。当你在浏览器中输入一个网址时,浏览器首先会查找该网址对应的 A 记录,以获取网站的实际 IP 地址。例如,如果你有一个域名 example.com,并且你希望它指向你的服务器 IP 地址(如 192.0.2.1),你就需要为 example.com 设置一个 A 记录,指向 192.0.2.1。
AAAA 记录与 A 记录类似,但它用于将域名映射到 IPv6 地址,而不是 IPv4 地址。IPv6 是一个新的 IP 地址版本,提供了更多的可用地址。例如,如果你的服务器有一个 IPv6 地址(如 2001:0db8:85a3:0000:0000:8a2e:0370:7334),并且你希望你的域名 example.com 指向这个地址,你就需要为 example.com 设置一个 AAAA 记录,指向这个 IPv6 地址。
MX 记录是“邮件交换记录”的缩写,它用于指定处理一个域名的邮件服务的服务器。例如,如果你有一个域名 example.com,并且你希望所有发送到 @example.com 的邮件都被送到一个特定的邮件服务器(如 mail.example.com),你就需要为 example.com 设置一个 MX 记录,指向 mail.example.com。
NS 记录是"Name Server 记录"的缩写,它指定了托管特定域名的 DNS 服务器。换句话说,NS 记录告诉互联网哪些 DNS 服务器被授权为特定域名的官方服务器。例如,如果你的域名是 example.com,并且你的 DNS 服务提供商是 dnsprovider.com,那么你的 NS 记录可能会指向 ns1.dnsprovider.com 和 ns2.dnsprovider.com。
DNS(Domain Name System)解析过程是一个将域名解析为 IP 地址的过程。以下是 DNS 完整的解析过程:
用户在浏览器中输入一个 URL,如 <www.baidu.com> ,首先,计算机会在本地的 hosts 文件中查找是否有该域名与 IP 地址的映射关系,如果有,则直接访问对应的 IP 地址。
如果本地 hosts 文件中没有找到,浏览器会查找自己的 DNS 缓存(浏览器会缓存一些 DNS 记录),看是否有对应的 DNS 记录。
如果浏览器缓存中也没有找到,操作系统会查找自己的 DNS 缓存,看是否有对应的 DNS 记录。
如果系统缓存中也没有找到,计算机会向本地路由器发送一个 DNS 查询请求,看路由器是否有对应的 DNS 记录。
如果路由器中也没有找到,计算机会向 ISP 的 DNS 服务器发送一个 DNS 查询请求,看 ISP 的 DNS 服务器是否有对应的 DNS 记录。
如果 ISP 的 DNS 服务器中也没有找到,ISP 的 DNS 服务器会向根域名服务器发送一个 DNS 查询请求。
根域名服务器收到请求后,会返回一个顶级域名服务器(TLD)的地址。ISP 的 DNS 服务器收到这个地址后,会向 TLD 发送查询请求。
顶级域名服务器收到请求后,会返回对应的权威 DNS 服务器的地址。ISP 的 DNS 服务器收到这个地址后,会向权威 DNS 服务器发送查询请求。
权威 DNS 服务器收到请求后,会返回对应的 IP 地址。ISP 的 DNS 服务器收到这个 IP 地址后,会将其返回给计算机,计算机就可以通过这个 IP 地址访问目标网站。
在这个过程中,每个参与 DNS 查询的 DNS 服务器,都会将查询结果缓存一段时间。这样,下次查询同一个域名时,就可以直接返回结果,加快解析速度。
用于查询 DNS 名称服务器以获取有关网络主机的信息。
dig(选项)(参数)
@<服务器地址>:指定进行域名解析的域名服务器;
-b<ip 地址>:当主机具有多个 IP 地址,指定使用本机的哪个 IP 地址向域名服务器发送域名查询请求;
-f<文件名称>:指定 dig 以批处理的方式运行,指定的文件中保存着需要批处理查询的 DNS 任务信息;
-P:指定域名服务器所使用端口号;
-t<类型>:指定要查询的 DNS 数据类型,含 A、MX 记录。
-x<IP 地址>:执行逆向域名查询;
-4:使用 IPv4;
-6:使用 IPv6;
-h:显示指令帮助信息。
(1)常规用法,不加任何参数
dig www.baidu.com
(2)+noall
和 +answer
:这两个选项通常一起使用,用于只显示查询的答案部分,不显示其他信息。
dig www.baidu.com +noall +answer
(3)+trace
:这个选项用于显示查询的详细过程,可以用来跟踪 DNS 解析的路径。
dig www.baidu.com +trace
(1)常规查询
root@41:/home/chow# dig www.baidu.com
; <<>> DiG 9.16.1-Ubuntu <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16579
;; flags: qr rd ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 0 IN CNAME www.a.shifen.com.
www.a.shifen.com. 0 IN A 110.242.68.3
www.a.shifen.com. 0 IN A 110.242.68.4
;; Query time: 0 msec
;; SERVER: 172.21.96.1#53(172.21.96.1)
;; WHEN: Mon Jul 01 20:14:48 CST 2024
;; MSG SIZE rcvd: 122
结果说明:
HEADER 部分:opcode: QUERY
表示这是一个查询操作,status: NOERROR
表示查询没有出错,id: 16579
是这个查询的唯一标识。
flags 部分:qr
表示这是一个查询响应,rd
表示请求递归查询,ad
表示在响应中包含了验证数据。QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
表示这个查询请求了 1 个问题,得到了 3 个答案,没有权威记录和额外记录。
WARNING 部分:这部分表示尽管请求了递归查询,但是服务器并没有提供递归查询。
QUESTION 部分:这部分显示了查询的问题,这里是查询www.baidu.com
的 A 记录。
ANSWER 部分:这部分显示了查询的答案。www.baidu.com
的 CNAME 记录是www.a.shifen.com
,然后www.a.shifen.com
的 A 记录是110.242.68.3
和110.242.68.4
。
Query time 部分:这部分显示了查询的时间,这里是 0 毫秒。
SERVER 部分:这部分显示了进行查询的 DNS 服务器的地址,这里是172.21.96.1#53
。
WHEN 部分:这部分显示了查询操作的时间,这里是 2024 年 7 月 1 日 20:14:48。
MSG SIZE 部分:这部分显示了接收到的消息大小,这里是 122 字节。
总的来说,这个查询的结果表示www.baidu.com
实际上是www.a.shifen.com
,其 IP 地址是110.242.68.3
和110.242.68.4
。
(2)trace 路径追踪
root@chow:/home/chow# dig www.baidu.com +trace
; <<>> DiG 9.16.1-Ubuntu <<>> www.baidu.com +trace
;; global options: +cmd
. 0 IN NS l.root-servers.net.
. 0 IN NS b.root-servers.net.
. 0 IN NS d.root-servers.net.
. 0 IN NS j.root-servers.net.
. 0 IN NS k.root-servers.net.
. 0 IN NS i.root-servers.net.
. 0 IN NS f.root-servers.net.
. 0 IN NS e.root-servers.net.
. 0 IN NS a.root-servers.net.
. 0 IN NS g.root-servers.net.
. 0 IN NS c.root-servers.net.
. 0 IN NS h.root-servers.net.
. 0 IN NS m.root-servers.net.
l.root-servers.net. 0 IN A 199.7.83.42
l.root-servers.net. 0 IN AAAA 2001:500:9f::42
b.root-servers.net. 0 IN A 170.247.170.2
b.root-servers.net. 0 IN AAAA 2801:1b8:10::b
d.root-servers.net. 0 IN A 199.7.91.13
d.root-servers.net. 0 IN AAAA 2001:500:2d::d
j.root-servers.net. 0 IN A 192.58.128.30
j.root-servers.net. 0 IN AAAA 2001:503:c27::2:30
k.root-servers.net. 0 IN A 193.0.14.129
k.root-servers.net. 0 IN AAAA 2001:7fd::1
i.root-servers.net. 0 IN A 192.36.148.17
i.root-servers.net. 0 IN AAAA 2001:7fe::53
;; Received 804 bytes from 172.21.96.1#53(172.21.96.1) in 10 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 20240715050000 20240702040000 20038 . GnDoxEAaH770WTMRpN/KvmhPbqrO2DLCffgsixXh24ooBvKSmQqc1FMd KX45wku8TaXZkfp4k+Yy/I8IDddQbbhV32aMd/oAJ5EqJPVZnEX50fTY iDAadzEEEdMv4tVh0C25SowAcHlqONWlFIi2udDCZjskkUDP/LZH0V+w WA7xjE1sRzEze+olN0P+zBfxfecVo5csOVa85G6UMyEYsvEjfHSygb64 v7TOmHpLt/YEUHDNwvQTsJ0yOXVCq1PIQusPkY4Lk7/a7xt9BcHs6t1+ WTK2CyXrA++HqJNs9oMnWYCqc7j25/QnQTAbUzfQnX7LLEXi0sXkR0aq efxPtA==
;; Received 1173 bytes from 192.58.128.30#53(j.root-servers.net) in 0 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. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 13 2 86400 20240707002457 20240629231457 956 com. fUqDTwkfdL3McvJaDUQI8nJAOwYVk7quI5jYU4rLvVQofgJEZ7GJjNZL 7BY4hkQh/xmIjp1M5Ec+n5vVLxAt7A==
HPVV1UNKTCF9TD77I2AUR73709T975GH.com. 86400 IN NSEC3 1 1 0 - HPVVP23QUO0FP9R0A04URSICJPESKO9J NS DS RRSIG
HPVV1UNKTCF9TD77I2AUR73709T975GH.com. 86400 IN RRSIG NSEC3 13 2 86400 20240706005132 20240628234132 956 com. 1MtU07lj/BUIRTop6izDQ2p/7o6qoWR+OGxt1jP0SJjR0eBx2ArpmVEg d3+UJBi4vx3sX/DFnSoJLxi32PHwFA==
;; Received 657 bytes from 192.55.83.30#53(m.gtld-servers.net) in 219 ms
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
;; Received 100 bytes from 180.76.76.92#53(ns7.baidu.com) in 10 ms
以上结果说明了 <www.baidu.com> 域名的 DNS 解析完整路径。首先从根 DNS 服务器(.root-servers.net)开始,然后到顶级域名服务器(.gtld-servers.net),再去权威 DNS 服务器查询(ns*.baidu.com)具体 IP 地址。www.baidu.com 是一个别名(CNAME),实际上它指向的是 <www.a.shifen.com> 。
其中 172800、86400 表示 TTL 时间。
dig 和 nslookup 都是用于查询 DNS 服务器的工具。dig 提供更详细的输出,更多的选项和灵活性,并且在处理错误时通常会提供更多的信息。nslookup 的输出相对较少,选项和灵活性也较少。虽然 nslookup 在许多系统上仍可用,但许多组织(包括 ISC 和微软)都推荐使用 dig 来代替 nslookup。