关于DNS的小结
Contents
1 什么是DNS
Domain Name Service,将域名解析为对应的IP地址的一种服务。
2 为什么需要DNS
当我们访问互联网上的不同站点服务时,其实是分别访问它们后端的服务器的IP地址,然后获取对应的服务的。但是,人们很难记住IP地址,人脑对名字比较敏感。比如,人们选择通过http://google.com 来访问Google,而不是http://8.7.198.46 。
3 DNS分类
内网DNS:我们可以在局域网内部假设自己的DNS服务器来解析内网域名。依然还记得10年前,部署Oracle 11gR2 RAC数据库时,配置Oracle的scan name和scan IP的场景,通过配置DNS服务器来实现的。
外网DNS:通常由一些域名服务商来维护DNS服务器。
4 DNS配置
server端:需要单独的服务器来安装配置dns服务;
client端:Linux上,只需要在/etc/resolv.conf文件里写入nameserver dns_server_ip即可。如:
[root@node-1 ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 172.16.6.11 [root@node-1 ~]#
5 DNS服务分类
根域名服务器:.
顶级域名服务器:解析.com;.org;.cn;.net;等;
二级域名服务器:解析knockatdatabase.com;163.com;等;
三级域名服务器:解析ex.knockatdatabase.com;mail.163.com;等;
6 DNS工作原理
互联网上收集到的2个比较好的参考图片:
以及倪朋飞老师的Linux性能优化专栏,第37 | 案例篇:DNS 解析时快时慢,我该怎么办?的一张图片:
演示,DNS解析流程图:
#1 如果没有dig工具,需要手工安装 [root@ky_app1 ~]# dig +trace +nodnssec knockatdatabase.com -bash: dig: command not found [root@ky_app1 ~]# yum install bind-utils -y ... Installed: bind-utils.x86_64 32:9.11.4-26.P2.el7_9.9 Dependency Installed: bind-libs.x86_64 32:9.11.4-26.P2.el7_9.9 Complete! [root@ky_app1 ~]# cat /etc/resolv.conf # Generated by NetworkManager search openstacklocal nameserver 100.125.136.29 nameserver 100.125.1.250 options timeout:1 single-request-reopen [root@ky_app1 ~]# #2 dig +trace +nodnssec knockatdatabase.com [root@ky_app1 ~]# dig +trace +nodnssec knockatdatabase.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> +trace +nodnssec knockatdatabase.com ;; global options: +cmd . 518400 IN NS K.ROOT-SERVERS.NET. . 518400 IN NS L.ROOT-SERVERS.NET. . 518400 IN NS A.ROOT-SERVERS.NET. . 518400 IN NS F.ROOT-SERVERS.NET. . 518400 IN NS E.ROOT-SERVERS.NET. . 518400 IN NS D.ROOT-SERVERS.NET. . 518400 IN NS J.ROOT-SERVERS.NET. . 518400 IN NS M.ROOT-SERVERS.NET. . 518400 IN NS I.ROOT-SERVERS.NET. . 518400 IN NS G.ROOT-SERVERS.NET. . 518400 IN NS H.ROOT-SERVERS.NET. . 518400 IN NS C.ROOT-SERVERS.NET. . 518400 IN NS B.ROOT-SERVERS.NET. ;; Received 239 bytes from 100.125.136.29#53(100.125.136.29) in 2 ms com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. ;; Received 844 bytes from 202.12.27.33#53(M.ROOT-SERVERS.NET) in 58 ms knockatdatabase.com. 172800 IN NS dns2.hichina.com. knockatdatabase.com. 172800 IN NS dns1.hichina.com. ;; Received 406 bytes from 192.43.172.30#53(i.gtld-servers.net) in 226 ms knockatdatabase.com. 600 IN A 8.129.225.115 ;; Received 64 bytes from 139.224.142.124#53(dns2.hichina.com) in 33 ms [root@ky_app1 ~]#
1 从本地配置的DNS服务器那里获取根域名(.)服务器的NS记录;
2 从根域名服务器的NS记录里选择1个顶级域名服务器(M.ROOT-SERVERS.NET),查询顶级域名.com的NS记录;
3 从.com的NS记录中选择1个(i.gtld-servers.net),并返回二级域名knockatdatabase.com的NS服务器:dns1.hichina.com.和dns2.hichina.com.。注意,这里的返回值后面有个英文句点符号。
4 最后,从knockatdatabase.com的2个NS服务器中,选择1个(dns2.hichina.com),查到knockatdatabase.com的A记录地址是8.129.225.115。
而我的这个站点在阿里云上解析的信息如下:
结合上述信息,域名解析流程就更清晰了。
7 DNS记录类型
A 记录,把域名解析成 IP V4地址;
CNAME:将域名指向另外一个域名;
8 DNS主机记录
@表示,直接解析 knockatdatabase.com
www表示,解析www.knockatdatabase.com
也就是说,当我们在浏览器里输入knockatdatabase.com或者www.knockatdatabase.com 都可以正常访问。
9 查看域名的A记录
[root@ky_app1 ~]# nslookup knockatdatabase.com Server: 100.125.136.29 Address: 100.125.136.29#53 Non-authoritative answer: Name: knockatdatabase.com Address: 8.129.225.115 [root@ky_app1 ~]# nslookup www.knockatdatabase.com Server: 100.125.136.29 Address: 100.125.136.29#53 Non-authoritative answer: Name: www.knockatdatabase.com Address: 8.129.225.115 [root@ky_app1 ~]#
10 DNS解析tips
缓存:
通常在解析过程中,我们可以采用DNS缓存的方式来提升解析性能。也就是说,当我们要找knockatdatabase.com这个域名时,我们本地的DNS服务器在第一次解析时,它不知道对应的IP是什么,于是经过请求根域名服务器,再到顶级域名服务器,层层嵌套查找之后,得到对应的IP地址是8.129.225.115,那么下一次我们再次向我们的DNS服务器查找这个域名对应的IP地址是多少的时候,本地DNS服务器可以通过之前解析的缓存结果立即返回8.129.225.115,而不必再一层一层的查找一次了。
当然,缓存也有过期的情况,或者后端服务器的IP地址的确更新了,那么这些情况需要关注。