DNS 笔记

Ø DNS查询。工作流程如下图

       blob.png

客户端的DNS:8.8.8.8 /etc/hosts  14.215.177.38 www.baidu.com

客户端访问www.baidu.com 不用向DSN服务器发生查询,只需要查询本地的 /etc/hosts 文件即可

客户端访问www.sina.com.cn 先查询/etc/hosts 文件,由于此文件没有相关的记录,需要向IP地址为:8.8.8.8 这台主机(取名为DNS)发生查询请求,DNS没有 www.sina.com.cn 相关的A记录,会向root根域发生查询,而root根域也没有www.sina.com.cn 相关的A记录,但是有.cn 域相关的A记录,会将cn主机的IP 地址返回给DNS,让它向cn这台主机发起查询请求,cn也没有www.sina.com.cn 相关的记录,,但有.sina 域的A记录,返回sina.com.cn主机的IP地址,最后DNS主机将向sina.com.cn主机发送查询,这台主机有www.sina.com.cn 相关的A记录,将IP地址返回DNS主机。DNS主机将此记录进行缓存一段时间(当缓存过期之前客户端再次发起对www.sina.com.cn查询请求,DNS主机直接返回客户端)并将www.sina.com.cn对应的IP地址返回给客户端。

           使用下面的命令可以验证上图

[root@node2 ~]# dig +trace www.sina.com.cn

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> +trace www.sina.com.cn

;; global options: +cmd

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

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

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

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

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

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

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

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

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

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

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

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

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

';; Received 508 bytes from 192.168.91.2#53(192.168.91.2) in 7148 ms

#查找根服务器从a-m

cn.                     172800  IN      NS      a.dns.cn.

cn.                     172800  IN      NS      b.dns.cn.

cn.                     172800  IN      NS      d.dns.cn.

cn.                     172800  IN      NS      ns.cernet.net.

cn.                     172800  IN      NS      c.dns.cn.

cn.                     172800  IN      NS      e.dns.cn.

#查找cn. 域的服务器,只有6个

;; Received 296 bytes from 192.5.5.241#53(192.5.5.241) in 13400 ms

 

sina.com.cn.            86400   IN      NS      ns4.sina.com.cn.

sina.com.cn.            86400   IN      NS      ns2.sina.com.cn.

sina.com.cn.            86400   IN      NS      ns3.sina.com.cn.

sina.com.cn.            86400   IN      NS      ns1.sina.com.cn.

;; Received 169 bytes from 203.119.25.1#53(203.119.25.1) in 13134 ms

 

www.sina.com.cn.        3600    IN      CNAME   jupiter.sina.com.cn.

jupiter.sina.com.cn.    60      IN      CNAME   ara.sina.com.cn.

ara.sina.com.cn.        60      IN      A       121.14.1.190

ara.sina.com.cn.        60      IN      A       58.63.236.248

ara.sina.com.cn.        60      IN      A       121.14.1.189

sina.com.cn.            86400   IN      NS      ns2.sina.com.cn.

sina.com.cn.            86400   IN      NS      ns4.sina.com.cn.

sina.com.cn.            86400   IN      NS      ns1.sina.com.cn.

sina.com.cn.            86400   IN      NS      ns3.sina.com.cn.

;; Received 257 bytes from 121.14.1.22#53(121.14.1.22) in 6 ms

www.sina.com.cn 最终的结果为121.14.1.22。可以看到新浪有4个NS

验证了上述描述的过程

Ø  DNS 正解:从主机名到IP地址的解析过程

Ø  DNS 反解:从IP地址到主机名的解析过程

Ø  无论正解还是反解每个领域的记录就是一个区域(zone)。有一个正向解析文件和一个反向解析文件

Ø  正解域名需要符合INTERNIC 已经定义的gTLD以及ccTLD,而且没有人使用

Ø  正解文件通常有以下几种标志

SOA(Start of Authority)开始验证

NS(NameServer) 名称服务器的缩写

A(Address) 就是地址

Ø  一部简单的正解DNS服务器,一般最小包含两个zone,一个是hint(根域),一个是关于自己领域的正解zone。如果有主从还有Master和Slave这两种数据类型

Ø  能够设定反向解析的人一般只有ISP才有权限,除非你已经获得整个class C 以上等级的IP网段,ISP才能给你IP反解需求,否则需要向你的直属上层ISP申请

NS

SOA

PRT(PoinTeR)

Ø  一般情况下只有mail服务器才需要正反解成对需求。很多反解都是ISP实现

Ø  主从DNS可以起到冗余的作用,由于DNS查询是随机的,所以两部DNS服务器需要完全一样

Ø  Master DNS,需要管理员手动配置,Slave DNS 可以通过自动同步Master DNS的方式获得同Master DNS 完全一样的配置

Ø  主从同步的方式

Master主动告知:Master数据库的内容发生变化后,加大数据库序号,并重启DNS服务,那么Master会主动告知slave未更新的数据库,此时能够实现数据同步

由Slave主动提出同步请求:Slave会定期查看Master的数据库序列号,如果比自己大就表示数据库发生了更新,那么Slave就开始更新,如果序号不变,就表示数据库没有发生更新,不会更新

Ø  客户端设定:

/etc/hosts:本地host对应IP地址的文件

/etc/resolv.conf:ISP提供的DNS服务器的IP地址

nameserver 192.168.91.2 只有在192.168.91.2这部服务器出现问题才会使用下面的备用服务器

nameserver 8.8.8.8

这个文件默认使用DHCP自动获取DNS服务器的IP地址,如果想手动指定其他的IP地址,需要修改网卡配置文件

*  /etc/sysconfig/network-scripts/ifcfg-eth0

      PEERDNS=no #(新增这一行)

*  NM_CONTROLLED=no 是否使用NetworkManager服务管理。此服务与桥相冲突,建议关闭。如果不使用NetworkManager服务最好将此服务也停止,并关闭开机自动启动

*  然后重启网络

/etc/nsswitch.conf:此文件决定先使用那个文件的设定。即/etc/hosts还是/etc/resolv.conf。

vim /etc/nsswitch.conf

      hosts:      files dns 表示先使用file(即/etc/hosts)在使用dns(即/etc/resolv.conf)

客户端相关命令

host [-a] FQDN [server]

-a:代表列出该主机所有相关的信息,包括IP,TTL及排错信息,等同于dig命令。有些主机不支持-a操作,例如www.baidu.com就不支持-a

-l:若后面接的那个domain设定允许allow-transfer,则列出该domain所管理的所有主机名对应的数据。一般情况下都是不允许使用此命令的,只有DNS主机管理员可以使用该命令

server:可以省略,当想使用非/etc/resolv.conf 内的DNS主机,来进行DNS解析的时候使用该参数

nslookup FQDN|IP [server]

set type=any:列出所有的信息(正解方面的配置文件)。有些FQDN 不支持此项

set type=mx:列出与mx相关的信息

后面不跟任何内容,直接进入nslookup查询画面

> set type=mx。百度不支持type=any

> www.baidu.com

> exit

dig [options] FQDN [@server]

*  server:可以省略,当想使用非/etc/resolv.conf 内的DNS主机,来进行DNS解析的时候使用该参数

*  options

ü  +trace 从. 开始追踪一直到最终目标

ü  -t type:查询的数据主要有mx,ns,soa等类型

ü  -x: 查询反解信息

[root@node1 ~]# dig www.sina.com.cn

… 省略

jupiter.SINA.COM.CN.

jupiter.SINA.COM.CN.    5       IN      CNAME   ara.SINA.COM.CN.

ara.SINA.COM.CN.        5       IN      A       121.14.1.190

ara.SINA.COM.CN.        5       IN      A       58.63.236.248

              #  [domain]           [ttl]     IN  [资源类型]    [资源内容]

ara.SINA.COM.CN.        5       IN      A       121.14.1.189

;; Query time: 7 msec

;; SERVER: 192.168.91.2#53(192.168.91.2)

;; WHEN: Wed Aug  3 18:03:30 2016

;; MSG SIZE  rcvd: 121

ü  domain 尽量使用FQDN。后面有个小数点

ü  A IP地址

ü  IN 是固定的

ü  ttl:time to live 这条记录缓存多少秒钟,一般由特定的参数设定,所以正向解析文件中一般不设置

ü  RR:resource record 正解文件资源记录格式

[domain]    IN  [RR type]   [RR data]

RR type:A|AAAA|NS|SOA|MX|CNAME

RR date:IPV4|IPV6|FQDN(DNS服务器主机名或邮件服务器主机名)

whois [domain]

*  由于该命令显示的信息太详细,为了防止不被黑客所利用,有些信息可能不正确,或者直接拒绝使用该命令查询相关的域名。百度不支持此命令。新浪支持

[root@node1 ~]# whois sina.com.cn

[Querying whois.cnnic.cn]

[whois.cnnic.cn]

Domain Name: sina.com.cn

ROID: 20021209s10011s00082127-cn

Domain Status: clientDeleteProhibited

Domain Status: serverDeleteProhibited

Domain Status: clientUpdateProhibited

Domain Status: serverUpdateProhibited

Domain Status: clientTransferProhibited

Domain Status: serverTransferProhibited

Registrant ID: sinacomcn2

Registrant: 北京新浪互联信息服务有限公司

Registrant Contact Email: domainname@staff.sina.com.cn

Sponsoring Registrar: 北京新网数码信息技术有限公司

Name Server: ns1.sina.com.cn

Name Server: ns2.sina.com.cn

Name Server: ns3.sina.com.cn

Name Server: ns4.sina.com.cn

Registration Time: 1998-11-20 00:00:00

Expiration Time: 2019-12-04 09:32:35 #过期时间

DNSSEC: unsigned

 

Ø  DNS 软件:bind rpm –qa | grep bind

bind-libs ç bind及与之相关的指令所使用的函式库

bind ç bind主程序

bind-utils ç 客户端搜寻主机名的相关指令

bind-chroot ç 将bind程序固定在指定的目录下,不能离开此目录。当bind的程序有漏洞只对某一个目录有危害,而无法危害到整个系统。bind-chroot就是起这个作用的。centos 6.x 默认将bind锁在/var/named/chroot 目录中

Ø  bind 主配置文件/etc/named.conf:设定主机名、zone file 存放的路径,权限等

Ø  zone file:正反解配置文件,记录主机名与IP地址的对应关系等

Ø  centos 6 中默认目录:

/etc/named.conf 主配置文件

/etc/sysconfig/named 程序的配置文件,设置是否启动chroot及其他额外的参数

ROOTDIR=/var/named/chroot 安装好bind-chroot后此配置文件自动配置这样。此配置文件默认只有这一行生效

启用chroot后bind 相关的数据文件真实的目录都在/var/named/chroot。在centos 6.x 已经将所需要使用到的目录,通过mount –bind /var/named /var/named/chroot/var/named 进行目录绑定。参考/etc/init.d/named 内容。所以无需切换至/var/named/chroot这个目录,使用正规目录即可

*  /var/named/chroot/etc/named.conf

*  /var/named/chroot/var/named/zone_file*

*  /var/named/chroot/var/run/named/named.pid

/var/named 数据库档案默认存放的目录

/var/run/named named程序运行时对应的PID文件存放的路径

Ø  DNS 服务器类型

cache-only DNS

forwarding DNS

master/slave

n    subdomain

Ø  cache-only 没有正反解数据库文件,只有. 这个zone file。没有公开的缓存DNS服务器,自身没有主机名和IP地址的对应关系,完全由对外查询来提供它的数据源。

一般情况和forwarding DNS 结合使用。

当公司对互联网进行严格的控制,关闭了tcp/udp 53端口,可以在防火墙主机上架设DNS服务,来完成公司上互联网的需求,这样主要是为了安全需要

Ø  forwarding 连. zone file 也没有,只是指定了一个上层的DNS。任何DNS的查询都交由上层DNS进行相关的解析工作

Ø  forwarding 和 cache-only 结合使用的实例

vim /etc/named.conf  注意不要动/var/named/chroot目录下的内容

 

options {

        listen-on port 53 { any; };

                   #DNS 默认监听的端口。默认是监听在localhost上,只有本机才能对#此DNS服务进行查询。any 表示所有都能对此DNS服务进行查询

        directory       "/var/named"; #zone file 存放的目录

        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";

        #dump-file statistics-file memstatistics-file 一些named程序

    #的统计信息

        allow-query     { any; };

    #设定那些客户端能够对此DNS服务器进行查询请求

        recursion yes;#将自己视为客户端的一种查询模式

        forward only;#即使有.zone file 也不向根发起查询而是想上层DNS

    #服务器发起查询。cache-only 的常见配置

        forwarders { 202.96.134.133; };

    #设置上层DNS服务器。注意不要少了分号,花括号前后有空格

};

bind 程序监听的端口

[root@node1 ~]# ss -tnlup | grep named

udp    UNCONN     0      0          192.168.91.67:53                    *:*      users:(("named",3006,513))

udp    UNCONN     0      0              127.0.0.1:53                    *:*      users:(("named",3006,512))

udp    UNCONN     0      0                    ::1:53                   :::*      users:(("named",3006,514))

tcp    LISTEN     0      3                    ::1:53                   :::*      users:(("named",3006,22))

tcp    LISTEN     0      3          192.168.91.67:53                    *:*      users:(("named",3006,21))

tcp    LISTEN     0      3              127.0.0.1:53                    *:*      users:(("named",3006,20))

tcp    LISTEN     0      128                  ::1:953                  :::*      users:(("named",3006,24))

tcp    LISTEN     0      128            127.0.0.1:953                   *:*      users:(("named",3006,23))

UDP/TCP 53

127.0.0.1:953:远程名称解析服务控制功能(remote name daemon control,rndc) 预设只有本机可以针对rndc来控制

日志/var/log/message

[root@node1 ~]# cat /var/log/messages | grep named | grep start

Aug  3 14:39:19 node1 named[2617]: starting BIND 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 -u named -t /var/named/chroot

表示启用chroot,并指定其目录

测试forwarding DNS

[root@node1 ~]# dig www.baidu.com @127.0.0.1

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> www.baidu.com @127.0.0.1

;; global options: +cmd

;; Got answer:

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

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

 

;; QUESTION SECTION:

;www.baidu.com.                 IN      A

 

;; ANSWER SECTION:

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

www.a.shifen.com.       445     IN      A       14.215.177.37

www.a.shifen.com.       445     IN      A       14.215.177.38

 

;; Query time: 1 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: Wed Aug  3 16:39:04 2016

;; MSG SIZE  rcvd: 90

性能由于forwarding DNS有缓存功能,所以对于下层的DNS服务器查询是很快的,整体的性能要看上层DNS服务器的性能,如果上层DNS服务器的性能好,带宽高可以增加整体的性能

Ø SOA 7个参数的意义按顺序

Master DNS 服务器主机名

管理员Email

序号:代表数据库档案的新旧,序号越大代表越新,slave凭序列号判断master是否发生了更新。一般使用日期2016080311 表示2016/8/3 第11次更新。此序号不能大于2^32即必须小于4294967296

更新频率(Refresh):定义slave多久向master请求更新一次

失败重新尝试的时间(Retry):slave联机master失败,等多久再此联机master。

失效时间(Expire):slave 在这段时间内无法联机master,将不再继续尝试联机master,并删除这份下载的zone file信息

缓存时间(Minumum TTL):如果zone file中每笔RR记录都没有写到TTL 缓存时间,那么就以这个SOA的设定值为主、

Refresh >= Retry*2

     Refresh + Retry < Expire

     Expire >= Rrtry * 10

     Expire >= 7Days

Ø  view 视图功能,针对不同的客户端IP地址,取得自己的zone。例如:内/外网都能够访问www服务器。内网访问www服务器解析的地址为内网的地址,外网访问www服务器的地址解析的是公网的地址

内网:192.168.91.0/24

外网:10.0.1.0/24 (模拟外网,实际环境中应该是公网IP地址)

cat /etc/named.conf

options {

        listen-on port 53 { any; };

        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     { any; };

        recursion yes;

        allow-transfer { none; };

        /* Path to ISC DLV key */

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

 

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

};

 

logging {

        channel default_debug {

                file "data/named.run";

                severity dynamic;

        };

};

 

acl intranet { 192.168.91.0/24; };

acl internet { 10.0.1.0/24; };

view "lan" {

        match-clients { "intranet"; };

        zone "." IN {

                type hint;

                file "named.ca";

        };

        zone "centos6.cn" IN {

                type master;

                file "named.centos.cn";

                allow-transfer { 192.168.91.68; };

        };

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

                type master;

                file "named.192.168.91";

                allow-transfer { 192.168.91.68; };

        };

};

view "wlan" {

        match-clients { "internet"; };

        zone "." IN {

                type hint;

                file "named.ca";

        };

        zone "centos6.cn" IN {

                type master;

                file "named.centos.cn.intel";

        };#外网不需要反向解析文件,由ISP提供

};

cat /var/named/named.centos.cn

$TTL 86400

@       IN      SOA     master.centos6.cn. test.www.centos6.cn. (

        2016080507

        3H

        15M

        1W

        1D

)

@       IN      NS      master.centos6.cn.

@       IN      NS      slave.centos6.cn.

master.centos6.cn.      IN      A       192.168.91.67

slave.centos6.cn.       IN      A       192.168.91.68

@                       IN      MX 10   mail.centos6.cn.

www.centos6.cn.         IN      A       192.168.91.67

node1.centos6.cn.       IN      A       192.168.91.67

node2.centos6.cn.       IN      A       192.168.91.68

node3.centos6.cn.       IN      A       192.168.91.69

node4.centos6.cn.       IN      A       192.168.91.70

cat /var/named/named.192.168.91

$TTL    86400

@       IN      SOA     master.centos6.cn. www.centos6.cn. (

        2016080504

        3H

        15M

        1W

        1D

)

@       IN      NS      master.centos6.cn.

@       IN      NS      slave.centos6.cn.

67      IN      PTR     master.centos6.cn.

68      IN      PTR     slave.centos6.cn.

67      IN      PTR     www.centos6.cn.

67      IN      PTR     node1.centos6.cn.

68      IN      PTR     node2.centos6.cn.

69      IN      PTR     node3.centos6.cn.

70      IN      PTR     node4.centos6.cn.

cat /var/named/named.centos.cn.intel

$TTL 86400

@       IN      SOA     master.centos6.cn. test.www.centos6.cn. (

        2016080507

        3H

        15M

        1W

        1D

)

@       IN      NS      master.centos6.cn.

master.centos6.cn.      IN      A       10.0.1.22

@                       IN      MX 10   mail.centos6.cn.

www.centos6.cn.         IN      A       10.0.1.22

测试

[root@node1 named]# dig -t A www.centos6.cn @192.168.91.67

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A www.centos6.cn @192.168.91.67

;; global options: +cmd

;; Got answer:

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

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

 

;; QUESTION SECTION:

;www.centos6.cn.                        IN      A

 

;; ANSWER SECTION:

www.centos6.cn.         86400   IN      A       192.168.91.67

 

;; AUTHORITY SECTION:

centos6.cn.             86400   IN      NS      master.centos6.cn.

centos6.cn.             86400   IN      NS      slave.centos6.cn.

 

;; ADDITIONAL SECTION:

master.centos6.cn.      86400   IN      A       192.168.91.67

slave.centos6.cn.       86400   IN      A       192.168.91.68

 

;; Query time: 1 msec

;; SERVER: 192.168.91.67#53(192.168.91.67)

;; WHEN: Wed Aug 10 16:55:41 2016

;; MSG SIZE  rcvd: 121

 

[root@node1 named]# dig -t A www.centos6.cn @10.0.1.22        

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A www.centos6.cn @10.0.1.22

;; global options: +cmd

;; Got answer:

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

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

 

;; QUESTION SECTION:

;www.centos6.cn.                        IN      A

 

;; ANSWER SECTION:

www.centos6.cn.         86400   IN      A       10.0.1.22

 

;; AUTHORITY SECTION:

centos6.cn.             86400   IN      NS      master.centos6.cn.

 

;; ADDITIONAL SECTION:

master.centos6.cn.      86400   IN      A       10.0.1.22

 

;; Query time: 0 msec

;; SERVER: 10.0.1.22#53(10.0.1.22)

;; WHEN: Wed Aug 10 16:55:54 2016

;; MSG SIZE  rcvd: 85

#达到了预期的效果

原创文章,作者:jslijb,如若转载,请注明出处:http://www.178linux.com/32758