DNS主从

主机名到IP地址的映射有两种方式:

1)静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用;

2)动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址。

通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法。可以将一些常用的域名放入静态域名解析表中,这样可以大大提高域名解析效率。

正向解析:根据主机名称(域名)查找对应的IP地址(实际应用中最多的)

反向解析:根据IP地址查找对应的主机域名(不常用,一般用于搭建邮件服务器时。)

根据服务器与所提供域名解析记录的关系,将DNS服务器分为不同的角色:

1)缓存域名服务器,也称为 唯高速缓存服务器

通过向其他域名服务器查询获得域名->IP地址记录

将域名查询结果缓存到本地,提高重复查询时的速度

2)主域名服务器

特定DNS区域的官方服务器,具有唯一性

负责维护该区域内所有域名->IP地址的映射记录

3)从域名服务器(通俗一点就是用于备份DNS服务器的)

也称为 辅助域名服务器

其维护的 域名->IP地址记录 来源于主域名服务器

搭建DNS服务应用的软件为:BIND(Berkeley Internet Name Daemon)

bind详解:

包名:bind

进程:named

协议:dns

使用端口:53(tcp,udp)

  • 安装bind服务

        yum -y install bind  bind-chroot bind-utils  bind-libs

如果安装了bind-chroot(其中chroot是 change root 的缩写),BIND会被封装到一个伪根目录内,配置文件的位置变为:

    /var/named/chroot/etc/named.conf   - BIND服务主配置文件

    /var/named/chroot/var/named/    - zone文件

  • 修改主配置文件(配置之前最好备份一下:cp /etc/named.conf   /etc/named.conf.bak)

vim /etc/named.conf

//options语句用来设置可以被整个BIND使用的全局选项。这个语句在每个配置文件中只有一处。如果出现多个options语句,则第一个options的配置有效,并且会产生一个警告信息。

如果没有options语句,则每个选项使用缺省值。

options {

        listen-on port 53 { any; };    //监听在主机的53端口上。any代表监听所有的主机

        directory       "/var/named";    //服务器的工作目录。默认配置文件中所有使用的相对路径,下面给出的相对路径都是相对此目录。指定的目录应该是一个绝对路径。

        dump-file       "/var/named/data/cache_dump.db";    //缓存转储位置。如果没有指定,缺省名字是named_dump.db。

        statistics-file "/var/named/data/named_stats.txt";      //记录统计信息的文件

        memstatistics-file "/var/named/data/named_mem_stats.txt";    //记录内存使用的统计信息

        allow-query     { any; };    //允许哪些主机查询,any代表所有人

        recursion yes;    //是否允许递归查询

        forwarders { 219.141.136.10;114.114.114.114; };

//定义日志

logging {

        channel default_debug {

                file "data/named.run";    记录了一些named的信息,如监听/解析记录等。它的位置在/var/named/chroot/var/named/data下。  

                severity dynamic;

        };

        channel audit_log { file "/var/log/bind.log"; severity notice; print-time yes; };

};

//根区域

zone "." IN {

        type hint;              //hint:表示是互联网中根域名服务器,master:表示定义的是主域名服务器,slave:表示定义的是辅助域名服务器

        file "named.ca";    //指定了解析文件的位置,解析文件中记录着域名与IP的对应关系。它的位置在/var/named/chroot/var/named/data下。 

};

//把另外两个文件也包含进来,作为主配置文件的一部分

include "/etc/named.rfc1912.zones";        //定义区域配置文件

include "/etc/named.root.key";                //根区域的key文件,与事务签名相关

配置文件的格式是每行后面都必须加分号结束,并且有花括号的地方,花括号两边必须要有空格。

编辑区域(增加zone信息)配置文件

vim  /etc/named.rfc1912.zones

在里面新建一个区域,格式如下:

zone "区域名称" IN {

    type master|slave|forward; //注意每个语句要以分号结尾

    file "ZONE_NAME.zone";

}; //注意要以分号结尾

zone "long.com" IN {        //正向解析的zone定义

        type master;

        file "long.zone";

        notify yes;    //开启主从同步

        also-notify{ 192.168.20.23;};    //dns服务器地址

        allow-transfer { 192.168.20.23; };    // 指定可以同步数据的从主机IP

};

zone "168.192.in-addr.arpa"  {        //反向解析的zone定义,.in-addr.arpa”以告诉named这是一个反解zone定义。前面的IP必须倒着写,可以写三位,比如20.168.192(看需求是否需要)

        type master;

        file "168.192.zone";

};

# 具体相关解析的配置文件保存在 /var/named/long.zone 文件中

  • 创建区域数据(zone)文件(/var/named/***.zone)


SOA:(Start Of Authority起始授权记录表示一个授权区的开始; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;

NS:标识一个域的域名服务器。NS资源记录的数据字段包括这个域名服务器的DNS名。我们还需要指定这个域名服务器的地址与主机名相匹配的A记录,可以有多个NS记录;其中一个为主的;

A: Address, 地址记录,FQDN --> IPv4;

AAAA:地址记录, FQDN --> IPv6;

CNAME:Canonical Name,给定一个主机的别名,主机的别名记录是在这个主机的A记录中指定的

PTR:Pointer,IP --> FQDN

MX:Mail eXchanger,邮件交换器;

优先级:0-99,数字越小优先级越高;


修改权限

chmod 644 /var/named/long.zone  使named用户拥有读取的权限,(如需指定用户组视情况而定)


配置正向解析

vim /var/named/long.zone

这个文件里所有的域名结尾的点号一定不能省略。

$TTL            1D            dns记录在本地DNS服务器上保留的时间

@       IN      SOA     dns1.long.com.      root.mengge.com.  (区域解析库文件第一个记录必须是SOA记录,必须有NS记录并且正解区域要有NS记录的A记录,反解则不需要有NS记录对应的A记录。@就是zone中定义的域名。

            20160921  ;serial              //序号,如果master上的zone文件序号比slave上的大,那么数据就会同步。

            12H            ;refresh           //刷新Slave的时间

            1H              ;retry               //Slave更新失败后多久再进行一次更新

            1W             ;expire             //记录逾期时间:当 slave 一直未能成功与 master 取得联系,那到这里就放弃 retry,同时这里的资料也将标识为过期

            3H )             ;mininum        //缓存时间,这是最小默认 TTL 值,如果您在前面没有用“$TTL”来定义,就会以此值为准。

@        NS      dns1     //表示一个域的域名服务器。NS资源记录的数据字段包括这个域名服务器的DNS名。我们还需要指定这个域名服务器的地址与主机名相匹配的A记录

@        NS      dns2     //从服务器

dns1    A       192.168.20.22

dns2    A       192.168.20.23

gitlab  A       192.168.20.75

配置反向解析

$TTL            86400

@       IN      SOA     @      root.mengge.com. (

            20160921  ;serial

            12h         ;refresh

            7200        ;retry

            604800      ;expire

            86400       ;mininum

            )

              IN      NS   @

75.20      IN      PTR   gitlab.mengge.com


systemctl restart named

rndc reload  重新加载所有域名配置文件。

rndc reload mengge.comrndc reload + 域名  不重启的情况下,加载指定配置文件生效


从服务器

vim /etc/named.rfc1912.zones

zone "haha.com" IN {

type slave;

masters { 192.168.10.6 };        主dns服务器

masterfile-format text;    //解决同步后配置文件乱码问题

file "slaves/haha.com.zone";

};


BIND DNS转发

一、转发机制

当你设置了转发器后,所有非本域的和在缓存中无法找到的域名查询都将转发到设置的DNS转发器上,由这台DNS来完成解析工作并做缓存,因此这台转发器的缓存中记录了丰富的域名信息。因而对非本域的查询,很可能转发器就可以在缓存中找到答案,避免了再次向外部发送查询,减少了流量。

二、配置参数

1.forward

此选项只有当forwarders列表中有内容的时候才有意义。当值是First,默认情况下,使服务器先查询设置的forwarders,如果它没有得到回答,服务器就会自己寻找答案。如果设定的是only,服务器就只会把请求转发到其它服务器上去。

2.forwarders

设定转发使用的ip地址。默认的列表是空的(不转发)。转发也可以设置在每个域上,这样全局选项中的转发设置就不会起作用了。用户可以将不同的域转发到服务器上,或者对不同的域可以实现forward only或first的不同方式,也可以根本就不转发。

注:转发服务器的查询模式必须允许递归查询(即,recursion yes;),默认递归查询是开启的。

三、转发器的配置格式

options { 

forward first;

forwarders{

8.8.8.8;

1.8.8.8;

};

};

注意:转发器本身不用做任何设置,而是对需要转发器的其他DNS server做以上配置。还有,如果该 DNS Server 无法联系到转发器,那么BIND会自己尝试解析。

如果要禁止BIND在无法联系到转发器时不做任何操作,那么你还可以使用 forward only 命令,这样BIND只能使用区的权威数据和缓存来响应查询了( 在连接不到转发器的情况下 )。

options { 

forward only;

forwarders{

8.8.8.8;

1.8.8.8;

};

};

在 BIND 8.2 以后引入了一个新的特性:转发区( forward zone ),它允许你把 DNS 配置成只有查找特定域名的时候才使用转发器。( BIND 9 从9.1.0 才开始有转发区功能)例如,你可以使你的服务器将所有对test.com结尾的域名查询都转发给test.com的两台名字服务器:

zone "test.com" {

type forward;

forwarders{

8.8.8.8;

1.8.8.8;

};

};

还有一种转发区设置和刚才的设置刚好相反,它允许你设置什么样的查询将不被转发,当然这只适用于在options语句中指定了转发器的 DNS 。配置如下:

options { 

forwarders{

8.8.8.8;

1.8.8.8;

};

};

zone "test.com" {

type master;

file "zone.test.com";

forwarders {};

};

test.com这个区中,你授权了几个子域,例如:zx.test.comlab.test.com等,那么在test.com的权威服务器上设置转发后,因为对 zx.test.comlab.test.com这几个子域不是权威,那么如果有对 www.zx.test.com这样的子域的域名查询,服务器也将转发。这完全是没有必要的,因为服务器上就有zx.test.org 子域的 NS 记录,何须再转发。


猜你喜欢

转载自blog.51cto.com/7072753/2135323