关于DNS深层次的工作原理请参考博客:http://blog.51cto.com/13570193/2105393


目录

  • DNS配置参数介绍

  • 配置NDS服务器

  • 配置主从DNS服务器

  • 子域DNS服务器

  • 搭建DNS视图


一、DNS配置参数介绍

1.1 主配置文件/etc/named.conf

options {...};               设定DNS服务器全局环境

listen-on port 53 {...;};    DNS服务named监听的端口和ip

directory                    定义数据库文件存放的目录,即zone file的存放目录

dump-file/statistics-file/memstatistics-file 

                             关于named服务的统计信息的文件

allow-query {...;};          允许询问我DNS服务器的主机

allow-transfer {...;};       是否允许slave DNS对领域数据进行转发

allow-update {...;};         动态DNS更新

recursion                    是否支持递归查询,设置为no将不能访问根服务器

forward                      是否支持转发

        only                 表示只进行转发

        first                表示优先

        默认first

forwarders {ip1;ip2;....;};   指定转发的上层DNS服务器IP

zone "xxx" IN {...};          区域描述声明

        type                  指定zone类型

            hint              表示跟服务器

            master            表示该区域的主DNS服务器

            slave             表示该区域的从DNS服务器

        file                  表示DNS数据库文件放在哪里

view " " {...};                域名视图描述声明

acl "xxx" {...;};              定义访问控制列表,名字为xxx

        内置的acl:localhost/localnet/any/none:本地主机的IP/该局域网的所有IP/任何IP/所有都不

include " ";                   将过多的zone声明写入一个文件当中,以免主配置文件过于繁琐

1.2 数据库文件/var/named/*

DNS服务器的数据库记录信息

$TTL       该区域的记录信息能够在客户端的缓存中存活多长时间

SOA        一个区域的记录信息的开始,必须标识

    格式为:区域    IN    SOA    主DNS服务器域名    邮件服务器域名 (                    

                        serial;    序列号,从DNS的序列号如果小于它则会更新数据

                        refresh;   从DNS服务器多长时间检查一次主DNS的数据   

                        retry;     从DNS服务器连接主DNS失败后,多长时间后重新连接 

                        expire;    从DNS始终无法连接主DNS,从DNS的数据库文件何时失效

                        minimum;   如果DNS服务器查询结果失败,此失败信息会在缓存缓存中存活多长时间

            )

    例如:1804170045 5 5 2592000 3600

    表示:2018/4/17第45次刷新,slave每5秒连接master,连接失败则在5秒之后再次连接,直到2592000秒,查询失败的记录在其他DNS服务器中存活3600秒

NS        管理区域的DNS服务器名称,每个域名都有自己的NS记录,必须标识

A         主机名对应的IPv4地址,必须标识

AAAA      ipv6的地址

MX        表示区域的邮件服务器的域名

CNAME     主机别名,用于域名内部的跳转,为服务器配置提供灵活性。变更域名的IP地址的时候,只需要修改别名

    格式为:别名    IN    CNAME    DNS服务器的域名

PTR        PoinTeR的缩写,逆向查询记录,后边记录的数据就是反解到的主机名,反向解析数据库文件必须标识

1.3 DNS解析的常用命令

查询主机名IP的命令

        host [option] <FQDN> [server]

                -a         列出详细信息

                -l         列出domain所管理的所有主机名的信息

        nsloopup <FQDN> [server]

                支持正解和反解

        dig [option] <FQDN> [@server]

                +trace     从根服务器开始追踪

                - t <type> 指定查询的数据类别

                -x         反解查询

        whois <domain>

                查询注册的domain的信息

                该命令来自jwhois软件

rndc reload     重新读取named.conf

named-checkconf 检查主配置文件named.conf的语法

tips:

/etc/sysconfig/named     是否开启chroot

                文件中定义了chroot指定的根目录

/var/named/              DNS数据库存放目录

/var/run/named/          放置pid-file的目录,该文件定义了开启named服务的进程号

/etc/nsswitch.conf       决定下边两个文件的服务顺序

        /etc/resolv.conf DNS服务的IP,该文件会受到DHCP服务器的影响

        /etc/hosts       本地主机名和IP的对应


二、配置DNS服务

搭配DNS环境

        指定区域linux.com,CentOS6为该域名的DNS服务器,该DNS服务器的域名为master.linux.com,同时有另外一个名字为www.linux.com

        该域名服务器有一个别名叫做ftp.linux.com;

        该区域内有一台名为www.linux.com的邮件服务器;

        该DNS服务器的IP为192.168.138.254,并且用CentOS7(192.168.138.150)来测验;

        该DNS服务器支持正向解析和反向解析。

tip:一个服务器可以是一个IP对应多个域名,同样也可以一个域名对应多个IP。

     named-checkconf检查配置文件的语法错误

        ① 修改主配置文件:/etc/named.conf 

主要设置参数如下:

我们模拟的是在192.168.138.0/24的网段内搭建DNS服务器,因此设置监听的IP为192.168.138.254;

因为现在搭建的DNS服务器并没有连接外网,想要解析例如www.baidu.com的时候,需要recursion设置为yes,表示允许递归查询;

现在之后一台DNS服务器,因此将关于主从DNS的选项allow-transfer的ACL设置为none;

另外需要特别注意的是反解zone的格式,必须将IP倒着写。如138.168.192.in-addr.arpa

[root@CentOS6 ~]# cat /etc/named.conf 
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
    listen-on port 53 { 192.168.138.254; };
    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     { any; };
    allow-transfer { none; };
    recursion yes;
    dnssec-enable no;
    dnssec-validation no;
/* 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";
};

zone "linux.com" IN {
    type master;
    file "named.linux.com";
};

zone "138.168.192.in-addr.arpa" IN {
    type master;
    file "named.192.168.138";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

        ② 修改root的数据库文件:/var/named/name.ca

该文件是安装BIND的时候直接现成的,因此不需要我们去修改。

        ③修改正解数据库文件:/var/named/named.linux.com

正解数据库文件中必须要有$TTL、SOA、NS、A记录。

[root@CentOS6 ~]# cat /var/named/named.linux.com 
$TTL 1D
@					IN SOA	master.linux.com. www.linux.com. (
		 	2018041901	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
@					IN	NS	master.linux.com. ;
@					IN	MX	10 www.linux.com. ;
master.linux.com.	IN	A	192.168.138.254 ;
www.linux.com.		IN	A	192.168.138.254 ;
ftp.linux.com.		IN	CNAME	www.linux.com. ;

        ④修改反解数据库文件:/var/named/named.192.168.138

反解数据库文件必须有$TTL、SOA、NS、PTR记录

[root@CentOS6 ~]# cat /var/named/named.192.168.138 
$TTL 1D
@					IN SOA	master.linux.com. www.linux.com. (
		 	2018041901	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
@					IN	NS	master.linux.com. ;
254 	                                IN	PTR	master.linux.com. ;
254					IN	PTR	www.linux.com. ;

        ⑤ 开启CentOS6的named服务,然后用CentOS7来测试

正向解析成功!!!

搭建本地私有DNS服务器_DNS

反向解析成功!!!

搭建本地私有DNS服务器_DNS _02

解析外网成功!!!

搭建本地私有DNS服务器_主从_03


三、配置主从DNS

每个域名中至少需要两台DNS服务器来管理该域名,提供不间断的查询服务,一个master,一个slave,slave自己没有数据库,需要从master那里同步,并且master需要开启数据库传输。

环境规划:

CentOS6作主DNS服务器,域名为master.linux.com,mini6作从DNS服务器,域名为slave.linux.com,他们共同管理区域linux.com。

        主DNS的配置

① 配置/etc/named.conf,主要注意的是每个zone文件里的allow-transfer参数;

[root@CentOS6 ~]# cat /etc/named.conf 
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
    listen-on port 53 { localhost; };
    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     { any; };
    allow-transfer { none; };
    recursion yes;
    dnssec-enable no;
    dnssec-validation no;

zone "." IN {
    type hint;
    file "named.ca";
};

zone "linux.com" IN {
    type master;
    file "named.linux.com";
    allow-transfer { 192.168.138.100; };
};

zone "138.168.192.in-addr.arpa" IN {
    type master;
    file "named.192.168.138";
    allow-transfer { 192.168.138.100; };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

②  配置正向数据库文件/var/named/named.linux.com,添加从DNS服务器的NS记录和S记录;

[root@CentOS6 ~]# cat /var/named/named.linux.com 
$TTL 1D
@					IN SOA	master.linux.com. www.linux.com. (
		 	        2018041902	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
@					IN	NS	master.linux.com. ;
@                                       IN      NS      slave.linux.com. ;
@					IN	MX	10 www.linux.com. ;
master.linux.com.	IN	A	192.168.138.254 ;
slave.linux.com.        IN      A       192.168.138.150 ;
www.linux.com.		IN	A	192.168.138.254 ;
ftp.linux.com.		IN	CNAME	www.linux.com. ;

③ 配置反向数据库文件/var/named/named.192.168.138,添加从DNS服务器的NS记录和PTR记录;

[root@CentOS6 ~]# cat /var/named/named.192.168.138 
$TTL 1D
@					IN SOA	master.linux.com. www.linux.com. (
    		 	        2018041902	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
@					IN	NS	master.linux.com. ;
@                                       IN      NS      slave.linux.com. ;
254 	                                IN	PTR	master.linux.com. ;
254					IN	PTR	www.linux.com. ; 
150                                     IN      PTR     slave.linux.com. ;

        从DNS的配置

④ 配置文件/etc/named.conf,在每个zone参数里边添加masters选项;

从master数据库同步的数据需要考虑文件权限的问题和SELinux,所以为了减少麻烦,系统预留了/var/named/slaves目录,注意slaves目录原本没有文件存在,该目录已经为我们设定好权限和SELinux了,我们只需要把同步的文件放在该目录下即可。

[root@CentOS7 ~]# cat /etc/named.conf 
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
    listen-on port 53 { localhost; };
    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     { any; };
    allow-transfer  { none ; };
    recursion yes;
    dnssec-enable no;
    dnssec-validation no;
};

zone "." IN {
    type hint;
    file "named.ca";
};

zone "linux.com" IN {
    type slave;
    file "slaves/named.linux.com";
    masters { 192.168.138.254; };
};

zone "138.168.192.in-addr.arpa" IN {
    type slave;
    file "slaves/named.192.168.138";
    masters { 192.168.138.254; };
};

⑤ 重启主从DNS服务器的named,会发现在从DNS服务器上,/var/named/slaves/目录下多了两个数据库文件;

搭建本地私有DNS服务器_DNS_04 

⑥ 查看/var/log/messages的日志。

搭建本地私有DNS服务器_DNS _05


四、子域DNS服务器

环境规划:

CentOS6作为区域linux.com.的DNS服务器,域名为master.linux.com;

在linux.com.下委派子域centos.linux.com.,CentOS7作子域的DNS服务器,域名为dns.centos.linux.com。

        上层DNS服务器配置

① 配置/var/named/named.linux.com,添加下层DNS的NS记录和A记录;

$TTL 1D
@                   IN SOA  master.linux.com. www.linux.com. (
            2018041905  ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
@                   IN  NS  master.linux.com. ;
@                   IN  NS  slave.linux.com. ;
@                   IN  MX  10 www.linux.com. ;
centos.linux.com.   IN  NS  dns.centos.linux.com. ;
dns.centos.linux.com.   IN  A   192.167.138.150 ;
master.linux.com.   IN  A   192.168.138.254 ;
slave.linux.com.    IN  A   192.168.138.100 ;
www.linux.com.      IN  A   192.168.138.254 ;
ftp.linux.com.      IN  CNAME   www.linux.com. ;

        配置下层DNS

② 修改/etc/named.conf,添加zone参数;这里特别注意,要开启子域DNS服务器的转发功能(forward),不开的话只能上层查询下层,下层查询不到上层,这个小细节坑了我一上午。

[root@CentOS7 ~]# cat /etc/named.conf 
options {
    listen-on port 53 { 192.168.138.150; };
    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     { any; };
    forward first;
    forwarders { 192.168.138.254; };
    
    recursion yes;
    dnssec-enable no;
    dnssec-validation no;
    pid-file "/run/named/named.pid";
};

zone "." IN {
    type hint;
    file "named.ca";
};
zone "centos.linux.com" IN {
    type master;
    file "named.centos.linux.com";
};

③ 配置/var/named/named.centos.linux.com,添加zone数据库文件,注意必须要指明邮件服务器www.centos.linux.com.,很重要;


$TTL    600
@       IN      SOA     dns.centos.linux.com. www.centos.linux.com. (
                        2018041905  ; serial
                        3600  ; refresh
                        3600  ; retry
                        3600  ; expire
                        3600 )    ; minimum
@       IN      NS      dns.centos.linux.com. ;
@       IN      MX      10 www.centos.linux.com. ;
dns     IN      A       192.168.138.150 ;
www     IN      A       192.168.138.150 ;

④ 测试。

上层查询下层子域DNS服务器

搭建本地私有DNS服务器_配置_06

下层查询上层DNS服务器

搭建本地私有DNS服务器_配置_07


五、搭建DNS视图

环境规划

CentOS6作为区域linux.com.的DNS服务器,域名为master.linux.com.;

CentOS6上边有两个网段VMnet1、VMnet2,分别为192.168.124.0/24,192.168.138.0/24;

不同网段的客户端查询同样的域名master.linux.com,根据客户端IP的不同会得到不同的IP地址。

① 配置/etc/named.conf,添加view参数;

options {
    listen-on port 53 { localhost; };
    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     { any; };
    recursion yes;
    dnssec-enable no;
    dnssec-validation no;
};

acl vmnet1 { 192.168.124.0/24; };
acl vmnet2 { 192.168.138.0/24; };

view "vmnet2" {
    match-clients { "vmnet2"; };
    zone "." IN {
        type hint;
        file "named.ca";
    };
    zone "linux.com" IN {
        type master;
        file "named.linux.com";
    };
    zone "138.168.192.in-addr.arpa" IN {
        type master;
        file "named.192.168.138";
    };
};

view "vmnet1" {
    match-clients { "vmnet1"; };
    zone "." IN {
        type hint;
        file "named.ca";
    };
    zone "linux.com" IN {
        type master;
        file "named.linux.com.another";
    };
};

② 配置/var/named/named.linux.com.another数据库文件,其他数据库文件和上边的一样,主要修改区域linux.com.的DNS服务器的IP即可;

$TTL    1D
@    IN    SOA    master.linux.com. www.linux.com. (
                    2018041905; serial
                    1D; refresh
                    1H; retry
                    1W; expire
                    3H ); minimum
@    IN    NS    master.linux.com. ;
@    IN    NS    slave.linux.com. ;
@    IN    MX    10 www.linux.com. ;
centos.linux.com.    IN    NS    dns.centos.linux.com. ;
dns.centos.linux.com.IN    A    192.168.138.150 ;
master.linux.com.    IN    A    192.168.124.1 ;
slave.linux.com.     IN    A    192.168.138.100 ;
www.linux.com.       IN    A    192.168.124.1 ;
ftp.linux.com.       IN    CNAME    www.linux.com. ;

③ 测试。

搭建本地私有DNS服务器_DNS_08