第一章 简介

一、DNS

domain name server,用来将计算机名称或者域名解析成ip地址的服务协议。

用户在使用域名访问时会先通过DNS服务请求域名对应的ip地址,然后缓存下来,然后才通过ip地址进行通信。

最初域名解析是通过HOSTS文件来静态绑定的。

DNS缓存的时间期限是由服务器端决定的,然后客户端在时间到期后进行更新缓存信息。

二、DNS服务器角色类型:

缓存DNS服务器:只处理请求并递归查找,本身并不解析域名。可以直接安装caching-nameserver来完成,也可以手动设置,实质就是添加三个区域。

主DNS服务器:创建、管理域名信息,并解析域名。

辅助DNS服务器:用来更新同步主DNS服务器的记录。

转发器:通常适用场景是局域网内存在域和子域的情况,当用户请求的信息(父域名)发送到子域的DNS服务器上并无法解析的时候,子域DNS服务器会通过定义转发的方式将请求转发到指定的服务器上而不是根服务器上。

三、资源记录类型:

A(address)记录:主机名转换成ip地址的记录

AAAA:将主机名解析成ipv6地址的记录

NS(name server):说明域内有几个DNS服务器,可以有多个

SOA(start of authority recocrd):起始授权记录,记录域内的主dns服务器是谁,只能有一个用来表示“最高管理者”。

cname 别名记录

PTR (pointer)指针记录:将ip地址转换成主机名的记录。

mx(mail exchange):将主机名解析成邮件服务器地址的记录,通过优先级来控制多个邮件服务器的等级。

注意:可以多个主机名对应一个ip地址,也可以多个ip地址对应一个主机名。

1、一个FQDN对应多个ip实现负载均衡

2、多个FQDN对应一个ip,通常用于多个域名对应一个ip地址,网站用。

宏定义:

用于定义区域内所有记录的总特性,起到概括的作用

$TTL 600 用于定义所有记录的ttl值是600,下面的600即可省去。

$ORIGIN magedu.com. 用于定义主机名后缀,这样下面的主机名就可以省去magedu.com.直接写成dns1,dns2,mail的形式。

资源记录的格式

name  [ttl]  IN   资源记录类型  value

 www.baidu.com 600  IN   A  192.168.42.199

1、起始授权记录SOA

要求:指明域名的主DNS服务器,并在后面跟上邮箱地址。

Magedu.com. 600 IN SOA dns.magedu.com. admin.magedu.com. (

     12314121 ;(注释符)serial number:用于验证数据库的版本信息,序列号大,版本新
     1H    ;refresh time 表示更新时间,通知(notification):只通知给本区域内解析库文件中定义为NS记录的所有主机。
     5M    ;重试时间,SOA没有回应的情况下使用。
     7D    ;过期时间
     1D    ;否定的ttl,用于拒绝DNS服务器没有的记录的缓存时间。

  


2、NS记录

要求:首先指定一个域名,并在数值段写明DNS服务器的域名而不是ip地址,并紧随一条A记录。当然nds服务器可以有多个。

magedu.com. 600 IN  NS dns1.magedu.com.

magedu.com. 600 IN NS dns2.magedu.com.

dns1.magedu.com. 600 IN A 192.168.0.222

dns2.magedu.com. 60 IN A 192.168.0.223


3、MX记录

要求:只能出现在正向文件中,同样是指明一个域名,并在数值段中写明邮件服务器的主机名,并紧随一条A记录,可以设置优先级。

magedu.com. 600 IN MX 10 mail.magedu.com.

Mail.magedu.com. 600 IN A 192.68.0.224

四、DNS程序

bind: berkeley internet name domain 流行的,标准的dns服务软件。

端口:53

[[email protected] ~]#  yum install bind bind-libs bind-utils

已加载插件:fastestmirror

设置安装进程

Loading mirror speeds from cached hostfile

 * base: mirrors.tuna.tsinghua.edu.cn

 * extras: mirror.bit.edu.cn

 * updates: mirror.bit.edu.cn

包 32:bind-9.8.2-0.62.rc1.el6_9.2.x86_64 已安装并且是最新版本

包 32:bind-libs-9.8.2-0.62.rc1.el6_9.2.x86_64 已安装并且是最新版本

包 32:bind-utils-9.8.2-0.62.rc1.el6_9.2.x86_64 已安装并且是最新版本

无须任何处理


bind-chroot:主要功能是让BIND服务只运行在dns自己的目录下,保证系统的安全性。

DNS提供服务必须设置的三个区域:

根区域:配置文件为named.ca,如果/var/named/目录 下没有,可以通过dig -t NS . >/var/maned.ca的方法创建生成。

localhost正向区域

localhost反向区域

1、主配置文件

/etc/named.conf,默认是没有的可以通过安装caching-nameserver来生成一个配置文件,这里演示的是没有安装caching,手动编辑的情况。

定义区域、各区域的全局配置、定义视图、日志。每一个语句使用分号结尾,否则视为错误

属主是root

属组:named

2、区域配置文件:/var/named/*

样例:基本配置

named.conf

options {

        listen-on port 53 { 127.0.0.1; };

        directory       "/var/named”; //定义zone区域配置文件目录,此目录必须存在。

        recursion yes;

};


zone "." IN {

        type hint;

        file "named.ca”;

};

zone "localhost" IN {

        type master;

        file "localhost.zone";

};


zone "0.0.127.in-addr.arpa" IN{

        type master;

        file "named.local";

};


localhost.zone

[[email protected] /var/named]# vim localhost.zone


$TTL 600

@       IN      SOA     localhost.      admin.localhost. ( 这里需要说明的是@表示的是named.conf文件中zone的“localhost”,当然也可以使用localhost.来替代@,注意是带“.”的

                                        20170607001

                                        1H

                                        199M

                                        1W

                                        1D )

localhost.      IN      NS      localhost. 这里的localhost.如果和@相同,可以省略,我这里没有省略。

localhost.       IN      A       127.0.0.1

~                                                           

named.local

[[email protected] /var/named]# vim named.local


$TTL 600

@       IN      SOA     localhost.      admin.localhost. (

                                        20170607001

                                        1H

                                        199M

                                        1W

                                        1D )

localhost.      IN      NS      localhost.

1               IN      PTR     localhost.


测试配置文件

[[email protected] /var/named]# service named configtest

zone localhost/IN: loaded serial 2990737817

zone 0.0.127.in-addr.arpa/IN: loaded serial 2990737817

zone magedu.com/IN: loaded serial 2940452917

zone magedu.com/IN: loaded serial 2940452917


4、配置DNS服务器

1、关闭/etc/named.conf主配置文件的,//表示注释掉。

//      listen-on port 53 { 127.0.0.1; };

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

        directory       "/var/named";

        dump-file       "/var/named/data/cache_dump.db";

        statistics-file "/var/named/data/named_stats.txt";

        memstatistics-file "/var/named/data/named_mem_stats.txt";

//      allow-query     { localhost; };

此过程后启动服务service named start 会自动成为缓存DNS服务器,并且默认支持的用户数是1000个,

2、自定义zone区域

2.1、主配置文件中声明

可以将自定义区域放在/etc/named.rfc1912.zones中声明,然后在/var/named/中创建zone命名的区域文件比如inno.com.cn.zone。

zone "inno.com.cn" IN {

        type master;

        file "inno.com.cn.zone";

#       allow-transfer { 10.40.0.0; }; //只允许指定服务器传输zone信息。

};


                      

2.2、在默认目录下/var/named下创建编辑inno.com.cn.zone文件

[[email protected] /var/named]# vim inno.com.cn.zone 


$TTL 600

$ORIGIN inno.com.cn.

@               IN      SOA     dns.inno.com.cn.        admin.inno.com.cn.      (

                                                        20170607002

                                                        1H

                                                        10M

                                                        1W

                                                        1D )

                IN      NS      dns

                IN      MX 10   mail

dns             IN      A       10.40.0.227

mail            IN      A       10.40.0.225

www             IN      A       10.40.0.222

ftp             IN      A       10.40.0.222

pop             IN      CNAME   mail

www             IN      A       10.40.0.223

~                                                    

2.3、修改inno.com.cn.zone文件权限640,属组为named

2.4、检查错误

[[email protected] /var/named]# named-checkzone "inno.com.cn" /var/named/inno.com.cn.zone 

zone inno.com.cn/IN: loaded serial 2990737818

OK

[[email protected] /var/named]# named-checkconf /etc/named.conf 


2.5、重启加载配置文件

service named reload


3、转发器配置(/etc/named.conf)

转发器可以定义转发指定区域的请求到指定DNS服务器,也可以定义全局转发的情况。常见的转发类型有first、only,first表示当本机DNS服务器请求发送到指定的其他DNS服务器上并没有获得结果的情况下自己进行根解析,而only则是如果没有获得结果的话就放弃。


区域转发配置方法:(非options里)

zone "magedu.com.cn" IN {

        type forward;

        forwarders { 10.40.0.20; };

};


全局转发配置方法:

options {

#       listen-on port 53 { 127.0.0.1; };

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

        directory       "/var/named";

        forwarders      { 114.114.114.114; };

#       dump-file       "/var/named/data/cache_dump.db";

#       statistics-file "/var/named/data/named_stats.txt";

#      memstatistics-file "/var/named/data/named_mem_stats.txt";

#       allow-query     { localhost; };

        recursion yes;


#       dnssec-enable yes;

#       dnssec-validation yes;


        /* Path to ISC DLV key */

#       bindkeys-file "/etc/named.iscdlv.key";


#       managed-keys-directory "/var/named/dynamic";

};


3、多DNS服务器

3.1、如果有多台DNS服务器,必须为每个DNS服务器建立NS记录,否则其将无法接收通知;

3.2、从服务器通过定时更新数据的方式同步主服务器上的记录

3.3、主服务器对于自己更新的内容会立即推送(通知)到从服务器上。

3.4、主服务器挂掉,从服务器并不会升级为主服务器,而是在过期时间到达后同样挂掉(SOA的配置信息)

区域定义:

zone “区域名称”IN {

              type salve;

               file “salves/zone_name.zone”;

               masters{master_dns_ip;};

               allow-transfer{192.168.1.9;};  //只允许指定服务器传输zone信息。

};

注意事项:

1、master DNS需要设置从DNS的NS记录、A记录。

2、SLAVE DNS在zone内设置masters的ip地址。

3、创建zone里面指定的文件,要求目录为/var/named/slaves,配置文件中指定为 file “salves/zone_name.zone”;,此文件会在同步过程中自动生产,不要手动修改,修改需要修改master的配置文件。

DNS安全区域传输配置:

1、allow-transfer{}:限制允许指定传输的服务器

2、all-query{}:允许进行请求的客户端

3、allow-recursion{}:允许做递归查询的客户端。

以上1/2一般放在区域里,进行安全DNS设置。

bind访问控制列表:类似创建一个访问组,然后将string的名称给allow-transfer的{}里面去就可以了。

acl string {address_math};   //填写ip地址。

子域授权

要实现公司内网的用户主机可以通过主机名被互联网访问到,方法有两个

1、直接申请一个主机名,然后让服务器为你的主机名提供解析工作。

2、自己在服务提供商处注册申请一个域名,然后自己搭建DNS服务器,并将将需要外网访问的主机添加到dns服务器上,并在DNS服务器上与互联网的服务器提供商dns进行通讯联系。(需要静态ip地址)

具体方法:

注册地址:www.godaddy.com (开放、低价)

实现dns转发功能forwarding:

1、转发所有针对非非本机负责解析的区域请求。

options{};

2、只转发对特定区域的请求。

zone{ 

type forward;

forwarders{ ip; };

forward only|first

};

转发的前提:接受转发请求的服务器能够为请求者做递归查询。

设置方法:

forwarders{

ip;

};

        dnssec-enable no;         //默认是yes,是dns的一个安全验证机制,需要到根服务器上验证信息。

        dnssec-validation no;    //

        dnssec-lookaside no;    //

如果要只转发某一个区域的信息:

zone "baidu.com"{

        type forward;

        forward only;

        forwarders{

        8.8.8.8;};

};


子域授权:

域内划分出来的依附于上级域的域称为子域。

授权又称为委派。

授权方法:

1、父域上设置NS记录、A记录(授权)

例如:

dep1.inno.com    IN    NS    dns.dep1.inno.com

dns.dep1.inno.com    IN    A    192.168.42.99

如果有多台备份的dns子域服务器,如果要实现互联网访问功能,也需要在父域上进行授权。

forward only|first   //only ,如果指定服务器没有查询到内容,不再进行查询。first,如果指定服务器没有查询到,自己尝试查询根服务器。

在dns没有合法注册的情况下,子域查询父域的资源设备是不能查找到的,因为按照dns解析原理看,他会首先查找根服务器,而你的父域并没有在互联网上注册,所以没有相关信息,查找不到。

但是可以通过父域查找子域的内容,原因是:授权,在自己服务器上本身有关于子域的授权信息,所以可以找到子域的信息。(当然也包括dns 服务器查找自己管理的资源信息了)。

那么如何实现局域网内部不同域间的解析工作呢,当然还是要有转发了forwarding。

在子域内添加转发条件,区域转发,只转发父域的信息。

在子域的named.rfc1912.zones里添加转发的信息。

比如:

zone "it.inno.com"{

    type forward;

    forward only;

    forwarders{

    192.168.42.99;};

};



dig命令

-t:指定查看类型

A:表示查找域名记录

NS:查找DNS服务器记录

例如

查看www.baidu.com的ip地址

[[email protected] ~]# dig -t A www.baidu.com


; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -t A www.baidu.com

;; global options: +cmd

;; Got answer:

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

;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 5


;; QUESTION SECTION:

;www.baidu.com. IN A


;; ANSWER SECTION:

www.baidu.com. 600 IN CNAME www.a.shifen.com.

www.a.shifen.com. 600 IN A 119.75.217.109

www.a.shifen.com. 600 IN A 119.75.218.70


;; AUTHORITY SECTION:

a.shifen.com. 726 IN NS ns2.a.shifen.com.

a.shifen.com. 726 IN NS ns1.a.shifen.com.

a.shifen.com. 726 IN NS ns3.a.shifen.com.

a.shifen.com. 726 IN NS ns5.a.shifen.com.

a.shifen.com. 726 IN NS ns4.a.shifen.com.


;; ADDITIONAL SECTION:

ns1.a.shifen.com. 121 IN A 61.135.165.224

ns2.a.shifen.com. 574 IN A 180.149.133.241

ns3.a.shifen.com. 468 IN A 61.135.162.215

ns4.a.shifen.com. 17 IN A 115.239.210.176

ns5.a.shifen.com. 94 IN A 119.75.222.17


;; Query time: 2 msec

;; SERVER: 114.114.114.114#53(114.114.114.114)

;; WHEN: Tue Jun  6 21:11:42 2017

;; MSG SIZE  rcvd: 260


查看根DNS服务器

dig -t NS .

[[email protected] ~]# dig -t NS .


; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -t NS .

;; global options: +cmd

;; Got answer:

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

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


;; QUESTION SECTION:

;. IN NS


;; ANSWER SECTION:

. 49111 IN NS k.root-servers.net.

. 49111 IN NS g.root-servers.net.

. 49111 IN NS b.root-servers.net.

. 49111 IN NS m.root-servers.net.

. 49111 IN NS f.root-servers.net.

. 49111 IN NS c.root-servers.net.

. 49111 IN NS h.root-servers.net.

. 49111 IN NS e.root-servers.net.

. 49111 IN NS a.root-servers.net.

. 49111 IN NS d.root-servers.net.

. 49111 IN NS l.root-servers.net.

. 49111 IN NS i.root-servers.net.

. 49111 IN NS j.root-servers.net.


;; ADDITIONAL SECTION:

a.root-servers.net. 67332 IN A 198.41.0.4

a.root-servers.net. 68014 IN AAAA 2001:503:ba3e::2:30

b.root-servers.net. 69481 IN A 192.228.79.201

b.root-servers.net. 86395 IN AAAA 2001:500:200::b

c.root-servers.net. 62586 IN A 192.33.4.12

c.root-servers.net. 54579 IN AAAA 2001:500:2::c

d.root-servers.net. 80047 IN A 199.7.91.13

d.root-servers.net. 76234 IN AAAA 2001:500:2d::d

e.root-servers.net. 86390 IN A 192.203.230.10

e.root-servers.net. 49118 IN AAAA 2001:500:a8::e

f.root-servers.net. 71426 IN A 192.5.5.241

f.root-servers.net. 86387 IN AAAA 2001:500:2f::f

g.root-servers.net. 86388 IN A 192.112.36.4


;; Query time: 2 msec

;; SERVER: 114.114.114.114#53(114.114.114.114)

;; WHEN: Tue Jun  6 21:17:15 2017

;; MSG SIZE  rcvd: 508


查看www.baidu.com的DNS服务器

[[email protected] ~]# dig -t NS www.baidu.com


; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -t NS www.baidu.com

;; global options: +cmd

;; Got answer:

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

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


;; QUESTION SECTION:

;www.baidu.com. IN NS


;; ANSWER SECTION:

www.baidu.com. 1058 IN CNAME www.a.shifen.com.


;; AUTHORITY SECTION:

a.shifen.com. 365 IN SOA ns1.a.shifen.com. baidu_dns_master.baidu.com. 1706060041 5 5 86400 3600


;; Query time: 6 msec

;; SERVER: 114.114.114.114#53(114.114.114.114)

;; WHEN: Tue Jun  6 21:15:20 2017

;; MSG SIZE  rcvd: 115


-x:反向查找域名

dig -x 1.1.1.1

+trace:跟踪查找过程。

[root@localhost ~]# dig -t NS www.baidu.com +trace
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t NS www.baidu.com +trace
;; global options: +cmd
. 12884 IN NS d.root-servers.net.
. 12884 IN NS f.root-servers.net.
. 12884 IN NS j.root-servers.net.
. 12884 IN NS m.root-servers.net.
. 12884 IN NS e.root-servers.net.
. 12884 IN NS b.root-servers.net.
. 12884 IN NS l.root-servers.net.
. 12884 IN NS i.root-servers.net.
. 12884 IN NS c.root-servers.net.
. 12884 IN NS a.root-servers.net.
. 12884 IN NS h.root-servers.net.
. 12884 IN NS k.root-servers.net.
. 12884 IN NS g.root-servers.net.
;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 1074 ms

com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
;; Received 503 bytes from 193.0.14.129#53(193.0.14.129) in 1103 ms

baidu.com. 172800 IN NS dns.baidu.com.
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com.
;; Received 201 bytes from 192.52.178.30#53(192.52.178.30) in 1198 ms

www.baidu.com. 1200 IN CNAME www.a.shifen.com.
a.shifen.com. 1200 IN NS ns3.a.shifen.com.
a.shifen.com. 1200 IN NS ns5.a.shifen.com.
a.shifen.com. 1200 IN NS ns1.a.shifen.com.
a.shifen.com. 1200 IN NS ns2.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
;; Received 228 bytes from 61.135.165.235#53(61.135.165.235) in 30 ms

dig -t azxfr zone:验证完全区域传送。

RNDC详解

远程DNS服务器控制工具,默认只允许本地操作。



DNS日志

/etc/named.conf文件内。

options {

#       listen-on port 53 { 127.0.0.1; };

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

        directory       "/var/named";

        forwarders      { 114.114.114.114; };

        querylog        yes; //添加此参数并重新加载named即可

        recursion yes;


};


开启日志功能严重消耗系统性能,建议测试时排错使用,生产环境不要使用。

例题:

定义一个channel,要求使用file来记录日志,滚动数目为10,每个最大文件为10m,级别为dynamic,要求记录额外信息。定义一个类别,并记录查询日志信息到前面的channel中。
logging{
channel “quer_log”{
        file“/var/log/bind9/query.log"    versions 10 size 10m;
        severity dynamic;
        print-category yes;
        print-severity yes;
        print-time yes;
};
category queries{ query_log;}
};

记住要将日志文件的权限修改成named可以读写的权限。