精解Linux  RHEL 6.x  DNS 服务器  

=============================================

DNS的原理

、缓存服务器

DNS的测试工具

、DNS主从服务器

、DNS的转发

、DNS的子域授权

、DNS的acl规则和view视图

、DNS的日志系统的使用

=================================================

DNS的原理

DNS (Domain Name Server) 域名解析服务,他可以完成域名与IP地址的互换,可以通过IP地址解析到域名,也可以通过域名解析到IP地址,IP地址是平面结构,且不容易记住,DNS是层次化的结构,便于记忆。

DNS的层次化

 1)根域:根域位于层次结构的最顶部并用小句点“.”表示全球有十三个根服务器,一个主根服务器,十二个辅助根服务器。

2)顶级域:顶级域是按照组织类别或地理位置来划分的

.gov 政府组织
.com 商业组织
.net 网络中心
.org 非营利性组织
.edu 教育部门
.cn  .uk  .us 国家国别的代码,cn表示中国,uk表示英国,us表示美国

3)二级域:由国际域名组织为互联网中的个人或部门指定和登记的二级域

(如51cto.com,sohu.com)


DNS的查询方式

         迭代查询:本地域名服务器向根域名服务器的查询通常是采用迭代查询。当根域名服   务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地 域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询

         递归查询:主机向本地域名服务器的查询一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的份,向其他根域名服务器继续发出查询请求报文会给客户端一个准确的返回结果,无论是成功与否。

精解Linux RHEL 6.x DNS 服务器

步骤1:当客户端在IE输入www.baidu.com,客户端去请求本地域服务器解析,此过程为发  

           起递归查询。

步骤2:本地服务器接到查询请求后,查看区域文件,发现不是自己管制的区域,则发

           送给根域进行解析。此过程为迭代查询。

步骤3:根域服务接收到 请求后,查看区域文件,回复请求的主机,去找.com域服务器。此

           过程是迭代查询。

步骤4:本地域服务器,接收到根域服务器的回复后,去找.com域服务器,请求解析。此过

           程序是迭代查询。

步骤5:.com服务器接收到请求之后,查看自己的区域文件,回复主机去找

           baidu.com域服务,此过程是迭代查询。

步骤6:本地域服务器,接收到.com域服务器的回复后,去找baidu.com域服务器,

            请求解析,此过程是迭代查询。

步骤7:baidu.com域服务器接收到请求后,查看自己的区域文件,发现是自己所管制

           的区域,然后查看区域解析文件,把对应的IP地址发送给请求的服务器,此过

            程是迭代查询。

步骤8:本地服务器接收到baidu.com域服务器的回复,把FQDN对应IP地址传送给客

           户端,此过程为递归查询。


   DNS的解析类型

       FQDN:(Fully Qualified Domain Name)完全合格域名,由主机名+域名组成

               (如www.51cto.com)

       正向解决:FQDN----->IP,把完全合格域名,解析为IP地址

       方向解析:IP-------->FQDN,把IP解析为完全合格域名。


Linux服务器实现DNS服务器的软件有bind、powerdns,此博客主要讲bind

   bind的相关软件包

 bind:提供域名服务的主程序和相关文件

   bind-libs:提供域名服务器所依赖的库文件  

   bind-utils:提供了对DNS服务的测试工具程序

   rpm   -qc  包名     查看包安装生成的文件清单

   rpm   -qi   包名     查看包的摘要信息



、缓存服务器

1)安装软件包

        yum -y install  bind

  2)bind配置文件

     安装完后,会用到四个配置文件,四个配置文件的关系

精解Linux RHEL 6.x DNS 服务器

 3)DNS   bind   named的关系  

           DNS是一个服务,是提供域名解析的服务;

           bind是实现这个服务的软件包;

           named是dns这个服务的守护进程

  4)配置缓存服务器的思路

把客户端发送的请求,转发给能解析到的服务器

在主配置文件里面修改 (/etc/named.conf)

精解Linux RHEL 6.x DNS 服务器

开启服务, service  named  start(/etc/rc.d/init.d/named start)

第一次需要开启服务,之后只需要加载配置文件即可

service named reload (rndc reload)

named-checkconf


DNS的测试工具

[[email protected] data]# rpm -ql bind-utils

/usr/bin/dig             #dig测试命令工具

/usr/bin/host            #host测试命令工具

/usr/bin/nslookup        #nslookup测试命令工具

/usr/bin/nsupdate

/usr/share/man/man1/dig.1.gz

/usr/share/man/man1/host.1.gz

/usr/share/man/man1/nslookup.1.gz

/usr/share/man/man1/nsupdate.1.gz

命令的使用用法:

    dig [option] 资源记录类型名称    [@server-ip]  

  option:

[ -t type] 指定类型

 [-x addr]  指定IP

资源记录类型名称:

       NS :对应DNS服务器的FQDN

       A 代表"主机名称"与"IP"地址的对应关系, 作用是把名称转换成IP地址

       PTR:代表"IP地址"与"主机名"的对应关系,作用刚好与A记录相反

     [@server-ip]:

                 不写IP,默认是本地服务器的IP

                 用@server-ip,指定服务器的IP

    eg:dig -t A www.51cto.com @172.16.0.1


host [option] 资源记录类型名称   [server-ip]

eg:host -t A www.51cto.com 172.16.0.1


nslookup   FQDN   [server-ip]

   eg: nslookup www.51cto.com 172.16.0.1


精解Linux RHEL 6.x DNS 服务器

精解Linux RHEL 6.x DNS 服务器


精解Linux RHEL 6.x DNS 服务器


、DNS主从服务器

精解Linux RHEL 6.x DNS 服务器

Master的配置

精解Linux RHEL 6.x DNS 服务器

精解Linux RHEL 6.x DNS 服务器

精解Linux RHEL 6.x DNS 服务器

精解Linux RHEL 6.x DNS 服务器


精解Linux RHEL 6.x DNS 服务器

配置完成后,检查语法是否错误,然后加载配置文件即可。

精解Linux RHEL 6.x DNS 服务器

Slave的配置

精解Linux RHEL 6.x DNS 服务器


精解Linux RHEL 6.x DNS 服务器

[[email protected] ~]# cd /var/named/slaves/

[[email protected] slaves]# ls

jie.com.zone

[[email protected] slaves]#

小结:在实际工作中,可以把Master作为正向区域的主,反向作为slave的从。


、DNS的转发


精解Linux RHEL 6.x DNS 服务器

###jie.com服务器的主配置文件###########
options {
//  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; };
    recursion yes;
        forward   only;      //只允许转发
        forwarders { 172.16.122.4; };  //转发到ltt.com服务上
//  dnssec-enable yes;        //关于安全的文件都注释掉
//  dnssec-validation yes;
//  dnssec-lookaside auto;
    /* 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;
        };
};
zone "." IN {
    type hint;
    file "named.ca";
};
include "/etc/named.rfc1912.zones";
//include "/etc/named.root.key";
######区域文件和区域解析文件还是之前的文件内容##############



##########ltt.com服务器的主配置文件######################
options {
//  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; };
//  recursion yes;
     allow-recursion { 172.16.22.2; };   //只为jie.com服务器进行递归查询
//  dnssec-enable yes;
//  dnssec-validation yes;
//  dnssec-lookaside auto;
    /* 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;
        };
};
zone "." IN {
    type hint;
    file "named.ca";
};
include "/etc/named.rfc1912.zones";
//include "/etc/named.root.key";
##############ltt.com服务器的区域配置文件的部门内容###################
zone "ltt.com" IN {
      type master;
      file "ltt.com.zone";
};
#################ltt.com服务器的区域解析文件的内容###################
cat /var/named/ltt.com.zone
$TTL 1D
@   IN SOA  dns.ltt.com. admin.ltt.com. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    IN NS   dns.ltt.com.
dns     IN A  172.16.122.4
www     IN A  172.16.122.40
www     IN A  172.16.122.140
www     IN A  172.16.122.240
ftp     IN A  172.16.122.200
mail    IN A  172.16.122.250
###注意文件的属组和权限######################3

[[email protected] ~]# grep -v "^#"  /etc/resolv.conf  | grep -v "^$"

search com

nameserver 172.16.22.2

[[email protected] ~]# host -t A www.ltt.com

www.ltt.com has address 172.16.122.240

www.ltt.com has address 172.16.122.40

www.ltt.com has address 172.16.122.140


小结:实际工作中,你的转发的IP一般设置为运营商的DNS服务器的IP地址,运营商的DNS服务器可以接受你的转发


、DNS的子域授权

精解Linux RHEL 6.x DNS 服务器



#######父域的主配置文件和区域配置文件还是之前的不需要改动######
#########修改区域解析库文件vim /var/named/jie.com.zone#########
$TTL 6400
@   IN SOA  dns.jie.com.  admin.jie.com. (
                 2013081401 ;serial numbel
                  2h        ;refresh time
                  5m        ;retry time
                  7d        ;expire time
                  1d        ;minimum
)
             IN NS  dns.jie.com.
dns.jie.com. IN A   172.16.22.2
www          IN A   172.16.22.2
www          IN A   172.16.22.20
www          IN A   172.16.22.200
ftp          IN A   172.16.22.220
son          IN A   172.16.122.4   #添加子域的A记录
             IN NS  son.jie.com.   #添加子域的NS记录
dns          IN A   172.16.122.4



###子域的主配置文件/etc/named.conf#########
options {
//  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; };
        recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    dnssec-lookaside auto;
    /* 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;
        };
};
zone "." IN {
    type hint;
    file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
#####子域的区域配置文件/etc/named.rfc1912.com添加一点内容########
zone "son.jie.com" IN {
       type master;
       file "son.jie.com.zone";
};
########子域的区域解析库文件/var/named/son.jie.com.zone添加一点内容####
$TTL 1D
@   IN SOA  dns.son.jie.com. admin.son.jie.com. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
            IN NS  dns.son.jie.com.
dns         IN A  172.16.122.4
www         IN A  172.16.122.40
www         IN A  172.16.122.140
www         IN A  172.16.122.240
ftp         IN A  172.16.122.200
mail        IN A  172.16.122.250

父域的测试:父域是直接可以解析子域的,子域默认是不能解析父域

[[email protected] named]# host -t A www.son.jie.com

www.son.jie.com has address 172.16.122.240

www.son.jie.com has address 172.16.122.40

www.son.jie.com has address 172.16.122.140


子域也能解析父域,①可以把子域的DNS指向父域,②在子域上面做转发,父域接收子域的转发请求

、DNS的acl规则和view视图

精解Linux RHEL 6.x DNS 服务器


###jie.com服务器的主配置文件######
options {
//  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; };
    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    dnssec-lookaside auto;
    /* 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;
        };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
######区域配置文件######################
view LAN {
zone "." IN {  #把主配置文件的根域放到了区域配置文件中
    type hint;
    file "named.ca";
};
zone "localhost.localdomain" IN {
    type master;
    file "named.localhost";
    allow-update { none; };
};
zone "localhost" IN {
    type master;
    file "named.localhost";
    allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
    type master;
    file "named.loopback";
    allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
    type master;
    file "named.loopback";
    allow-update { none; };
};
zone "0.in-addr.arpa" IN {
    type master;
    file "named.empty";
    allow-update { none; };
};
match-clients { 172.16.22.0/16; };  #当匹配这个网段的IP访问jie.com服务器时,返回172.16.22.128
zone "jie.com" IN {
        type master;
        file "lan.jie.com";
 };
};
view WAN {
 match-clients {  any; };  #其他任何网段访问时返回1.1.1.128
 zone "jie.com" IN {
       type master;
       file "wan.jie.com";
};
};
#######区域解析库文件的内容#################
#############/var/named/lan.jie.com#####################
$TTL 1D
@   IN SOA  dns.jie.com. admin.jie.com. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    IN NS   dns.jie.com.
dns     IN A  172.16.22.128
www     IN A  172.16.22.128
ftp     IN A  172.16.22.128
mail    IN A  172.16.22.128
www     IN A  172.16.22.1
#############/var/named/wan.jie.com#####################
$TTL 1D
@   IN SOA  dns.jie.com. admin.jie.com. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    IN NS   dns.jie.com.
dns     IN A  1.1.1.128
www     IN A  1.1.1.128
ftp     IN A  1.1.1.128
mail    IN A  1.1.1.128
www     IN A  1.1.1.1


验证:

[[email protected] ~]# ifconfig | grep -A 1 eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:9C:14:36  

         inet addr:172.16.22.3  Bcast:172.16.255.255  Mask:255.255.0.0

[[email protected] ~]# host -t A www.jie.com 172.16.22.2

Using domain server:

Name: 172.16.22.2

Address: 172.16.22.2#53

Aliases:


www.jie.com has address 172.16.22.128

www.jie.com has address 172.16.22.1


[[email protected] ~]# ifconfig | grep -A 1 eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:D1:6F:09  

         inet addr:192.168.0.4  Bcast:192.168.255.255  Mask:255.255.0.0

[[email protected] ~]# host -t A www.jie.com 172.16.22.2

Using domain server:

Name: 172.16.22.2

Address: 172.16.22.2#53

Aliases:


www.jie.com has address 1.1.1.1

www.jie.com has address 1.1.1.128


、DNS的日志系统的使用


####此实验是接着上面的实验内容####################
#######修改主配置文件####################
options {
//  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; };
    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    dnssec-lookaside auto;
    /* 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;
              };
           channel querylog {
                file "/var/log/bindquery.log" versions 3 size 10M;
                severity dynamic;
                 print-time yes;
                 print-category yes;
                 print-severity  yes;
        };
          category  queries { querylog; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
##########其它文件不需要修改
touch /var/log/bindquery.log
chown named:named /var/log/bindquery.log



验证:

[[email protected] ~]# host -t A ftp.jie.com 172.16.22.2

Using domain server:

Name: 172.16.22.2

Address: 172.16.22.2#53

Aliases:


ftp.jie.com has address 172.16.22.128

[[email protected] ~]# host -t A www.jie.com 172.16.22.2

Using domain server:

Name: 172.16.22.2

Address: 172.16.22.2#53

Aliases:


www.jie.com has address 172.16.22.1

www.jie.com has address 172.16.22.128



[[email protected] log]# cat /var/log/bindquery.log

08-Aug-2013 06:27:51.720 queries: info: client 172.16.22.3#36432: view LAN: query: ftp.jie.com IN A + (172.16.22.2)

08-Aug-2013 06:27:52.406 queries: info: client 172.16.22.3#34500: view LAN: query: ftp.jie.com IN A + (172.16.22.2)

08-Aug-2013 06:27:52.880 queries: info: client 172.16.22.3#34935: view LAN: query: ftp.jie.com IN A + (172.16.22.2)

08-Aug-2013 06:31:27.921 queries: info: client 172.16.22.3#38660: view LAN: query: ftp.jie.com IN A + (172.16.22.2)

08-Aug-2013 06:31:34.402 queries: info: client 172.16.22.3#52686: view LAN: query: www.jie.com IN A + (172.16.22.2)


可以生成日志


小结:DNS实现CDN会用到view,理清楚配置文件之间的关系。当服务开启不了时多查看日志(/var/log/messages),注意配置文件的语法格式。博客内容有点多,望各位博友能多多指点