DNS(Domain Name Server)域名服务器

1、域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)

2、域名的命名方式:    

        FQDN(Fully Qualified Domain Name)完全合格域名/全称域名,是指主机名加上全路径。全域名可以从逻辑上准确地表示主机在什么地方,也可以说全域名是主机名的一种完全表示形式。从全域名中包含的信息可以看出主机在域名树中的位置。

3、DNS分类:

    主

    从

    转发

4、DNS的结构:(如图)wKioL1MACECi_D0bAAGgQtGmNdk897.jpg

    (1)根域名服务器(root-servers.org):是互联网域名解析系统(DNS)中最高级额域名服务器,全球共13台主要服务器。目前的分布是:主服务器(A)美国1个,设置在弗吉尼亚州的杜勒斯;辅助服务器(B至M)美国9个,瑞典、荷兰、日本各一个。

5、DNS查询方式:

    (1)递归查询

    一般客户机向服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到后转交给客户机。

    主机向本地域名服务器的查询采用递归查询:

主机向本地域名服务器的查询一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文

    (2)迭代查询(反复查询):

    一般DNS服务器之间属迭代查询,如:若DNS2不能相应DNS1的请求,则它会将DNS3的IP给DNS2,以便再向DNS3发出请求

    本地域名服务器向根域名服务器的查询通常采用迭代查询:

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

查询过程如图:

wKioL1MADZnwoTQ0AARo2Bn5jb0469.jpg

以上,为DNS简单理论知识,

下面就开始具体实施

操作系统:redhat5.5

1,装包

    DNS 软件

            bind(Berkeley Internet Name Domain)

    # yum install bind bind-chroot caching-nameserver(样例文件)

    *(注意标注为“*”)

    *如果你只安装bind,那么/var/named 将成为bind存放数据文件的位置,/etc/named.conf 将成为你的配置文件

    *如果你安装了bind-chroot,那么/var/named/chroot/var/named 将成为bind存放数据文件的位置,/var/named/chroot/etc/named.conf 将成为你的配置文件。

    DNS服务器使用的服务端口是:

        tcp    53    //用户主域和辅助域的同步

        udp    53   //用于域名查询

2,配置

    # cd /var/named/chroot/etc/     (配置文件目录)

    # cp -p named.caching-nameserver.conf named.conf    (复制样例文件)

    # vim named.conf     (手动编写主配置文件)

 

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

options {

directory"/var/named";

}

                // /--> /var/named/chroot 

                //保存区域配置文件

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

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

注意权限,保证“named“用户能读这个文件

# ls

localtime    named.caching-nameserver.confnamed.conf    named.rfc1912.zones    rndc.key

1.正向解析

 

# vim named.rfc1912.zones

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

    zone "google.com" IN {

            type master;

            file "google.com.zone";

    };

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

# pwd

/var/named/chroot/var/named

# ls

data    localhost.zone    named.ca    named.local    slaves

localdomain.zone    named.broadcast    named.ip6.local    named.zero

# cp -p localhost.zone google.com.zone

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

$TTL        86400

@            IN SOA    dns.google.com.        root.mail.google.com. (

                                42        ; serial (d. adams)

                                3H        ; refresh

                                15M       ; retry

                                1W        ; expiry

                                1D )      ; minimum

 

            IN NS            dns.google.com.

dns         IN A             192.168.0.153

www         IN A             192.168.0.153

mail        IN A             192.168.0.153

* 区域配置文件也要要求named用户能读。

 

$TTL        86400            数据缓存时间,单位是秒,当有外部DNS服务器对你的DNS的这个区域进行查询时,这个记录会放置在对方DNS服务器内几秒钟

@                                    在主配置文件里定义的区名“google.com”

IN                                     internet

SOA                                start of Authority其实授权记录,表示区域数据的开始

dns.google.com.            MasterDNS服务器主机名,表示这个区域主要由哪个DNS作为master的意思,注意后面的小数点

root.mail.google.com     错误邮件的接收者,本来应该是root@mail.google.com,不过因为@已经被作为特殊代码(zone),所以就用小数点来取代了。

42                                    序列号,用于主从更新,该序列号作为slave与master更新的依据,一般利用日期来设定

3H                                    从服务器多长时间和主服务器联系一次,进行数据更新

15M                                 重试时间,如果从服务器和主服务器联系不上,多长时间重试一次

1W                                   过期时间,如果从服务器一周都没和主联系上,则命令从服务器不在连接主服务器了。

1D)                                如果得到的信息是否定的,保存多长时间(没有指定生存期的数据,可以保存在数据库中的时间,即TTL.)

NS            name server 的缩写,后面接的一定是主机名,代表:这个zone的查询请向后面这部主机要求,如果你这个zone有两部以上的DNS服务器负责时,就必须写两个NS,而NS后面接的主机名称必须要有IP的对应,这是就需要A这个标记了。

A                正向解析的标识(域名 --> IP)参数格式:[hostname] IN A [IP]

本区域配置文件未出现的标识:

(!)AAAA        ipv6

(2)PTR            反向解析的标识(IP -->域名)参数格式:[IP] IN PTR [hostname] PTR为Pointer的简写。后面主机尽量使用完整FQDN,亦即加上小数点“.”。

(3)MX:Mail Exchanger的简写,参数是:[hostname] IN MX [顺序] [主机名称]

MX 与MAIL SERVER 有关,其用途是邮件转发,MX后面的数值越小越优先,而接的主机名称必须有A记录才可以。

(4)CNAME:主机别名。参数是:[hostname] IN CNAME [主机名称]

 

*注意事项:如果有错误,用语法检查命令:

第一个检查命令:named-checkconf  //检查主配置文件

# named-checkconf /var/named/chroot/etc/named.conf

第二个检查命令:named-checkzone // 检查zone文件

# name-checkzone google.con google.com.zone

zone google.com/IN: loaded serial 42

OK

 

启动服务

# service named start (或者:#/etc/init.d/named start)

# vim /etc/resolv.conf //编辑/etc/resolv.conf,指定dns服务器

===========

nameserver 192.168.0.153

===========

# pingwww.google. com //测试命令

 

2、反向解析

正向解析配置完成,就来配置反向解析。

#vi /var/named/chroot/etc/named.rfc1912.zones

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

        type master;

        file "192.168.0.local";

};

#cd /var/named/chroot/var/named

#cp -p named.local 192.168.0.local

#vi /var/named/chroot/var/named/192.168.0.local

$TTL        86400

@           IN    SOA    dns.google.com. root.google.com.(

                                    1997022700 ; Serial

                                    28800; Refresh

                                    14400; Retry

                                    3600000; Expire

                                    86400 ); Minimum

            IN    NS       dns.google.com.

153         IN    PTR      dns.google.com.

153         IN    PTR      www.google.com.

153         IN   PTR      google.com.

#service named restart

#dig -x 192.168.0.153 //测试

 

主从同步

原理:

(1)当主服务器做好配置之后,会通知从服务器

(2)从服务器收到通知之后,查询SOA记录,查看序列号

(3)从服务器去和主服务器比对序列号,如果从的序列号比主的小,那么从就要去和主进行数据同步。因此,主服务器修改完配置文件之后,都要把序列号调大,建议使用日期格式

 AXFR 完全区域传输

 IXFR 增量区域传输

(4)从服务器向主服务器发起数据请求;主服务器收到请求之后,开始传输数据

优点:

(1)从服务器可以分担主服务器的查询请求

(2)有了从服务器之后,额可以快速的相应client的请求

(3)即使主服务器出现问题,从服务器依然可以提供查询服务

======

Master//主服务器

======

# vim named.rfc1912.zones

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

zone "google.com" IN {

        type master;

        file "google.com.zone";

 allow-transfer { 192.168.0.152; };    这句指令指定只有授权的从服务器才能从主服务上获取区域数据信息。如果想实现多个从服务器,可以在{ }里填写,用“;”结束。

};

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

======

Slave//从服务器

======

# yum install -y bind bind-chroot//安装bind

# cd /var/named/chroot/etc/

 

# vim named.conf//配置主配置文件

===========

options {

directory "/var/named/slaves";

//这个目录要保证“named”用户能写

};

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

 ==========

#vim /var/named/chroot/etc/named.rfc1912.zones

===========

zone "google.com" {

    type slave;类型是从

    file "google.com.slave";文件名任意

    masters { 192.168.0.153; };指定哪台机器是我的master

};

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

#service named restart

------------------------------

在主服务器上 加上also-notify可以在主服务器上重新加载配置文件时做到向从服务器的“主动推”动作

注意事项:当修改/var/named/chroot/var/named/zone 文件内的参数后,需要增加序列号

zone "google.com" IN {

        type master;

        file "google.com.zone";

        allow-update { none; };

        also-notify { 192.168.0.152; };主动推

};

使用密钥进行数据传输 - - 事物签名

master        //主服务器

命令的用法:

# dnssec-keygen

Usage:

dnssec-keygen -a alg -b bits -n type [options] name

 

Version: 9.3.6-P1-RedHat-9.3.6-4.P1.el5_4.2

Required options:

    -a algorithm: RSA | RSAMD5 | DH | DSA | RSASHA1 | HMAC-MD5

    -b key size, in bits:

    RSAMD5:[512..4096]

    RSASHA1:[512..4096]

    DH:[128..4096]

    DSA:[512..1024] and divisible by 64

    HMAC-MD5:[1..512]

    -n nametype: ZONE | HOST | ENTITY | USER | OTHER

    name: owner of the key

 

[root@t1 etc]# dnssec-keygen -a hmac-md5 -b 128 -n host 3key

K3key.+157+62471

[root@t1 etc]# ls

K3key.+157+62471.key

K3key.+157+62471.private

 

[root@t1 etc]# cat K3key.+157+62471.key 

3key. IN KEY 512 3 157 reyVufo4DOsiKSLUZ173RA==

 

要:reyVufo4DOsiKSLUZ173RA==

 

# vim /var/named/chroot/etc/named.conf 

添加

key 3key {

algorithm hmac-md5;

secret "reyVufo4DOsiKSLUZ173RA==";

};

 

#vim /var/named/chroot/etc/named.rfc1912.zones

zone "google.com" IN {

type master;

file "google.com.zone";

allow-transfer { key 3key; };

};

 

Slave //从服务器

# vim /var/named/chroot/etc/named.conf 

添加

key 3key {

algorithm hmac-md5;

secret "reyVufo4DOsiKSLUZ173RA==";

};

 

#vim /var/named/chroot/etc/named.rfc1912.zones

zone "google.com" {

type slave;类型是从

file "google.com.slave";

masters { 192.168.0.153 key 3key ; };

};

 

 

主 从 启动服务

在主上面看日志:

[root@t1 etc]# tail -0f /var/log/messages