DNS: Domain Name Service          
            DNS服务是一种分布式数据库,它提供规范机器名到数字IP地址的映射及数字IP到规范机器名。 
DNS相关定义:
       用于主机和IP地址的一个有层次结构的名字空间;
       主机名和地址信息保存在一个分布式数据库中;
       一个查询这个数据库的解析器(resolver)
       改进了路由电子邮件的机制,以及邮件发送方的身份验证机制
       域名服务器用于交换信息的一种机制
       用于查询网络上服务的一种机制
DNS工作原理:
       DNS域名服务器其实就是个分布式数据库,它主要提供规范的FQDN到IP地址的解析,反之亦然。
构成全世界DNS系统的是一个分布式数据库,每个站点都维护着这个数据库的一个或者多个组成部分。有点类似如图1


我们通过下面的案例来介绍DNS服务器完成解析(参考图)


域名服务器解析原理及过程:

  1. 说明:服务器之间的箭头上的数字均显示DNS查询事件的次序,字母则表示事件查询请求的类型。并且在此查询之前,ns.fin.example.com服务器没有相关的缓存记录,并且本地缓存文件也没有相关的www.fin.example.com的相关记录。
  2. 本地域名服务器是一台递归服务器,当它第一次发送查询请求时,得到的是推荐DNS服务器地址,则本地DNS服务器去新的DNS服务器发出查询请求,然后再去得到推荐的DNS服务发送请求,直到找到相应的主机记录为止。
  3. 查询流程详解:
  4. <1>所以当sandy用户查询www.fin.example.com这台主机的相关记录,它首先去本地(/etc/hosts)查询有没有相关的记录,有则返回结果,
  5. 没有则去本地DNS服务器(ns.fin.example.com)发送请求。
  6. <2>本地域名服务器(ns.fin.example.com)查询缓存发现没sandy用户查询的相关记录,所以它去根服务器查询fin.example.com的相关记录,并得到一个推荐的DNS服务器的地址(.com)
  7. <3>然后本地域名服务去com域名服务器查询(fin.example.com)的相关记录,并得到了关于exampl.com域服务器地址,然后本地域名服务向example.com发送查询请求,example.com域名服务器查询缓存没有相应的答案,则推荐到fin.example.com域名服务器去查询,对于查询域名信息来说,fin.example.com的域名则是权威的,它在自己的管辖内找到www这台主机,然后用www这台主机的地址回复本地域名服务器(ns.fin.example.com)。
  8. <4>本地域名服务器(ns.fin.example.com)得到了关于www.fin.example.com的主机记录,并将记录到缓存区域,然后发送给sandy用户。
  9. <5>下次再有用户查询www.fin.example.com主机信息时,本地域名服务器直接从缓存中调用此记录即可。

注:DNS查询类型:
      递归查询:客户端得到结果要么成功,要么失败。(本地客户端和DNS服务直接交互)
       迭代查询:服务器以相关最佳记录返回本地域名服务器。(DNS服务与DNS服务交互)
所以本地客户端详本地域名服务器查询请求时,查询类型为:一次递归,多次迭代。

DNS服务器的分类:

  1. 主域名服务器(Primary Name Server)
  2. 主域名服务器是特定域所有信息的权威来源,主域名服务器是特定域所有信息的权威来源,它从域管理员构造本地文件中加载域信息,
  3. 该文件包含服务器具有管理权的部分域结果的最权威信息。主域名服务器需要配置一组完整的文件,即主机配置文件(named.conf),正向区域文件、反向区域文件、高速缓存初始化文件(named.ca),回送文件(named.local)
  4. 辅助DNS服务器(Second Name Server)
  5. 辅助DNS服务器用来从主域名服务器同步区域数据文件,作为磁盘文件保存在辅助域名服务器相对应的目录,辅助DNS服务器只需要配置主配置文件即可,不需要配置区域数据文件。
  6. 唯高速缓存域名服务器(Cache-only Server)
  7. 唯高速缓存域名服务器不包含域名数据库文件,它每次将从域名服务器得到的查询结果返回给客户端,并在本地将以缓存,供下次查询使用。

 DNS层次结构中资源记录的基本格式:

  1.     [name] [ttl] [class] type [rdata]
  2. [name(名字)]:
  3. name字段表示该记录所描述的实体(通常是主机或者一个域)。如果几个连续的记录涉及同一个实体的话,那么则第一条之后可以省略,利用@特殊
  4. 字符来代替这个name字段。
  5. [ttl]字段
  6. TTL(time to live (存活时间)),默认字段以秒为单位指定时间长度,在指定的时间内,数据项可被缓存并且仍被认为是有效的。TTL必须位于该区域数据文件的第一行,来进行标识
  7. class:class指定网络类型:默认类型为IN
  8. IN(指Internet)、HS(Hesiod:本地使用的目录服务)、CH(供域名服务器内部用来标示自己)
  9. type类型:
  10. A(Address):记录FQDN-IP转换
  11. MX(Mail eXchanger):记录邮件交换记录
  12. CNAME(Canonical NAME):记录别名,允许将多个名字映射到一个主机,通常CNAME主要用于WEB和邮件服务器。
  13. SOA:(Start Of Authority):一个授权区的开始。每个配置文件必须包含SOA记录,以标志服务器所管理的起始处。
  14. PTR(domain name PonitTeR):记录IP-FQDN
  15. HINFO(Host INFOrmation):记录一组描述主机的信息文件组成,例如:一些硬件名称及操作系统名称等信息。
  16. rdata:
  17. A:记录主机IP地址
  18. HINFO:记录Hardware和OS相关记录
  19. MX:记录提供收发电子邮件相关信息,一般包含两个部分(preference-value)

BIND常用到的资源记录语法

  1. 1、SOA资源记录
  2. $TTL 86400
  3. 区域名称(Name)  记录类型(type)  SOA   主域名服务器(FQDN)   管理员邮箱地址(mail)  (
  4. serial     ##number 序列号,每次更改配置值是都要在原来的基础上加上1,表示以更新。
  5. refresh    ##刷新时间(间隔)
  6. retry      ##重试时间(间隔)
  7. expire     ##过期时间(间隔)
  8. na ttl )   ##否定答案缓存TTL值
  9. 时间单位:M(分钟)、H(小时)、D(天)、W(周),默认单位是秒
  1. 好了,对DNS工作原理有所了解,那么就来创建个DNS服务器吧!!!
  2. 实验环境:
    OS:RedHat 5.8
    Software:bind97   bind97-utils bind97-libs
    master server(172.16.88.1)
    Domain Name:example.com
    www主机地址:172.16.88.3/172.16.88.4  ##提供http服务
    mail服务器:172.16.88.5   ##提供邮件的收发
    www主机创建别名 sandy
    slave server (172.16.88.2)   ##实现负载均衡
  3. 第一步:使用YUM安装DNS所使用的软件包(BIND),这里使用的是bind97
  4. 第二步:自己创建配置文件(/etc/named.conf)
  5. 第三步:创建区域数据文件(/var/named)
  6. 第四步:使用相关命令(named-checkconf、named-checkzone)测试配置文件及区域文件是否存在语法错误
  7. 第五步:启动named服务(service named start 、/etc/rc.d/init.d/named start)
  8. 第六步:使用命令更改系统启动时自动在启动named服务(chkconfig named on)默认2345级别(可以根据自己的需求设定启动级别)
  9. 第七步:更改iptables和selinux的设置
  10. 第八步:分别使用(dig/nslookup)在Linux/Windows主机进行查询DNS相关资源记录
  11. 第九步:设置递归选项
  12. (1),实现不给任何主机递归,但可以给本地递归
  13. (2),实现只给172.16.0.0/16网段递归,其他不递归。
  14. 第十步:设置区域传送,并创建辅助DNS服务器并实现从主DNS服务同步区域数据文件并查看日志文件(/var/log/message)
  15. (1)、先创建一个辅助DNS
  16. (2)、然后再实现从主DNS服务器完全同步区域数据文件,查看日志文件及从服务器是否完成同步
  17. (3)、然后再主DNS服务器上新增一条资源记录并查看日志文件,然后到辅助DNS服务上查看日志是否 完成增量区域数据同步
  18. 第十一步:编译安装dnstop工具,查看DNS工作状态

第一步:配置YUM源(可以参考笔者的关于YUM和RPM的介绍来进一步了解YUM和RPM日常工作中的使用)

  1. [root@Gdy ~]# yum list all | grep 'bind'
  2. [root@Gdy ~]# rpm -e bind-libs bind-utils          ##这里采用的是bind97版本,所以把系统默认安装的bind-libs、bind-utils卸载
  3. [root@Gdy ~]# yum install bind97 bind97-utils      ##bind97(服务器所使用的软件包)  bind97-utils(客户端工具)

第二步:创建DNS的主配置文件(/etc/named.conf)

  1. [root@Gdy ~]# mv /etc/named.conf /etc/named.conf.bak
  2. [root@Gdy ~]# vim /etc/named.conf
  3. 编辑主配置文件,添加如下内容(named.conf里面没有任何内容)
  4. options {
  5. directory "/var/named" ;              ##指明区域文件保存的位置
  6. };
  7. zone "." IN                                   ##定义根区域文件名称
  8. type hint;
  9. file "named.ca";                      ##默认存放在/var/named/named.ca
  10. };
  11. zone "localhost" IN {
  12. type master;
  13. file "named.localhost";
  14. };
  15. zone "0.0.127.in-addr.arpa" IN {
  16. type master;
  17. file "named.loopback";
  18. };
  19. zone "example.com" IN {                       ##定义example.com正向区域配置文件
  20. type master;                          ##类型为master(主DNS)
  21. file "example.com.zone";              ##example.com域正向区域配置文件存放名称(/var/named/example.com.zone)
  22. };
  23. zone "88.16.172.in-addr.arpa" IN {            ##定义example.com域反向区域配置文件
  24. type master;                          ##类型为master(主DNS)
  25. file "172.16.88.zone";                ##example.com域反向区域配置文件存放名称(/var/named/172.16.88.zone)
  26. };

注:修改/etc/named.conf的权限为(640)及属主属组(root:named)

  1. [root@Gdy ~]# chown root:named /etc/named.conf      ##将主配置文件的属主和属组改为root和named
  2. [root@Gdy ~]# chown 640 /etc/named.conf             ##将named.conf的权限更改为640,只有管理员具有读写的权限,组有读的权限。
  3. [root@Gdy ~]# ll /etc/named.conf
  4. -rw-r--r-- 1 640 named 374 Apr  2 15:41 /etc/named.conf
  5. [root@Gdy ~]#

第三步:创建区域配置文件(example.com.zone)

  1. [root@Gdy ~]# cd /var/named
  2. [root@Gdy named]# vim example.com.zone
  3. 添加如下内容:
  4. $TTL 86400
  5. @       IN      SOA     ns1.example.com.        admin.example.com. (
  6. 2013040201       ##序列号(每次更新时都加上1,便于从服务器更新)
  7. 1H               ##都长时间主动发送请求更新区域数据文件
  8. 5M               ##如果更新失败,多长时间重试
  9. 7D               ##过期时间
  10. 3D )
  11. IN      NS      ns1.example.com.
  12. ns1     IN      A       172.16.88.1
  13. www     IN      A       172.16.88.3
  14. www     IN      A       172.16.88.4
  15. mail    IN      A       172.16.88.5
  16. ftp     IN      CNAME   sandy
  17. :wq
  18. 注:更改example.com.zone的权限及属主及属组(同上)
  19. [root@Gdy named]# chown root:named example.com.zone
  20. [root@Gdy named]# chmod 640 example.com.zone


<2>创建反向(PTR)区域配置文件

  1. [root@Gdy named]# vim 172.16.88.zone
  2. 添加如下内容:
  3. $TTL 86400
  4. @       IN      SOA     ns1.example.com.        admin.example.com. (
  5. 2013040201
  6. 1H
  7. 5M
  8. 7D
  9. 3D )
  10. IN      NS      ns1.example.com.
  11. 1       IN      PTR     ns1.example.com.
  12. 3       IN      PTR     www.example.com.
  13. 4       IN      PTR     www.example.com.
  14. 5       IN      PTR     mail.example.com.
  15. :wq
  16. 注:更改172.16.88.zone的权限及属主及属组(同上)
  17. [root@Gdy named]# chown root:named 172.16.88.zone
  18. [root@Gdy named]# chmod 640 172.16.88.zone

第四步:通过named-checkconf及named-checkzone检测配置文件及区域文件是否有语法错误


第五步:启动二进制进程named
[root@Gdy ~]# service named restart
  {start|restart|reload|status}
第六步:设置named进程在开机时自动在2345级别下运行并查看named在哪个端口上启动并监听[root@Gdy ~]# chkconfig named on
[root@Gdy ~]# netstat -ntupl   ##查看DNS启动端口

第七步:设置防火墙及SElinux

  1. [root@Gdy ~]# iptables -A FORWARD -i eth0 -p tcp --dport 53 -j ACCEPT
  2. [root@Gdy ~]# iptables -A FORWARD -i eth0 -p udp --doprt 53 -j ACCEPT
  3. 设置SELinux
  4. [root@Gdy ~]# getsebool -a | grep named
  5. named_disable_trans --> off
  6. named_write_master_zones --> off
  7. [root@Gdy ~]# getsebool
  8. [root@Gdy ~]# setsebool -P named_write_master_zones 1

第八步:使用nslookup和dig命令分别在Windows和Linux系统进行查询
<1>使用nslookup命令在Windows系统平台下测试DNS相关资源记录,测试如图(1)

<2>使用dig命令在Linux主机上进行DNS资源查询
注:这里我们将我们的DNS服务指向自己的IP地址(172.16.88.1),也可以不修改我们可以使用@在指定在哪个DNS上查询

第九步:设置递归参数

  1. (1)在配置文件,设置给不给任何主机递归,但给自己内网主机递归
  2. 实现过程:
  3. [root@Gdy ~]# vim /etc/named.conf
  4. 只要在options选项添加recursion no;即可
  5. options {
  6. directory "/var/named" ;
  7. recursion no;
  8. };
  9. [root@Gdy ~]# service named reload   ##重新读取配置文件
  10. 注:笔者虚拟机可以连入网络,因为我们的DNS只给不给任何主机递归,只负责解析自己所属的域
  11. 所以我们使用dig命令来测试:
  12. [root@Gdy ~]# dig +recurse  -t  A www.baidu.com @172.16.88.1
  13. 测试如图

(2)如果要给某个网段(172.16.0.0/26)提供递归的话,我们用allow-recursion { 172.16.0.0/16; };
注:修改完成后,千万别忘记使用# service named reload命令来执行重新读取配置文件内容
我们还可以使用上面的指令在测试,看是否可以提供解析
[root@Gdy ~]# dig +recurse -t A www.baidu.com  @172.16.88.1测试如图:

我用我的Windows主机来测试,看看能不能为192.168.0.0/24提供解析呢(答案:否定),测试如图

 
 第十步:设置区域传送,并创建辅助DNS服务器并实现从主DNS服务同步区域数据文件并查看日志文件(/var/log/message)

  1. (1)、首先我们要在主DNS服务器的正向区域文件添加辅助DNS的记录
  2. (2)、先创建一个辅助DNS
  3. (3)、然后再实现从主DNS服务器完全同步区域数据文件,查看日志文件及从服务器是否完成同步
  4. (4)、然后再主DNS服务器上新增一条资源记录并查看日志文件,然后到辅助DNS服务上查看日志是否完成增量区域数据同步
  5. (1)、这步是在主DNS(172.16.88.1)添加一条辅助DNS名称及A记录及设置只允许172.16.88.2同步传输区域数据文件
  6. [root@Gdy ~]# vim /var/named/example.com.zone
  7. 添加如下内容:
  8. options {
  9. directory "/var/named";
  10. allow-recurion { 172.16.0.0/16; };
  11. notify yes;     ##当有数据更新时,立即通知辅助DNS服务
  12. }
  13. IN  NS  ns2.example.com.
  14. ns2 IN  A  172.16.88.2
  15. :wq
  16. [root@Gdy ~]# vim /etc/named.conf
  17. 在example.com及88.16.172区域中添加如下内容:
  18. allow-transfer { 172.16.88.2; };      ##只允许172.16.88.2发送请求同步传送区域数据文件
  19. 注:辅助DNS服务器(172.16.88.2/16),所以下面的配置在辅助DNS上配置的。 

(2)、创建一个辅助DNS服务器(slaves:172.16.88.2):  ##只需要建立主配置文件,区域文件不需要创建,通过主服务器进行同步

  1. [root@Gdy-slaves ~]# yum list all | grep 'bind'
  2. [root@Gdy-slaves ~]# rpm -e bind-libs bind-utils             ##这里采用的是bind97版本,所以把系统默认安装的bind-libs、bind-utils卸载
  3. [root@Gdy-slaves ~]# yum install bind97 bind97-utils      ##bind97(服务器所使用的软件包、bind-libs、bind97-utils(客户端工具)
  4. [root@Gdy-slaves ~]# mv /etc/named.conf /etc/named.conf.bak
  5. [root@Gdy-slaves ~]# vim /etc/named.conf
  6. options {
  7. directory "/var/named" ;
  8. allow-recursion    { 172.16.0.0/16; };
  9. };
  10. zone "." IN  {
  11. type hint;
  12. file "named.ca";
  13. };
  14. zone "localhost" IN {
  15. type master;
  16. file "named.localhost";
  17. allow-transfer { none; };
  18. };
  19. zone "0.0.127.in-addr.arpa" IN {
  20. type master;
  21. file "named.loopback";
  22. allow-transfer { none; };    ##172.16.88.2是辅助DNS服务器,不需要给任何主机提供传送功能,故在这里使用allow-transfer { none; };
  23. };
  24. zone "example.com" IN {
  25. type slave;
  26. file "slaves/example.com.zone";
  27. masters { 172.16.88.1; };
  28. allow-transfer { none; };
  29. };
  30. zone "88.16.172.in-addr.arpa" IN {
  31. type slave;
  32. file "salves/172.16.88.zone";
  33. masters { 172.16.88.1; };
  34. allow-transfer { none; };
  35. };
  36. :wq    ##保存并退出

使用named-checkconf检查配置文件是否有语法错误并将属组改为named,权限为640
然后到主DNS(172.16.88.1)服务器上执行service named reload,并查看日志(tail /var/log/message)是否将区域数据文件传送到辅助DNS服务器

然后到主DNS(172.16.88.1)分别在正向解析文件和反向解析文件中添加一条新的记录如

  1. [root@Gdy ~]# vim /var/named/example.com.zone
  2. 添加一条新的记录如下,并将序列号加上1,表示数据已更新:
  3. hello IN  A 172.16.88.10
  4. :wq
  5. [root@Gdy ~]# vim /var/named/172.16.88.zone
  6. 10 IN  PTR  hello.example.com.
  7. :wq
  8. [root@Gdy ~]# service named reload
  9. [root@Gdy ~]# tail /var/log/message

然后再到辅助DNS(172.16.88.2)执行如下命令

  1. [root@Gdy-slaves~]# tail /var/log/message  ##查看是否同步增量区域数据文件查看是否存在主DNS服务器上添加的新记录
  2. [root@Gdy-slaves ~]# cat example.com.zone

第十一步:编译安装dnstop
我们在维护DNS服务器时,网络管理员希望知道哪些用户在使用DNS服务器,同时也希望统计DNS的状态,我们可以使用dnstop来完成查询
dnstop源代码可以到http://www.stearns.org/dnstop/下载(可以选择rpm格式,也可以选择tar.gz)
在编译安装前,我们要准备编译环境将开发工具及开发库安装及libpcap-devel的支持

  1. [root@Gdy ~]# yum groupinstall "Development Libraries" "Development Tools" -y
  2. [root@Gdy ~]# yum install  libpcap-devel -y
  3. [root@Gdy ~]# tar xf dnstop-20110502.tar.gz -C /usr/local  ##解压路径
  4. [root@Gdy ~]# cd /usr/local/dnstop-20110502
  5. [root@Gdy dnstop-20110502]#./configure        ##这里以默认属性安装
  6. [root@Gdy dnstop-20110502]#make
  7. [root@Gdy dnstop-20110502]#make install     ##完成安装

编译安装过程附图参考:

编译安装成功了,下面就运行下,看看有哪些计算在使用DNS服务器在查询?


转载于:https://blog.51cto.com/guodayong/1173678

互联网域名解析系统DNS的工作原理及相关服务配置相关推荐

  1. 王道考研 计算机网络20 应用层 客户端/服务器C/S模型 P2P模型 DHCP协议 域名解析系统DNS 文件传送协议FTP 万维网 超文本传输协议HTTP

    应用层概述 FTP:文件传输协议(File Transfer Protocol)是用于在网络上进行文件传输的一套标准协议. SMTP:是一种提供可靠且有效的电子邮件传输的协议. POP3 ,全名为&q ...

  2. DNS的工作原理及解析

    DNS的工作原理及解析 一.什么是DNS? DNS( Domain Name System)是"域名系统"的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP ...

  3. 计算机dns的工作原理,解析DNS工作原理

    DNS是互连网核心协议之一,不管是上网浏览,还是编程开发,都需要了解一点它的知识.本文就来学习DNS工作原理,希望您读完本文也对它有所了解. DNS(Domain Name System)是" ...

  4. 安全隔离与信息交换系统系统构架及工作原理

    系统构架及工作原理 我们知道计算机网络依据物理连接和逻辑连接来实现不同网络之间.不同主机之间.主机 与终端之间的信息交换与信息共享.绿盟安全隔离与信息交换系统既然隔离.阻断了网络的所 有连接,实际上就 ...

  5. 网络编程技术——Web系统构成与工作原理

    Web系统构成与工作原理 1.1 Web系统的发展历程 C/S结构:客户机和服务器结构 如QQ.迅雷.魔兽争霸等需要下载安装客户端软件的系统 B/S架构:不需要安装客户端软件,它运行在客户端的浏览器之 ...

  6. RFID系统的基本工作原理

    文章目录 1. RFID的定义 2. RFID与条码技术相比有哪些优势 3. RFID标签的分类 4. RFID系统的基本工作原理 4.1 RFID系统的组成 4.2 RFID标签的组成 4.3 RF ...

  7. 计算机时钟的工作原理,单片机的周期与系统时钟的工作原理

    我们先来理解几个比较重要的概念:时间周期.指令周期.机器周期,以及系统时钟的工作原理. 时钟周期: 时钟周期也叫振荡周期或晶振周期,即晶振的单位时间发出的脉冲数,一般有外部的振晶产生,比如12MHZ= ...

  8. 光伏电站的系统组成及工作原理

    光伏电站的规模基本可以分为三类,分别是小型站.中型站和大型站.小型站的安装容量低于1个MW,中型站的安装容量在1–30个MW,安装容量大于30MW的,都属于大型站. 1MW=1000KW,一座容量为1 ...

  9. OCR算法:车牌识别在停车系统中的工作原理

    车牌识别在停车场系统中的工作原理 1.车辆查看:可采用埋地线圈查看.红外查看.雷达查看技术.道闸视频查看等多种办法感知车辆的通过,并触发图像搜集抓拍. 2.图像搜集:通过高清摄像抓拍主机对通行车辆进行 ...

最新文章

  1. matlab画三维图
  2. 我的Java开发之路
  3. docker容器 eureka 集成_微服务:基于 Docker 的微服务架构之分布式企业级实践参考...
  4. ASP入门(十一)-Session小案例
  5. PHP (20140506)
  6. python后端开发工程师面试题
  7. ajax burp 乱码,burp suite中国乱码的解决方案
  8. centos下hadoop的安装
  9. Visual Studio Code 快捷键的设置
  10. Linux memcached
  11. 第4课 防卫导弹(第十章 动态规划--DP)
  12. 设计模式学习笔记——建造者(Builder)模式
  13. 为什么我们放弃了微服务?
  14. 面向对象(Python):学习笔记之继承
  15. Apache Flink 在 bilibili 的多元化探索与实践
  16. 双系统linux清除勒索病毒,wannacry勒索病毒修复软件
  17. 夏令营课程产品介绍PPT模板
  18. 自定义按钮实现video暂停和播放的方法
  19. 16、先天八卦与后天八卦各自有什么用途?
  20. php判断是否是全英文,php判断字符串是否全英文,纯中文,中英文组合的方法

热门文章

  1. 小学教师计算机应用培训通讯稿,暑期培训通讯稿
  2. linux mysql etc inid_Linux下mysql基本操作
  3. 如何去除360浏览器“网页走丢了”页面广告
  4. jfinal结合freemarker,页面使用$符获取属性值报错原因解决
  5. Context mContext = getApplicationContext();
  6. 加密SD卡的新型身份认证方案
  7. 中国创客面临无限挑战
  8. Linux目录结构及解释
  9. 灰度实战(三):Apollo配置中心(3)
  10. “培训班”出身的AI工程师,要得要不得?