DNS

DNS

计算机必须要向 DNS 服务器查询 Hostname 对应 IP 的信息。 所以 DNS 主机的 IP 就必须要在我的计算机里面配置好才行,并且必须要是输入IP喔,不然计算机怎么连到 DNS 服务器去要求数据呢。所以当有时候QQ能发送消息,但域名访问不了网站,这就有可能是出现了DNS问题。就要排查一下本机的DNS配置是否出现了问题。

DNS 使用了类似树状目录的架构。将主机名的管理分配在不同层级的 DNS 服务器当中,经由分层管理, 所以每一部 DNS 服务器记忆的信息就不会很多,而且若有 IP 异动时也相当容易修改。因为你如果已经申请到主机名解析的授权, 那么在你自己的 DNS 服务器中,就能够修改全世界都可以查询到的主机名了。而不用透过上层 ISP 的维护。

在整个 DNS 系统的最上方一定是 . (小数点) 这个 DNS 服务器称为 root,最早以前它底下管理的有

  • com, edu, gov, mil, org, net 这种特殊领域
  • 以国家为分类的第二层的主机名。

这两者称为 Top Level Domains (TLDs)。

  • 一般最上层领域名 (Generic TLDs, gTLD):例如 .com, .org, .gov 等等
  • 国码最上层领域名 (Country code TLDs, ccTLD):例如 .jp, .cn等等

先来谈谈一般最上层领域 (gTLD) 好了,最早 root 仅管理六大领域名,分别如下:

名称 代表意义
com 公司、行号、企业
org 组织、机构
edu 教育单位
gov 政府单位
net 网络、通讯
mil 军事单位

那么看到这么多TLD,我们可以自己设定一个TLD吗?当然不可以,因为我们得向上层 ISP 申请领域名的授权才行。各层 DNS 都能管理自己辖下的主机名或子领域,因此 .tw 可以自行规划自己的子领域名字。 例如ISP提供的 .idv.tw 的个人网站。也就是说『 每个上一层的 DNS 服务器所记录的信息,其实只有其下一层的主机名而已! 』

会这样设定的原因不是没有道理的!这样设计的好处就是:每部机器管理的只有下一层的 hostname 对应 IP 而已,所以减少了管理上的困扰!而下层 Client 端如果有问题,只要询问上一层的 DNS server 即可!不需要跨越上层,除错上面也会比较简单呢!

刚刚说过 DNS 是以类似『树状目录』的型态来进行主机名的管理的 。所以每一部 DNS 服务器都『仅管理自己的下一层主机名』而已, 至于下层的下层,则『授权』给下层的 DNS 主机来管理啦。以下图来说一说原理:

DNS

简单来讲就是: 当 DNS 服务器在自己的数据库找不到所需的信息时, 一定会去找 .(root) ,然后再一层一层的向下寻找。

既然 DNS 系统使用的是网络的查询,那么自然需要有监听的端口。就是 53 这个端口。可以到你的 Linux 系统中的 /etc/services 这个文件中看到。搜一下 domain 这个关键词, 就可以查到 53 这个端口了。

[root@test01 yoyo]# cat /etc/services | grep domain
domain          53/tcp                  # name-domain server
domain          53/udp
domaintime      9909/tcp                # domaintime
domaintime      9909/udp                # domaintime
[root@test01 yoyo]#

正解与反解

从主机名查询到 IP 的流程称为:正解 从 IP 反解析到主机名的流程称为:反解

因此,正解通常具有底下几种标志:

类型 目的
A 地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个IP 地址,就需要添加 A 记录。
AAAA 用来指定主机名(或域名)对应的 IPv6 地址记录。
CNAME 如果需要将域名指向另一个域名,再由另一个域名ᨀ供 ip 地址,就需要添加 CNAME 记录 (代表这个主机别名的主机名字)
MX 如果需要设置邮箱,让邮箱能够收到邮件,需要添加 MX 记录。(接收邮件的服务器主机名)
NS 域名服务器记录,如果需要把子域名交给其他 DNS 服务器解析,就需要添加 NS 记录。(管理这个领域名的服务器主机名字)
SOA SOA 这种记录是所有区域性文件中的强制性记录。它必须是一个文件中的第一个记录 (管理这个领域名的七个重要参数)
TXT 可以写任何东西,长度限制为 255。绝大多数的 TXT 记录是用来做SPF 记录(反垃圾邮件)。
AFSDB Andrew 文件系统数据库服务器记录
ATMA ATM 地址记录
HINHO 硬件配置记录,包括 CPU、操作系统信息
ISDN 域名对应的 ISDN 号码
MB 存放指定邮箱的服务器
MG 邮件组记录
MINFO 邮件组和邮箱的信息记录
MR 改名的邮箱记录
PTR 反向记录
RP 负责人记录
RT 路由穿透记录
SRV TCP 服务器信息记录
X25 域名对应的 X.25 地址记录

这个 CNAME 有啥好处呢?用 A 就好了吧?

其实还是有好处的,举例来说,如果你有一个IP,这个IP是给很多主机名使用的。 那么当你的 IP 更改时,所有的数据就 得通通更新 A 标志才行。 如果你只有一个主要主机名设定 A,而其他的标志使用 CNAME 时,那么当 IP 更改,那你只要修订一个 A 的标志,其他的 CNAME 就跟着变动了,处理起来比较容易。

测试DNS的命令dig
➜  ~ dig baidu.com

; <<>> DiG 9.9.7-P3 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58894
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;baidu.com.         IN  A

;; ANSWER SECTION:
baidu.com.      577 IN  A   123.125.114.144
baidu.com.      577 IN  A   220.181.57.216

;; Query time: 73 msec
;; SERVER: 172.24.6.11#53(172.24.6.11)
;; WHEN: Thu May 09 17:28:38 CST 2019
;; MSG SIZE  rcvd: 70