DNS主服务器的搭建


   搭建DNS服务器需要的rpm包bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6。我们用yum安装:

#yum -y install bind包

   我们看看bind包安装生成的一些常用到文件

/etc/named.conf(DNS的配置文件)

/etc/named.rfc1912.zones(DNS的区域配置)

/etc/rc.d/init.d/named(服务脚本)

/var/named(存放区域数据文件)

   一般常用到的也就是这几个,所以我们启动服务不在是"service dns start" 而应该是service named start

#vim /etc/named.conf打开配置文件


  在options里为了不影响我们后期的实验实现需要把一些信息注释掉,只留几个。

wKioL1M2HYLDjzQiAAJwsqQ8Wzw397.jpg


   listen-on port 53 { 127.0.0.1; };那个ip监听在53号端口,监听的这个ip将来是要跟别的主机进行通信的,所以我们这个要么注释掉,表示所有ip 要么写入一个本机的通信ip,注意要以分号结尾。这个ip是必须要写的,如果不写服务是启动不了的。


wKiom1M2IOGgYE0KAAB0TkJT6xw713.jpg

wKioL1M2IOOA2lwVAAE7VI05BzI390.jpg

可以指定多个地址,地址之间用分号分隔。

wKiom1M2JLWywhE9AADfLlPhYcg837.jpg

wKioL1M2JI7SJdYvAAC-g3U5x3s974.jpg

wKiom1M2JLjS1PAdAAFeCz5i35A956.jpg

listen-on-v6 port 53 { ::1; };这个是ipv6的

       allow-query     { any; };允许查询,

       recursion yes; 是否递归 如果是no 那么这台DNS服务器讲不会解析 yes或注释掉不写,默认是允许。


  主要是让大家注意下面的第一个include "/etc/named.rfc1912.zones";

wKiom1M2JdDT5tToAAB2Jaf4moE189.jpg

   在named.conf配置文件中,最少得创建3个区域空间

   zone .

   zone localhost

   zone 1.0.0.127.in-addr.arpa(本地回环的反向解析域空间),有这三个,named服务才可以启动

   而系统自带的这三个域空间1个在/etc/named.conf 2个在“include/etc/named.rfc1912.zones”中

   vim /etc/named.rfc1912.zones

wKioL1M1K_zSonicAANK70RaCRc910.jpg   所以如果是我们手动创建,我们可以直接在/etc/named.conf中创建3个区域数据文件,然后启动DNS服务。

  我们可以尝试启动服务了

#service named start

wKioL1M1LQ_DJtfxAAMqCrOnrJg189.bmp

   服务正常,我们就可以为自己的DNS做空间域的创建开始我们的正向解析

一:正向解析:

#vim /etc/named.rfc1912.zones

wKiom1M1Lsegk6haAAOE5idX3K0480.bmp

   创建格式:zone "你想叫的名字" IN(这是一个关键字){

          type(类型) master;(主)

          file "区域数据名称";

};

type字段指定区域的类型,一般4种:
Master:主DNS服务器

Slave:辅助DNS服务器:拥有主DNS服务器的区域数据文件的副本,辅助DNS服务器会从主DNS服务器同步所有区域数据。

Forward:一个forward zone是每个域的配置转发的主要部分。一个zone语句中的type forward可以包括一个forward和/或forwarders子句,它会在区域名称给定的域中查询。如果没有forwarders语句或者forwarders是空表,那么这个域就不会有转发,消除了options语句中有关转发的配置。

Hint:根域名服务器的初始化组指定使用线索区域hint zone,当服务器启动时,它使用根线索来查找根域名服务器,并找到最近的根域名服务器列表。

注意:每一行都要以;号结尾。数据文件刚开始我们也说了,存放在/var/named/下

    我们规定好了域空间,但是我们在/var/named/目录下并没有这个“chinacache.com.zone”文件,所以我们得到这个目录中去创建这个文件

#cd /var/named/aperson.com.zone

wKiom1M1PUagxbR2AAJBpeepM3M353.jpg

说明:这个文件的格式:(资源记录格式)

    name   ttl   IN   rrtype   value

ttl:值我们可以申明一个宏变量$TTL 1D(单位是s也可以说1D,1天...)

IN:关键字

rrtype:类型(SOA NS MX A CANEM等)

value:用于指定与当前资源记录有关的数据,数据字段的内容取决于类型字段

     1:SOA:(起始授权机构) SOA记录表明了谁是这个区域的所有者。必须第一个写,

             name段必须是区域名称(可以用@代替)

             Value段:有几个数据,最关键的是主DNS服务器的FQDN:dns,aperson.com. 其后面在跟一个管理员邮箱admin.aperson.com.

     SOA还有几个value值


                       2014032801 serial number; 序列号不超10位通常用日期表示

                       2H refresh time;刷新时间

                       5M retry time;重试时间

                       7D expire time 过期时间

                       12H negative time 否定答案时间)

这些数值是可以自定义的。

   2:NS:用于标识 区域的DNS服务器,即是说负责此DNS区域的权威名称服务器.

         name:必须是区域名称:aperson.com.(也可以用@代替)

         Value段:DNS服务器的FQDN :dns.aperson.com.

   3:MX:邮件交换记录

        name段:必须是区域名称:mail.aperson.com.  

        Value段:包括优先级根FQDN 10 mail.aperson.com.

   4:A:主机记录  

       name:FQDN

       Value:ip

   5:CNAME:某个主机记录的别名记录

       name:FQDN

       Value:FQND

  配置完成以后可以用命令:named-checkzone 检测语法错误

wKioL1M1QZbhB_cEAAXFrlwQVrU398.bmp    然后重新载入配置:

#service named reload

#service named restart

这两个命令都可以,我们在实验环境中可以重启服务,但是在现实生产环境中最好是reload。

   reload以后我们可以用dig命令做正向解析测试了:

wKioL1M1SHWh7VJ1AASjEvgCTno817.jpg

#dig -t MX mail.aperson.com @172.16.23.20进行解析测试

用法:-t:指定类型

    @:指定用那个服务器进行解析。

   -x:指定主机ip

可以看到结果:我们正向解析成功。


   二:接着来DNS的反向解析:

   首先:我们得创建反向解析区域以及区域数据文件。

#vim /etc/named.rfc1912.zones


wKioL1M1eQCRmOqoAADOFrlGFw0794.jpg

# vim /var/named/23.16.172.zone

wKioL1M1eaWiKc37AAFOwlvFqKQ439.jpg

    注意:反向区域文件的名称是你当前主机的网络名称的逆写,不包括主机位。而在区域数据文件里,SOA跟NS记录跟正向解析里的一样,不需要记录CNAME 和 MX 只记录主机的反向解析即可。

    name 都是ip的主机位,

    rrtype是PTR。

    value是FQDN

    我们来验证一下:

#dig -x 172.16.23.30

wKiom1M1e2WjbMG8AAQgNNP5wbM732.jpg

    OK!效果很明显,反向解析成功!

    三:我们开始主从同步之旅:

    首先,先创建一个辅DNS服务器

wKiom1M1g_Cg8cFfAAIE4zVexAs568.jpgwKioL1M1g_rAft0tAAE7-B2QqQo347.jpg

   创建从DNS服务器的时候需要在主服务器的正反解析区域数据文件里添加一条从服务器的NS记录和一条A记录

wKiom1M2P1SA2dwWAAJDan7omSE918.jpgwKiom1M2QfiDWA8eAAGxYKNWEvk623.jpg

   需要大家注意的是:从DNS服务器的naem:必须是主DNS的FQDN要么用@代替。


   辅DNS只需要创建区域文件,不需要创建区域数据文件,因为它的数据文件会从主服务器哪里同步过来。那么主服务器同步过来的数据文件放哪里呢?系统给我们提供了一个文件目录在/var/named/

一个叫 slaves的目录,我们可以看看这个目录:

#cd /var/named/

#ll

wKiom1M2KSCAlS2RAAK96pAtOE8923.jpg    data 和dynamic目录都已被使用。

#cd slaves

#ls

wKiom1M2Ki3j6CXTAABy1e8QQLk927.jpg

  里面什么都没有,所以这个目录是专门用来让我们存放主从数据同步时的数据文件目录,从名字我们也可以看得出。那么我们开始创建区域文件

#vim /etc/named.rfc1912.zones

wKiom1M2KuOCSqH8AAFgfHAOOK8338.jpg

  大家可以发现这个其实就是主服务器的区域文件的COPY版,只是需要在里面声明“我的主服务器上谁”即可。然后指定数据存储位置。创建好了区域文件,那么我们检测下语法错误就可以启动服务了

#named-checkconf

#service named start

 我们查看下日志:

#tail /var/log/message

wKiom1M2LZbBLWg3AAcw9PQ9DNU514.jpg


     我们去/var/named/slaves中去看看

#ls /var/named/slaves

wKioL1M2Lnfzd952AACcgbaO40M826.jpg

  #vim /var/named/aperson.com.zone

wKiom1M2QsGgWs7CAAIm5NMIm_E027.jpg    # vim 23.16.172.zone

wKioL1M2QufjljIAAAIn9v9D5N8620.jpg

   那么我们来验证下看辅DNS是否能解析我们的记录:

wKiom1M2L6KBiC-OAARaCg40e74937.jpg

  正向解析没问题我们在试试反向解析:

wKioL1M2RHfw56L6AASaQ1o19Es079.jpg

  我们可以修改数据文件SOA记录的serial的值重新reload通知从服务器来同步数据:

  这是没修改之前的:

wKiom1M2RWeh0HD4AACujgPJabg803.jpg

 这是修改之后的:

wKiom1M2RZHQA5pfAAC2szhW5FI795.jpg

然后我们重新载入,查看日志并去从服务器端验证:

#service named reload

#tail /var/log/message

wKioL1M2RiDS8Q13AAIgURYFNM8119.jpg

去从服务器端验证:

# /var/named/slaves/aperson.com.zone

wKioL1M2RrrzaDFRAAC3t9dusCc062.jpg

 OK!我们的主从同步完成。

 为了安全,我们是不能允许别人随便同步我们DNS服务器的数据的,所以DNS有一个安装控制机制,在区域空间文件里添加:

    allow-transfer {};花括号里写允许同步的ip多个ip用;号分隔,并且之间有空格。


  从服务器也需要做这样的安全设置。但是从服务器只需要从主服务器上同步数据,貌似不需要给别人同步数据吧?所以我们直接设置不让别人同步就OK

wKioL1M2Xg-DuzhSAAG442amlb4151.jpg

   我们可以用命令dig -axfr 来模拟数据同步看看效果:

wKioL1M2Xv_wbiiDAAGElvK9KbY902.jpg

wKiom1M2Xy_g_Eo8AAUuq4ZSOqc212.jpg

  大家可以看到同1主机的不同ip效果都不一样,只有允许了的ip才可以同步,即使是同一主机的不同ip也是不同的客户端。

  我们在客户端验证也会看到一样的效果。

wKiom1M2YAbCTjT8AAWA7iqSbkk664.jpg


 主从同步完成,我们可以接着来做子域授权了,我们只做正向解析


  重新搭建一个DNS服务器ip:172.16.24.31

  创建正向解析区域文件以及数据区域文件并验证解析

wKioL1M2pBCwsIxTAABN1AdMqOY543.jpg

wKioL1M2pBDz0uexAAEDSZS47pI503.jpg

wKiom1M2pDrCkpJjAAEqniKA2-g684.jpg   做子域授权需要在父域的正向数据文件中添加

     授权的子区域名称

     子区域的名称服务器

     子区域的名称服务器的IP地址

wKioL1M2r1PQktU5AAJ--HdAlNg630.jpg

    我们来验证是否能解析

wKiom1M2sKrjJ5vfAAPCRpMImjA455.jpg

wKioL1M2sIWBH5tsAASf5kOsNMA537.jpg

  在子域DNS上解析主DNS上的主机名

wKioL1M2sVOD7ub4AAEKno_tzxc923.jpg

   我们没有解析成功,.......这不是我们的实验没有成功,因为我们是实验环境,子域DNS如果解析不了默认会出去找根去,而我们的域名只是实验,并没有在互联网上注册,所以不会解析成功。那么怎么能让解析实现呢?接着就是我们要说的下一话题,

    转发区域的设置

    有两种转发机制:1:只转发某一区域,我们只需要在子域的主配置文件保存转发区域文件,如下图所示

  #vim /etc/named.rfc1912.zones

wKiom1M2yq_ScizLAAE2mMPNx3A060.jpg

  我们在去验证上次解析失败的操作:

wKioL1M2yxLABRkwAAIEEpb1y50171.jpg

   2:另一种区域转发是在主配置文件/etc/named.conf中做设置的。当然我们得把定义的区域文件先注释掉。

wKiom1M2zezRkOvWAAJG2KsQXEA100.jpg

 #service named reload

 #dig -t A www.aperson.com @172.16.24.31

wKioL1M2zpbQx_gJAAIFxuOhjAk858.jpg

       同样可以解析成功!!!

        这里说明一下:在转发的时候

wKioL1M2zuqy0BUDAACDAv2Wlgo915.jpg

  下面的这个key配置要注释掉,否则影响转发。

  这两个转发的区别:options的转发是全部转发,只要不是本区域负责的就全部转发。定义区域文件的转发只是要找person.com的才会转发。

   OK DNS的相关知识就到这里。简单跟大家分享,不足之处多多,请不吝赐教。