DNS(Domain Name System)域名系统协议,作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用挨个记住IP地址。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议号是udp53。DNS服务器的作用就是就好比通讯录一样,为各种网络程序找到对应目标主机的IP地址或对应的主机域名。每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。这就是DNS协议所要完成的功能。
静态映射
每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用;
动态映射
建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射;
在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法。可以将一些常用的域名放入静态域名解析表中,这样可以大大提高域名解析效率。正向解析:根据主机名称(域名)查找对应的IP地址(实际应用中最多的),反向解析:根据IP地址查找对应的主机域名(不常用,一般用于搭建邮件服务器时)。
缓存域名服务器
也称为高速缓存服务器,通过向其他域名服务器查询获得域名->IP地址记录,将域名查询结果缓存到本地,提高重复查询时的速度;
主域名服务器
特定DNS区域的官方服务器,具有唯一性,负责维护该区域内所有域名->IP地址的映射记录;
从域名服务器
通俗一点就是用于备份DNS服务器的,也称为辅助域名服务器其维护的域名->IP地址记录,来源于主域名服务器搭建DNS服务,应用的软件为:BIND(Berkeley Internet Name Daemon)。
一个提供简单、直接的转换服务的黑盒子。
事实上,这个黑盒子极为复杂。它由分布于全球的大量DNS服务器以及定义了DNS服务器与查询主机通信方式的应用层协议组成。
单点DNS服务器的缺陷:
单点故障
通信容量
远距离的集中式数据库
维护
为了处理扩展性问题,DNS使用了大量的DNS服务器。大致来说,有3种类型的服务器:根DNS服务器、顶级域(Top-Level Domain.TLD)DNS服务器和权威DNS服务器;根DNS服务器:因特网上有13个根DNS服务器,这13个服务器实际上是一个冗余的计算机网络以提供安全性和可靠性;它主要提供TLD服务器的IP地址;
顶级域DNS服务器
负责顶级域名,如com,org,net,edu,gov以及各个国家的顶级域名,主要提供权威DNS服务器的IP地址;
权威DNS服务器
互联网上的每一个能够公共访问的主机都具有一个DNS记录,这些记录由某些组织机构的权威服务器保存。例如常见的服务提供商以及学校和公司都会实现和维护自己的权威服务器来保存一些主机DNS记录。
本地DNS服务器
该DNS服务器不属于上述的层次结构。但它发挥着极其重要的作用;
每个ISP(如一个居民区的ISP或者一个机构的ISP)都有一台本地DNS服务器,这些本地DNS服务器通常“邻近”用户主机。当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS服务器层次结构中。
递归查询和迭代查询
递归查询
DNS服务器收到一个域名解析请求时,如果所要检索的资源记录不在本地,DNS服务器将和自己的上一层服务器交互,获得最终的答案,并将其返回给客户(例如上述的cse.sicnu.edu到dns.sicnu.edu的查询)
迭代查询
DNS服务器收到解析请求,首先在本地的数据库中查找是否有相应的资源记录,如果没有,则向客户(本地服务器)提供另外一个DNS服务器的地址,客户(本地服务器)负责把解析请求发送给新的DNS服务器地址实战中,常常是采用上述的方式进行解析。(只有从请求主机到本地DNS服务器的查询是递归的,其余的查询都是迭代的)
如上述可见,我们为了获得一份主机名的映射,发送了8份DNS报文。消耗太多,所以我们需要引入缓存这一概念。
为了改善时延性能并减少在因特网上到处传输的DNS报文数量,DNS缓存有如下作用
DNS服务器在接收到一个DNS回答(包含主机名到IP地址的映射)时,将映射缓存在本地存储器中。
由于主机和主机名与IP地址间的映射并不是永久的,DNS服务器在一段时间后,将丢弃缓存的信息。
本地DNS服务器也可以缓存TLD服务器的IP地址,因而允许本地DNS服务器绕过查询链中的根DNS服务器,事实上,因为缓存的存在,大多数DNS查询中,根服务器都被绕过了。
由此可见,通过DNS缓存可以大大的减少因特网上到处传输的DNS报文数量。
这里有一些内容,本文没有说明,感兴趣的可以自己去查一下,主要是为了说明最终会去通过本地DNS服务器去执行递归查询操作。
当在浏览器中输入URL时,浏览器会先检查自己的缓存是否有域名IP的映射关系,有则直接使用IP进行通信;如浏览器没有缓存,则操作系统检查本地hosts文件是否有域名IP的映射关系,有则使用IP进行通信;如果hosts没有这个域名的映射,则查找本地DNS解析器缓存是否有映射关系,有则直接返回完成域名解析;如果还未找到映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,也就是本地DNS服务器,如果服务器已缓存了映射关系,则使用这个IP地址映射返回完成域名解析,此时解析不具有权威性;如果本地DNS服务器缓存已经失效,进行上述的递归查询和迭代查询操作。
所有的DNS服务器共同构成了DNS分布式数据库,在这些DNS服务器中存储了资源记录(Resource Record),RR提供了主机名到IP地址的映射。每个DNS回答报文包含一条或多条资源记录。
RR是一个4元组:(Name,Value,Type,TTL)
TTL是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。
Name和Value的值取决于Type:
if Type = A then Name是主机名,Value是该主机名对应的IP地址。if Type = NS then Name是个域,Value是个知道如何获得该域中主机IP地址的权威DNS服务器的主机名。if Type = CNAME then Value是别名为Name的主机对应的规范主机名。if Type = MX then Value是个别名为Name的邮件服务器的规范主机名。在DNS查询链中,通常在获得一个NS类型的RR时,会携带一个A类型的RR,A类型的RR记录了NS类型的RR中Value的DNS服务器的IP地址。
例如如下格式:
(umass.edu,dns.umass.edu,NS)
(dns.umass.edu,128.119.40.111,A)
DNS报文DNS只有两种报文:查询报文和回答报文,且具有相同的格式。
在DNS数据库中插入记录在DNS数据库中插入记录是用于我们为自己的网站注册域名的时候使用,主要需要做以下两步来保证我们的域名能够被公开访问;
与你的网站域名有关的基本DNS服务器和权威DNS服务器的信息记录在顶级域名服务器中:注册机构会保证将一个类型NS和一个类型A的记录输入到TLD.com服务器中;主机名和IP记录在权威服务器中:需要将你的A类型资源记录和MX资源记录输入到你的权威DNS服务器中。
[root@superman ~]# yum install bind bind-chroot bind-util bind-libs -y
bind:提供了域名服务的主要程序及相关文件;
bind-utils:提供了对DNS服务器的测试工具程序(如nslookup、dig等);
bind-chroot :为bind提供一个伪装的根目录以增强安全性(将“/var/named/chroot/”文件夹作为BIND的根目录);
bind-libs:被bind和bind-utils包中的程序共同用到的库文件。
DNS主配置文件:/etc/named.conf ,/etc/named.rfc1912.zones;
DNS数据库文件存放目录:/var/named,每一个域文件都放在这里;
DNS服务的服务脚本:/etc/rc.d/init.d/named。
这里以superman.com域为例对应IP 为10.224.3.200;ftp.superman.com对应IP为10.224.3.200
[root@superman ~]# vi /etc/named.conf
修改如下内容:
listen-on port 53 { any; };
allow-query { any; };

[root@superman ~]# vi /etc/named.rfc1912.zones
添加如下内容:
zone "superman.com" IN {
type master;
file "superman.com.zone";
allow-update { none; };
};
其中zone的格式为:
zone "ZONE_NAME" IN {
type master;
file "ZONE_NAME.zone"
};

[root@superman ~]# cp /var/named/named.empty /var/named/superman.com.zone
[root@superman ~]# vi /var/named/superman.com.zone
修改成如下内容:
$TTL 3H
@ IN SOA . admin.superman.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS .
www IN A 10.224.3.200
ftp IN A 10.224.3.200
@ IN A 10.224.3.200

[root@superman ~]# chgrp named /var/named/superman.com.zone
(1)检查配置文件语法
[root@superman ~]# named-checkzone <ZONE_NAME> <ZONE_NAME.zone>
(2)检查域配置文件语法
[root@superman ~]# named-checkzone superman.com /var/named/superman.com.zone
zone superman.com/IN: loaded serial 20170526
OK
[root@superman ~]#

[root@superman ~]# systemctl start named
[root@superman ~]# firewall-cmd --add-port=53/tcp --permanent
[root@superman ~]# firewall-cmd --add-port=53/udp --permanent
[root@superman ~]# firewall-cmd --add-port=953/tcp --permanent
[root@superman ~]# firewall-cmd --reload
说明:有的教程写的是只开放53端口就可以了。
将电脑的首选DNS设置为10.224.3.11(10.224.3.11是我搭建的dns服务器地址)。同过ping,nslookup(如ping nslookup )等命令,可以发现返回的是我们配置的10.224.3.200。说明配置成功。

这里以superman.com域为例IP地址10.224.3.200/24对应域名为;10.224.3.200/24对应域名为ftp.superman.com;
[root@superman ~]# vi /etc/named.conf
修改如下内容:
listen-on port 53 { any; };
allow-query { any; };

[root@superman ~]# vi /etc/named.rfc1912.zones
添加如下内容:
zone "3.224.10.in-addr.arpa" IN {
type master;
file "3.224.10.zone";
allow-update { none; };
};
格式为:pwd.
zone "NET_IP.in-addr.arpa" IN { #NET_IP 为反向解析的IP网段
type master;
file "NAME_ZONE"; #NAME_ZONE为反向解析库配置文件名称
};

[root@superman ~]# cp /var/named/named.empty /var/named/3.224.10.zone
[root@superman ~]# vi /var/named/3.224.10.zone
修改成如下内容:
$TTL 3H
@ IN SOA . admin.superman.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS .
www A 10.224.3.200
ftp A 10.224.3.200
@ A 10.224.3.200
www IN PTR .
ftp IN PTR ftp.superman.com.
@ IN PTR superman.com.

[root@superman ~]# chgrp named /var/named/3.224.10.zone
(1)检查配置文件语法
[root@superman ~]# named-checkzone <ZONE_NAME> <ZONE_NAME.zone>
(2)检查域配置文件语法
[root@superman ~]# named-checkzone 3.224.10.in-addr.arpa /var/named/3.224.10.zone
zone 3.224.10.in-addr.arpa/IN: loaded serial 0
OK
[root@superman ~]#

[root@superman ~]# systemctl start named
[root@superman ~]# vi /etc/resolv.conf
添加如下内容:
domain
search
nameserver 10.224.3.11
[root@superman ~]# dig -x 10.224.3.200
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> -x 10.224.3.200
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 42089
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;200.3.224.10.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
3.224.10.in-addr.arpa. 10800 IN SOA . admin.superman.com. 0 86400 3600 604800 10800
;; Query time: 0 msec
;; SERVER: 10.224.3.11#53(10.224.3.11)
;; WHEN: Fri May 26 18:29:25 CST 2023
;; MSG SIZE rcvd: 112
[root@superman ~]#

👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
有什么吐槽或反馈意见,直接告诉我!
温馨提示:如出现二维码失效也可直接添加微信号:ysc13803862469。

原文作者:超哥的IT私房菜;如有侵权,请联系管理员删除。