简单理解DNS服务

2016-12-26 20:01:00 10346

DNS概述

DNS?Domain Name System,域名系统),域名和IP地址相互映射的一个分布式数据库,通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析。而DNS的主要作用,就是域名解析,将主机名解析成IP地址。DNS这种机制能够完成从域名(FQDN)到主机识别IP地址之间的?换,在DNS诞生之前,这个功能主要是通过本地的一个hosts文件来记录域名和IP的对应关系,但hosts文件只能作用于本机,不能同步更新至所有主机,且当hosts文件很庞大时难以管理,因此,一个分布式、分层次的主机名管理架构DNS便应用而生。

FQDN(Full Qualified Domain Name)亦即完整主机名,完整主机名由主机名与域名构成。DNS同根文件系统一样是一个倒置的树状结构,最顶层的叫做根服务器,主要负责顶级域名的管理,常见的顶级域名有.com.cn.net.org.edu.gov.mil等,顶级域名则负责管理其下面的二级域名,如baidu.com,qq.com等,二级域名服务器则负责对应的主机名称或其三级域名解析,依次类推,根服务器管理顶级域名,顶级域名管理二级域名,二级域名管理三级域名或直接解析主机名,如此便形成了一个倒置的树状结构。

由此可见,每一级只负责对应下级的域的管理,而全球共有13?根节点服务器,10台位于美国,其余3台分别在英国、瑞典和日本,在这13台根服务器当中有1台为主根服务器放置在美国,其余12台为辅根服务器,所有的根服务器均由美国政府授权的互联网域名与号码分配机构ICANN组织统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。

hosts

hsots: 只能作正向解析,优先级比DNS高,hosts文件一般用于测试,或者用于局域网里面,

在局域网里面,也可以用nis

解析类型

正向解析:FQDN --> IP,即把主机名解析为IP地址

 

反向解析: IP --> FQDN,即把IP地址解析为主机名

泛域名解析:避免用户写错名称时给出错?答案,可通过泛域名解析进行解析至某特定地址。

$GENERATE 1-254 HOST$   A   1.2.3.$

查询类型

递归查询:递归查询一般是客户机与服务器之间的查询,即客户机只发送一次请求,

其他的工作将由上层服务器去解决,最后一层一层地反馈结果到客户端。

 

迭代查询:迭代查询一般是DNS服务器与DNS服务器之间的查询,即最开始的DNS服务

器负责发起请求,其他涉及到的DNS服务器只负责响应即可,然后一直查找到目标DNS

服务器,并将结果返回给客户端。

zone: DNS数据库

DNS的解析过程当中涉及到DNS数据库,此数据库又分为正解与反解,正解即从主机名

IP,反解即从IP到主机名,无论正解还是反解,每个域名所对应的解析记录我们称

之为zone()

RR: 资源记录

RR(Resource Record), 这些记录的类型有:A, AAAA, PTR, SOA, NS, CNAME, MX

       

    SOAStart Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录   

    Ainternet Address,作用,FQDN --> IP   

    AAAA: FQDN --> IPv6   

    PTR: PoinTeRIP --> FQDN   

    NS: Name Server,专用于标明当前区域的DNS服务器   

    CNAMECanonical Name,别名记录   

    MX:Mail eXchanger,邮件交换器

主从DNS服务器

DNS也是一个网络服务,因此就有对应的端口号,其端口号为53号,通常DNS在查询时是以UDP/53来查询,而在主从同步时是以TCP/53来同步。为了克服网络中的单点故障问题,DNS服务器一般会有主DNS服务器与从DNS服务器。

DNS服务器:管理和维护所负责解析的域内解析库的服务器

DNS服务器:从主服务器或从服务器“?制”(区域传输)解析库副本

主从在同步时有两种机制:

push: 主服务器push给从服务器pull:从服务器pull主服务器

push: 推机制,主服务器有变,则主动推送给从服?器,瞬间完成。

pull: 拉机制,从服务器定期地同步主服务器,即刷新时间间隔。如果刷新时间失败,则在重试时间间隔再次同步。

一次完整的DNS查询

Client -->hosts文件-->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> --> 顶级域名DNS-->二级域名DNS

如下场景:

Client: liansir------>www.landui.com Liansir上网时会自动获取一个DNS地址,此DNS地址是liansir所在小区或电信提供一个DNS服务器,而此DNS上一般没有qq.com所对应的主机与IP的对应关系,即没有www主机所对应的IP,(存放www主机所对应IPDNS服务器称为权威服务器)

此时,liansir自动获取的DNS会去找根域,(每个DNS软件上面都有全球的根服务器的地址),根域会将自己子域.comIP地址给liansir自动获取的DNS, 于是此DNS又去请求.com,并说我要找www.landui.com,.com也是非权威服务器,于是将其子域qq.com的地址发送给liansir自动获取的DNS,从而liansir用户得到qq.com的地址,并成功访问www.landui.com

而当liansir访问过www.landui.com之后,其本地就会有缓存,故而在短期之内访问www.landui.com时并不会再去访问根域。同样地,那个电信DNS服务器也会保存相应的缓存,从而提高访问速度。

其实,这个电信DNS?务器就是一个缓存服务器。

问题:如果liansir本地有qq.com的子域的DNS, 其如何访问qq.com? 父域是知道子域的DNS地址的,但子域是不记录父域的DNS地址的。故而此种情况还是要经过根?进而查询的!

递归查询:客户端向第一个DNS服务器发送的请求,最后由此DNS服务器给客户端结果。“负责到底的一种行为” 迭代查询:根域与各DNS服务器之间的查询,“给你一个最好的结果但不是最终结果”。

DNS是一种机制,一种协议,实现这种机制的常用工具为bind, BekerleyInternatName Domain, ISC www.landui.com),目前为使用最广泛的DNS服务器软件。

DNS三步法

DNS的服务器软件除了bind之外,还有bind-chrootbind主目录禁锢程序,就是将bind程序禁锢在家目录当中,centos 6之后的系统默认禁锢在/var/named/目录下);

DNS的配置文件主要有:

/etc/named.conf, /etc/named.rfc1912.zones: DNS的主配置文件;

/var/named: 该目录为DNS数据库文件存放的目录,每一个域文件都存放在这里;

/etc/rc.d/init.d/named: DNS服务的服务脚本

 

一台物理服务器可同时为多个区域提供解析,并且该DNS服务器上必须要有根区域文件named.carndc(remote name domain controller)服务可为DNS提供辅助性的管理功能,该服务监听在主机TCP953号端口,默认与bind安装在同一主机上,且只能通过127.0.0.1来连接DNS服务的named进?。

安装bind并启动named服务

[root@centos6 ~]#yum -y install bind

blob.png

关闭防火墙并设置为开机不允许启动

[root@centos6 ~]#iptables -F

[root@centos6 ~]#chkconfig iptables off

[root@centos6 ~]#chkconfig --list iptables

iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off

[root@centos6 ~]#

 

CentOS 7为如下设置:

~]#systemctl is-enabled firewalld  #查看防火墙是否开启

~]#systemctl disable firewalld

启动named服务

[root@centos6 ~]#service named start

Starting named:                                            [  OK  ]

Centos 7相关命令:

[root@centos7-min ~]#systemctl enable named

[root@centos7-min ~]#systemctl disable named

 

[root@centos7-min ~]#systemctl start named

[root@centos7-min ~]#systemctl status named

创建域(zone)

首先编辑/etc/named.conf文件,本文以添加liansir99.com域为例。

在修改/etc/named.conf文件时,最好先备份:cp -p /etc/named.conf /etc/named.conf.bak

options {

        listen-on port 53 { 127.0.0.1; };

        listen-on-v6 port 53 { ::1; };

        directory       "/var/named";

        allow-query     { localhost; };

        recursion yes;

       

        dnssec-enable yes;

        dnssec-validation yes;

        logging {

        channel default_debug {

                file "data/named.run";

                severity dynamic;

        };};zone "." IN {

        type hint;

        file "named.ca";};include "/etc/named.rfc1912.zones";include "/etc/named.root.key";

blob.png

 

常见的修改选项:

listen-on port 53 { localhost; };    localhost:相当于一个变量,代表本机所有IP

allow-query  { localhost; }; 只允许本机查询

allow-query  { any; }; any表示任何主机,也可写成一个网段

 

注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上。

缓存名称服务器的配置:监听外部地址即可;

dnssec: 建议关闭dnssec,设为no

创建域zone数据库文件

区域定义:本机能够为哪些zone进行解析,就要定义哪些zone

zone "ZONE_NAME" IN {};

 

其中zone的格式为:

zone "ZONE_NAME" IN {type {master|slave|hint|forward};

file "ZONE_NAME.zone";

};

 

type:

zone的类型,主要类型有:

hint:根

master:主DNSslave: DNSforward: 专用于转发

 

创建zone:

[root@centos6 ~]#vim /etc/named.rfc1912.zones

zone "liansir99.com" IN {       

        type master;

        file "liansir99.com.zone";

};

"/etc/named.rfc1912.zones" 47L, 1005C written

 

创建zone的数据库文件:

[root@centos6 /var/named]#vim liansir99.com.zone

 

$TTL 86400

@  IN SOA ns1.liansir99.com. admin.liansir99.com. (                                       

                                                2016100401

                                                1H 

                                                5M 

                                                7D    

                                                1D)

@     NS  ns1.liansir99.com.

@     MX  10  mail.liansir99.com.

@     NS  slave.liansir99.com.

ns1   A   10.1.1.1

slave A   10.1.1.4

www   A   10.1.1.2

www   A   10.1.1.3

mail  A   10.1.1.5

ftp   A   10.1.1.4

web   CNAME  ftp

 

修改解析库文件的属主属组并重启DNS服务

[root@centos6 /var/named]#chown named.named liansir99.com.zone

[root@centos6 /var/named]#chmod 640 liansir99.com.zone

[root@centos6 /var/named]#service named restart

Stopping named: .                                          [  OK  ]

Starting named:                                            [  OK  ]

[root@centos6 /var/named]#

 

如果没有报错信息,则说明配置正常,若有相关报错,则查看系统日志/var/log/messages.

也可进行语法检测:

[root@centos6 ~]#named-checkconf

[root@centos6 /var/named]#named-checkzone "liansir99.com" ./liansir99.com.zone zone

liansir99.com/IN: loaded serial 2016100401

OK

[root@centos6 /var/named]#

测试

[root@centos6 ~]#rndc reload

server reload successful

[root@centos6 ~]#

[root@centos6 ~]#dig www.landui.com  @10.1.1.1

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> www.landui.com @10.1.1.1

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 27361;;

flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0;;

 

QUESTION SECTION:

;www.landui.com             IN      A

 

;; ANSWER SECTION:

www.landui.com      86400   IN      CNAME   websrv.liansir99.com.

 

;; AUTHORITY SECTION:

liansir99.com.          86400   IN      SOA     ns1.liansir99.com. admin.liansir99.com. 2016100401 3600 300 604800 86400

;; Query time: 1 msec

;; SERVER: 10.1.1.1#53(10.1.1.1)

;; WHEN: Wed Oct  5 17:16:20 2016

;; MSG SIZE  rcvd: 102

[root@centos6 ~]#

 

查看53端口是否正常开启:

blob.png

找一客户端,修改其/etc/resolv.conf文件,将nameserver指向主DNS10.1.1.1

blob.png

注:重启服务后失效,可在网卡配置文件里面修改

在客户端上ping

blob.png

Windows上添加dns条目:

blob.png

blob.png

OK,我们再在DNS服务端开启httpd功能:

[root@centos6 ~]#service httpd status

httpd (pid  6499) is running...

[root@centos6 ~]#cat /var/www/html/index.html welcome

liansir99.com [root@centos6 ~]#

在客户端上links:

blob.png

[root@rhel5.4 ~]#dig -t A www.landui.com @10.1.1.1; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -t A www.landui.com @10.1.1.1

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31319

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

 

;; QUESTION SECTION:

;www.landui.com             IN      A

 

;; ANSWER SECTION:

www.landui.com      86400   IN      A       10.1.1.3www.landui.com      86400   IN      A       10.1.1.2;; AUTHORITY SECTION:

liansir99.com.          86400   IN      NS      ns1.liansir99.com.

 

;; ADDITIONAL SECTION:

ns1.liansir99.com.      86400   IN      A       10.1.1.1

;; Query time: 12 msec

;; SERVER: 10.1.1.1#53(10.1.1.1)

;; WHEN: Tue Oct  4 21:45:11 2016

;; MSG SIZE  rcvd: 101

[root@rhel5.4 ~]#

可看出DNS是用了53号端口进行网络服务的,那此处其走的是TCP还是UDP呢?分别屏蔽TCPUDP53端口,然后dig

[root@centos6 ~]#iptables -A INPUT -p tcp --dport 53 -j REJECT

blob.png

[root@centos6 ~]#iptables -F

[root@centos6 ~]#iptables -A INPUT -p udp --dport 53 -j REJECT

blob.png

此由可知,DNS在一般情况下是用UDP进行查询的,谁叫人家UDP天生快人一步呢!至此,一个极简风格的DNS便配置完成了!步骤其实就不多,首先修改主配置文件/etc/named.con, 然后在主配置文件/etc/named.rfc1912.zones里面添加zone条目,最后在/var/named/目录下创建相关zone的解析库并重启name即可!

资源记录RR小结:

资源记录定义的格式:

语法:name  [TTL]   IN  rr_type     value

注意:

(1) TTL可从全局继承

(2) @可用于引用当前区域的名字

(3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式

响应

(4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进

行定义;此仅表示通过多个不同的名字可以找到同一个主机

[文章来源于网络]


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: