1. DNS概述

在互联网中使用IP地址唯一的标识一台计算机,IP地址有两个版本,IPV4IPV6IPV4地址由32位二进制组成的,采用的是点分10进制表示的,分为4个字段,每个字段的范围都是0-255.但是这种表示方法对于我们来说记忆起来不是很方便,我们在浏览一个网站的时候,输入的并不是IP地址,而是URL,系统会通过一个称为名称解析系统将IP地址和主机名做一个映射,这个名称解析系统有多种类型,如WINSHOSTS文件以及这里所要讲的DNS

在早期的TCP/IP网络中,名称解析工作是通过HOSTS文件来进行维护的,hosts文件是一个纯文本文件,维护着主机名和IP地址的对应关系,hosts文件的格式如下:

IP_address   canonical_hostname    [aliases...]

IP地址权威的主机名别名


[root@server ~]#cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4localhost4.localdomain4

::1         localhost localhost.localdomainlocalhost6 localhost6.localdomain6

172.17.100.254server1 zhang

[root@server ~]#

在这里,权威的主机名为server1,别名为zhang

测试:

[root@server ~]# ping server1

PING server1(172.17.100.254) 56(84) bytes of data.

64 bytes fromserver1 (172.17.100.254): icmp_seq=1 ttl=64 time=0.413 ms

64 bytes fromserver1 (172.17.100.254): icmp_seq=2 ttl=64 time=0.058 ms

^C

--- server1 pingstatistics ---

2 packetstransmitted, 2 received, 0% packet loss, time 1316ms

rttmin/avg/max/mdev = 0.058/0.235/0.413/0.178 ms

[root@server ~]# ping zhang

PING server1(172.17.100.254) 56(84) bytes of data.

64 bytes fromserver1 (172.17.100.254): icmp_seq=1 ttl=64 time=0.051 ms

64 bytes fromserver1 (172.17.100.254): icmp_seq=2 ttl=64 time=0.051 ms

^C

--- server1 ping statistics---

2 packetstransmitted, 2 received, 0% packet loss, time 1277ms

rttmin/avg/max/mdev = 0.051/0.051/0.051/0.000 ms

[root@server ~]#


1.1 DNS层次结构

DNSDomain Name System)域名系统,DNS将巨大的信息按照层次划分成多个较小的部分,将每部分存储在不同的服务器上面,形成层次性、分布式的特点。DNS的层次结构包括根域、顶级域、二级域以及主机名。每一个区域都是DNS域名空间的一部分,维护着该域名空间的数据记录,每一层作为一个域,域与域之间用点(”.”)隔开。

wKioL1L55qHzJWDmAAGJ2171m6M752.jpg

根域:目前全球共有13台根域名服务器负责维护根域。

顶级域:常见的顶级域如下:

        com:商业部门

        gov:政府部门

        org:非营利性组织

        net:网络服务机构

        edu:教育部门

        mil:军事部门

        cn:中国

二级域:用于给公司和个人注册的。如redhat.com就是一个基于com顶级域的二级域名,在该二级域下还可以包含子域,如xx.redhat.comxx就是redhat.com的子域。

主机名:主机名位于域名空间的最底层,将主机名和DNS后缀的组合称为FQDN(完全合格域名)FQDN以点结尾。如www.redhat.com. 其中www为主机名,redhat.comDNS后缀。redhat为二级域,com为顶级域,最后的一个点为根域。

1.2 DNS查询过程

DNS查询过程是指通过DNS服务器将一个FQDN解析为IP地址或者是将IP地址解析为FQDN或者是查询一个区域邮件服务器的过程。

正向查找:将FQDN解析为IP地址

反向查找:将IP地址解析为FQDN

查询方式:

1. 递归查询:发生在DNS客户端和DNS服务器之间。当DNS服务器收到DNS客户端的一个查询请求时,要么做出查询成功的响应,要么做出查询失败的响应。

2. 迭代查询:发生在DNS服务器和DNS服务器之间。DNS服务器根据自己的缓存文件或者是区域数据,以最佳结果响应。如果DNS服务器无法进行解析,则会向根DNS服务器发出查询请求,请求顶级域DNS服务器的地址,然后在一级级的查找,知道查询超时或查询结果不存在为止。


DNS查询过程示例:

wKiom1L55ufB3mpmAAHkkLHbxko338.jpg

1. 客户端访问www.redhat.com,将该查询请求提交给本地的DNS服务器(递归查询)。

2. 本地DNS服务器查询区域数据,发现本地DNS服务器并不是redhat.com的授权DNS服务器,因此会将查询请求发送到根DNS服务器,请求解析www.redhat.comIP地址。根DNS服务器也不知道www.redhat.comIP地址,但是知道维护com域的DNS服务器地址,因此将com域的DNS服务器的IP地址返回给本地DNS服务器(迭代查询)。

3. 本地DNS服务器将查询请求发送给维护com域的DNS服务器,请求查询www.redhat.comIP地址,而com域的DNS服务器也不知道www.redhat.com这台主机的IP地址,但是知道维护redhat.comDNS服务器的IP地址,因此将redhat.comDNS服务器的IP地址返回给本地的DNS服务器(迭代查询)。

4. 本地DNS服务器将查询请求发送给维护redhat.comDNS服务器,请求查询www.redhat.com的主机名所对应的IP地址,该DNS服务器是redhat.com的授权服务器,具有www.redhat.com的记录,因此将该主机名所对应的IP地址返回给本地DNS服务器。

5. 本地DNS服务器将查询结果发送给DNS客户端。


授权服务器:DNS服务器维护着一个区域的信息,这个服务器就称为该区域的授权服务器,授权服务器所做出的应答是权威的。

1.3 DNS资源记录类型

DNS服务器在提供名称解析时,会查询自己的数据库,在该数据库中包含了DNS区域资源信息的资源记录(resource recordRR)。常见的资源记录如下:

1. SOAStart of AuthorityRecord起始授权记录):在一个区域中是唯一的,定义了一个区域的全局参数,进行整个区域的管理。

2. NSName Server名称服务器):在一个区域中至少有一条,记录了一个区域中的授权服务器。

3. AAddress 地址记录):记录了FQDNIP地址的对应关系。

4. CNAMECanonical Name别名记录):别名记录。可以隐藏内部网络的细节。

5. PTR:反向记录,将IP地址映射到FQDN

6.MX(Mail eXchange):邮件交换记录。指向一个邮件服务器,根据收件人的地址后缀决定邮件服务器。

1.4 名称解析顺序

Linux平台的名称解析顺序有/etc/nsswitch.conf配置文件决定的。

[root@server ~]#cat /etc/nsswitch.conf | grep hosts

#hosts:     db files nisplus nis dns

hosts:     files dns

[root@server ~]#

files表示先查找/etc/hosts文件,dns表示如果通过hosts文件查找不到,则通过DNS查找。

2. Bind

2.1 Bind概述

Linux系统中提供DNS服务的软件是Bind,也是最常用的软件,几乎90%DNS服务器都是采用BIND

DNS服务器采用的端口是UDP 53端口和TCP 53端口。

UDP 53端口:用于名称解析。

TCP 53端口:用户区域传输。

因此在配置防火墙时要同时放行TCPUDP53端口。

2.2 Bind安装

bind服务有关的软件包如下:

1. bindbind服务器端软件

2. bind-chroot:为bind提供chroot功能的软件包,将bind进程限制在自己的家目录下,可以防止bind被***后由于错误的权限设置导致影响整个系统。

可以直接使用进行安装所有和bind相关的所有软件。

安装:yum install –ybind-*

查询是否正确安装:

[root@server ~]#rpm -qa | grep ^bind

bind-9.8.2-0.10.rc1.el6.x86_64

bind-utils-9.8.2-0.10.rc1.el6.x86_64

bind-chroot-9.8.2-0.10.rc1.el6.x86_64

bind-dyndb-ldap-1.1.0-0.9.b1.el6.x86_64

bind-libs-9.8.2-0.10.rc1.el6.x86_64

[root@server ~]#


2.3 Bind配置

全局配置文件:named.conf

如果没有使用chroot机制的话,则全局配置文件位于/etc/named.conf,如果使用了chroot机制的话,则全局配置文件位于/var/named/chroot/etc/named.conf。有没有使用chroot,对于bind的配置都是一样的,唯一的不同就是配置文件所在的路径不同了。

如果启用了chroot机制的话,且不希望bind的根目录为/var/named/chroot的话,则可以通过修改配置文件/etc/sysconfig/namedROOTDIR来实现。

[root@server ~]#cat /etc/sysconfig/named  | grep ROOTDIR

ROOTDIR=/var/named/chroot

[root@server ~]#

2.3.1 常规配置

服务的启动、停止等:

/etc/init.d/namedstart|restart|stop|status|reload

设置开机自动启动:

[root@server ~]#chkconfig named --level 35 on

[root@server ~]#

配置文件的结构:

全局配置文件:named.conf

主配置文件:以zone开始的配置文件

区域配置文件:各种资源记录类型

bind启动时,首先读取的是全局配置文件named.conf,在全局配置文件里面会指定主配置文件所在的位置,通过去读主配置文件里所定义的区域配置文件所在的位置,最后读取区域配置文件中的DNS记录。


全局配置文件中的参数:

options块,指定bind服务器的相关参数,常用的如下:

listen-on port:指定bind服务器监听的地址和端口。如linsten-onport 53 { 172.17.100.254; };

如果没有定义这个参数,则表示监听本机所有的IP地址收到的DNS请求。

listen-on-v6 port:和listen-onport的作用一样,用于IPv6

directory:指定区域配置文件所在的路径。默认为/var/named,如果使用了chroot,则该路径为相对路径,为/var/named/chroot/var/named

query-source port:指定DNS客户端在提交查询时必须使用的源端口。

allow-query:允许哪些客户端提交的DNS查询请求,如果没有定义此选项,则表示允许所有的客户端提交的DNS查询请求。如:allow-query { 172.17.100.200; 172.17.100.210; };则允许172.17.100.200172.17.100.210这两个客户端提交的DNS查询请求。

allow-recursion:允许哪些客户端提交递归查询。与allow-query不同的是,不执行客户端提交的迭代查询。allow-query允许迭代查询和递归查询。

forwarders:指定转发服务器。如果定义了多个转发服务器,则依次进行尝试,知道获得查询信息为止。本地的DNS服务器会将查询请求转发到转发服务器。如果该项目设置在区域定义之外的话,是对所有非本地区域的解析都转发到指定的DNS服务器;如果定义在某个区域内,则是将对该区域的解析转发到指定服务器

forward only|firstonly表示只将查询请求转发到所定义的转发服务器,不通过本机查询。first表示先将查询转发到所定义的转发服务器,如果没有响应,则通过本机进行迭代查询。默认为first

allow-transfer:允许哪些slaveDNS服务器进行区域传输。

recursion:选项指定是否允许客户端递归查询其他域名服务器。如果希望对本地客户端的查询允许递归,但对来自外部的查询请求禁止递归,可以通过“allow-recursion”选项进行定义。allow-recursion选项可以指定一个允许执行递归查询操作的地址列表。

transfer-source x.x.x.x:指定slave在向master进行区域传输时所使用的源地址。

view块,常用的参数:

match-clients:允许哪些客户端提交的DNS查询请求。

match-destinations:客户端要去往的目的地。如any

match-recursive-only:是否允许递归。yes|no

include:把哪些文件也读进来。可以指定主配置文件。

在主配置文件中,可以定义多个view,如果DNS客户端所提交的查询满足第一个view,就使用第一个view进行处理,如果不满足,则查询是否满足下一个view,如果都不满足,则DNS服务器将返回query refused的消息。

可以使用view来实现智能DNS。根据用户的IP地址的不同,返回不同的结果。

view的格式:

view view-name {


};

IP地址的格式可以是如下的几种形式:

单一主机:x.x.x.x,如172.17.100.100

指定网段:x.x.x.x.x.x.x/n,如172.17.100.或者是172.17.100.0/24

指定多个地址:x.x.x.xx.x.x.x如,172.17.100.100172.17.100.200

使用!表示否定:如!172.17.100.100,则排除172.17.100.100

不匹配任何:none

匹配所有:any

本地主机(bind本机):localhost

bind主机同网段的所有IP地址:localnet


ACL的格式:

acl  acl_name  {

   address_math_list ;

};

acl即访问控制列表,定义了一个地址匹配列表


key语句格式:

key  key-id  {

algorithm string;

secret string;

};

key语句定义了用于服务器身份验证的加密密钥。


include语句格式:

include语句用于加载根区域。当DNS服务器处理递归查询时,如果本地区域文件不能对查询进行解析,就会转到根DNS服务器进行查询,所以在主配置文件named.conf中需要指定根区域,而且每一个view都必须包含根区域。

如:include “/etc/named.ca”

zone语句格式:

zone语句是named.conf文件的核心部分,用于在域名系统中设置所使用的区域(分为正向解析区域和反向解析区域),并为每个区域设置适当的选项。zone语名的格式如下:

正向解析区域:

zone  domain_name IN  {

    type  master;   ----- 表示区域的类型为主服务器;

    file  path;   ----- 设置此区域的区域文件路径和文件名;

};

反向解析区域:

zone “x.x.x.in-addr.arpa”IN {

        type master;

        file “path”

};

其中“file”用于指定与所定义区域相关的区域配置文件,“type”用于指定区域的类型。

Bind可以使用的区域类型及其说明如下:

master:主DNS区域。拥有该区域的区域数据文件,对该区域提供管理。

slave:从DNS区域。拥有master区域的区域数据文件的只读副本,slave区域从master区域获取所有的数据,这个过程称为区域传输。

forward:转发区域。用于转发DNS客户端的查询。

stub:存根区域。和slave区域类似,但是只复制master区域的NS记录和NS记录对应的A记录。

hint:根区域。用于查找根DNS服务器的位置。


区域配置文件:

格式如下:

[名称]  [TTL]  [网络类型]   资源记录类型数据

名称:指定资源记录引用的对象名,可以是主机名,也可以是域名。对象名可以是相对名称也可以使完整名称。完整名称必须以点结尾。如果连续的几条资源记录类型是同一个对象名,则第一条资源记录后的资源记录可以省略对象名。相对名称表示相对与当前域名来说的,如当前域名为frame.com,则表示www主机时,完整名称为www.frame.com.,相对名称为www

TTL:指定资源记录存在缓存中的时间,单位为秒。如果该字段省略,则使用在文件开始出的$TTL所定义的时间。

网络类型:常用的为IN

资源记录类型:常用的有SOANSAPTRMXCNAME

在定义资源记录时,一般情况下是SOA记录为第一行,NS记录第二行,其他的记录可以随便写。

;:表示注释

():允许数据跨行。通常用于SOA记录

@:表示当前域。根据主配置文件zone中所定义的区域名称。

*:用于名称字段的通配符。


SOA资源记录定义方法:

区域名称网络类型  SOA  主域名服务器的FQDN  管理员邮箱

序列号;Serial

刷新间隔;refresh

重试间隔;retry

过期时间;expire

                                                                                                      TTL

说明如下:

主域名服务器的FQDN:区域中的master DNS服务器的FQDN,如ns1.frame.com.

管理员邮箱:用.代替@,如admin.frame.com

序列号:用于区域复制的依据。slave根据这个序列号来判断master的区域配置文件有没有发生变化。常用形式是YYYYMMDDCCYYYY表示年,MM表示月,DD表示天,CC表示当天变化的次数。

刷新间隔:slave DNS服务器请求与master DNS服务器同步的等待时间。当刷新间隔到期后,slave DNS服务器请求master DNS服务器的SOA记录的副本,然后Slave DNS服务器将master DNS服务器的序列号与本地SOA记录的序列号比对,如果不同,则slave DNS服务器请求与Master进行区域传输。

重试间隔:slave DNS服务器在请求失败后,多长时间进行重试。要短于刷新间隔。

过期时间:如果这个时间到期后,辅助DNS服务器还是无法和master DNS服务器进行区域传输,则辅助DNS服务器就会把本地数据当作不可靠数据,不会为客户端提供查询功能。


NS记录:

区域名称   IN  NS FQDN

A记录:

FQDN  IN  A  IP地址

CNAME记录:

别名   IN  CNAME  对应A记录的FQDN

MX记录:

区域名   IN   MX  优先级邮件服务器的A记录的FQDN

PTR记录:

IP地址   IN  PTR   FQDN

2.3.2 Master区域配置示例

全局配置文件:named.conf

1. 判断是否启用了chroot,以及chroot的根目录

[root@server ~]#grep ROOTDIR /etc/sysconfig/named

ROOTDIR=/var/named/chroot

[root@server ~]#

启用了chroot,根目录为/var/named/chroot

2. 复制文件

由于启用了chroot,因此将/etc目录下的所有和named有关的内容,复制到/var/named/chroot/etc/目录下。并将/var/named目录下的除了chroot目录以外的所有东西move/var/named/chroot/var/named/目录下。

[root@server ~]# cd /var/named/

[root@servernamed]# ll

total 32

drwxr-x---. 6root  named 4096 Feb 10 12:07 chroot

drwxrwx---. 2 namednamed 4096 Jun  5  2012 data

drwxrwx---. 2 namednamed 4096 Jun  5  2012 dynamic

-rw-r-----. 1root  named 1892 Feb 18  2008 named.ca

-rw-r-----. 1root  named  152 Dec 15 2009 named.empty

-rw-r-----. 1root  named  152 Jun 21 2007 named.localhost

-rw-r-----. 1root  named  168 Dec 15 2009 named.loopback

drwxrwx---. 2 namednamed 4096 Jun  5  2012 slaves

[root@servernamed]# cp -a /etc/named.

named.conf           named.iscdlv.key     named.rfc1912.zones  named.root.key      

[root@servernamed]# cp -a/etc/named.* chroot/etc/

[root@servernamed]# mv d*named.* slaves chroot/var/named/

[root@servernamed]# ll

total 4

drwxr-x---. 6 rootnamed 4096 Feb 10 12:07 chroot

[root@servernamed]#

3. 修改全局配置文件named.conf

该文件位于/var/named/chroot/etc/目录下。

[root@server etc]#cat named.conf | grep -E -v "^#|^/" | grep -v "^$"

acllocal { 172.17.100.0/24; }; // 定义一个acl,方便以后的调用

options {

listen-on port53 { 172.17.100.254; };  // 指定监听的地址和端口

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     { "local"; }; //指定允许为哪些客户端提供查询。

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;

       };

};

view"lan" {                            //定义一个view,名称为lan

       match-clients { "local"; };

       match-destinations { any; };

       recursion yes;

       include"/etc/named.lan.zones";  ///etc/named.lan.zones里面的内容也读取进来

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

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

};

view"wan" {

       match-clients { any; };

       match-destinations { any; };

       recursion no;

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

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

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


};

[root@server etc]#

4. 创建用于存放zone信息的文件

[root@server etc]#touch named.lan.zones named.wan.zones

[root@server etc]#chmod 640 named.lan.zones named.wan.zones

[root@server etc]#chown root:named named.lan.zones named.wan.zones

[root@server etc]#ll named.lan.zones named.wan.zones

-rw-r-----. 1 rootnamed 0 Feb 10 16:25 named.lan.zones

-rw-r-----. 1 rootnamed 0 Feb 10 16:25 named.wan.zones

[root@server etc]#

5. 修改named.lan.zonesnamed.wan.zones文件

[root@server etc]#cat named.lan.zones

zone "."IN {

       type hint;

       file "named.ca";

};

//定义根区域,用于执行递归查询。

zone"frame.com" IN {

       type master;

       file "named.lan.frame.com";

};

//定义正向查询区域

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

       type master;

       file "named.lan.172.17.100";

};

//定义正向查询区域

[root@server etc]#


[root@server etc]#cat named.wan.zones

zone"frame.com" IN {

       type master;

       file "named.wan.frame.com";

};

//由于view wan不提供递归查询,因此这里不配置根区域和反向解析区域。

[root@server etc]#


6. 配置区域数据文件

路径:/var/named/chroot/var/named/目录下。

创建所需文件:

[root@servernamed]# touch named.lan.frame.com

[root@servernamed]# touch named.lan.172.17.100

[root@servernamed]# touch named.wan.frame.com

[root@servernamed]# chmod 640 named.lan.* named.wan.frame.com

[root@servernamed]# chown root:named named.lan.* named.wan.frame.com

编辑上述文件:

[root@servernamed]# cat named.lan.frame.com

$TTL 3600

@       IN     SOA     ns1.frame.com.  admin.frame.com (

                                              2014021001;Serial

                                              3H  ;Refresh

                                              15M ;Retry

                                              7D  ;Expire

                                               1H) ;TTL

       IN     NS      ns1.frame.com.

       IN     NS      ns2.frame.com.

ns1     IN     A       172.17.100.254

ns2     IN     A       172.17.100.253

ntp     IN     CNAME   ns1.frame.com.

ftp     IN     A       172.17.100.254

[root@servernamed]#


[root@servernamed]# cat named.lan.172.17.100

$TTL    3600

@       IN     SOA     ns1.frame.com.  admin.frame.com (

                                              2014021001;Serial

                                              3H ;Refresh

                                              15M ;Retry

                                              7D ;Expire

                                              1D ) ;TTL

       IN     NS      ns1.frame.com.

       IN     NS      ns2.frame.com.

253     IN     PTR     ns1.frame.com.

254     IN     PTR     ns2.frame.com.

254     IN     PTR     ntp.frame.com.

254     IN     PTR     ftp.frame.com.

[root@servernamed]#


[root@servernamed]# cat named.wan.frame.com

$TTL    3600

@       IN     SOA     ns1.frame.com.  admin.frame.com (

                                              2014021001

                                              3H

                                              15M

                                              7D

                                              1D )

       IN     NS      ns1.frame.com.

       IN     NS      ns2.frame.com.

ns1     IN     A       100.100.100.100

ns2     IN     A       100.100.100.101

ftp     IN     A       100.100.100.102

[root@servernamed]#

在区域配置文件时,在名称类型里,还可以用@*@的含义表示当前域名,当输入域名时也可以正确解析。*表示的是泛域名解析,任何以当前域名结尾的都可以解析为指定的地址。


7.启动服务:

/etc/init.d/named restart

[root@server etc]#/etc/init.d/named restart

Stopping named: .[  OK  ]

Starting named:[  OK ]

[root@server etc]#

在启动服务的时候可以在打开一个窗口,使用tail –f /va/log/messages查看启动信息,如果出现错误,可以知道错误原因。

8.测试:
客户端地址为:172.17.100.100

wKioL1L55vfhUbEpAAI_IHHlgUk510.jpg

测试ok……

2.3.3 Slave区域的配置示例

通过配置slave DNS可以降低master DNS的工作负载,同时提供一段时间的冗余。

slave DNS也需要安装bind软件,安装方法和master的安装方法一样。由于slaveDNS所有的区域数据都是从Master同步过来的,因此slave DNS不需要配置区域数据了,但是named.conf以及zone还是需要配置的。

master DNS服务器需要增加如下信息:

allow-transfer {slave-dns-ip; };

这条指令可以放在options下面,表示所有的区域数据slave DNS都可以进行同步,也可以放在zone下面,表示只同步指定区域的数据。

如:allow-transfer { 172.17.100.253; };


slave DNS服务器需要增加如下信息:

masters {master-dns-ip; };

如:masters {172.17.100.254;};

2.3.4 TSIG的配置

TGIG(transaction  signature):事务签名。使用MD5加密的方式验证DNSmasterslave之间数据传输的信息。

首先需要在master DNS服务器上生成加密密钥,然后将此密钥传递到辅助的DNS服务器上,经过配置以后,由slave DNS服务器以加密的方式将数据传输请求发送到master DNS服务器上。同时还可以提供DDNS的加密。TSIG主要用于确保slave DNS服务器所获取的信息是来自于真正的master DNS服务器,而不是来自于虚假的DNS服务器。

配置过程:

1.master DNS配置步骤

A. 使用dnssec-keygenTSIG创建密钥。

常用的如下:

  -a:指定所使用的加密算法。

  -b:指定密钥长度。

  -nnametype,指定密钥的所有者类型。

用法概要

dnssec-keygen -a algorithm -b keysize-n nametype [-ehk]

   [-c class] [-f flag] [-g generator] [-p protocol]

   [-r randomdev] [-s strength] [-t type] [-v level]name

描述

dnssec-keygen 实用程序为 DNSSEC(安全 DNS)生成密钥,如 RFC2535 RFC 4034 中定义的那样。它还可以生成与 TSIGTransaction Signature,事务签名)一起使用的密钥,如 RFC 2845 中定义的那样。

选项

支持以下选项:

-a algorithm

选择加密算法。algorithm 的值必须是 RSAMD5 (RSA) RSASHA1 之一、DSANSEC3RSASHA1NSEC3DSADH (Diffie-Hellman) HMAC-MD5。这些值不区分大小写。

对于 DNSSECRSASHA1 是强制实现的算法;DSA 是建议的算法。对于 TSIGHMAC-MD5 是强制算法。

-b keysize

指定密钥中的位数。密钥大小的选择取决于使用的算法。RSAMD5 RSASHA1 密钥必须在 512 2048 位之间。Diffie-Hellman 密钥必须在 128 4096 位之间。DSA 密钥必须在 512 1024 位之间,并且必须是 64 的整数倍。HMAC-MD5 密钥必须在 1 位和 512 位之间。

-c class

表明包含密钥的 DNS 记录应该具有指定类。如果没有指定,将使用类 IN

-e

如果生成 RSAMD5 RSASHA1 密钥,则使用大指数。

-f flag

KEY/DNSKEY 记录的标志字段中设置指定的标志。唯一识别的标志是 KSKKey Signing Key,密钥签名密钥)DNSKEY

-g generator

如果生成 Diffie Hellman 密钥,则使用此generator。允许的值是 2 5。如果没有指定 generator,则将使用 RFC 2539 中的已知索数(如果可能);否则,缺省值是 2

-h

列出 dnssec-keygen 的选项和参数的简短摘要。

-k

生成 KEY 记录,而不是 DNSKEY 记录。

-n nametype

指定密钥的所有者类型。nametype的值必须是 ZONE(对于 DNSSEC 区域密钥(KEY/DNSKEY))、HOST ENTITY(对于与主机相关的密钥 (KEY))、USER(对于与用户相关的密钥 (KEY))或 OTHER (DNSKEY)。这些值不区分大小写。缺省值是 ZONE(用于生成 DNSKEY)。

-p protocol

为生成的密钥设置协议值。protocol参数是 0 255 之间的数字。缺省值是 3(DNSSEC)。在 RFC 2535 及其后续版本中列出了此参数的其他可能值。

-r randomdev

指定随机源。如果操作系统不提供 /dev/random 或等效设备,则缺省的随机源是键盘输入。randomdev指定字符设备的名称或包含要使用的随机数据的文件(而非缺省文件)。特殊值 "keyboard" 表示应该使用键盘输入。

-s strength

指定密钥的强度值。strength参数是 0 15 之间的数字,且当前尚未在DNSSEC 中定义其用途。

-t type

表明密钥的用途。type 必须是 AUTHCONFNOAUTHCONFNOAUTH NOCONF 之一。缺省值是 AUTHCONFAUTH 指的是验证数据的能力,CONF 指的是加密数据的能力。

-v level

设置调试级别。

生成的密钥

dnssec-keygen 成功完成时,会向标准输出中输出 Knnnn.+aaa+iiiii格式的字符串。这是其生成的密钥的标识字符串。

nnnn是密钥名称。

aaa是算法的数字表示。

iiiii是密钥标识符(或足迹)。

dnssec-keygen 实用程序创建两个文件,并根据列出的字符串命名这两个文件。

Knnnn.+aaa+iiiii.key 包含公钥。

Knnnn.+aaa+iiiii.private 包含私钥。

.key 文件包含 DNS KEY 记录,该记录可以直接插入到区域文件,也可以使用 $INCLUDE 语句插入。

.private 文件包含算法特定的字段。出于安全原因,此文件不具有一般读取权限。

对于对称加密算法(如 HMAC-MD5),将生成 .key .private 文件,即使公钥和私钥等效也如此。

示例

示例 1 生成 768 DSA 密钥

要为域 example.com 生成 768 DSA 密钥,则将发出以下命令:

dnssec-keygen -a DSA -b 768 -n ZONEexample.com

该命令将列出以下格式的字符串:

Kexample.com.+003+26160

将创建以下文件:

Kexample.com.+003+26160.key

Kexample.com.+003+26160.private

[root@server1 etc]#dnssec-keygen -a hmac-md5 -b 128 -n user frame

Kframe.+157+23596

[root@server1 etc]#ll K*

-rw-------. 1 rootroot  47 Feb 11 14:53Kframe.+157+23596.key

-rw-------. 1 rootroot 165 Feb 11 14:53 Kframe.+157+23596.private

[root@server1 etc]#


B. 查看生成的公钥文件的内容

[root@server1 etc]#cat Kframe.+157+23596.key

frame. IN KEY 0 3157 34WhHlWLrqWffupUVRP00g==

[root@server1 etc]#

红色部门就是密钥。

C. 修改全局配置文件named.conf

增加如下内容:

key frame {

       algorithm hmac-md5;

       secret"34WhHlWLrqWffupUVRP00g==";

};


server172.17.100.253 {

       keys { frame; };

};

server指定的是slave DNS服务器的IP地址。

D.修改allow-transfer,指定key

allow-transfer {key frame; };

表示使用frame中所定义的密钥的slave区域才能够进行区域传输。

2. Slave DNS服务器配置

A. 修改Slave DNS服务器的named.conf配置文件

增加如下内容:

key frame {

       algorithm hmac-md5;

       secret"34WhHlWLrqWffupUVRP00g==";

};


server172.17.100.254 {

       keys { frame; };

};


slave DNS服务器的server指向master DNS服务器的IP地址,master DNS服务器里面的server指向slave DNS服务器的IP地址。

3. 查看log信息

/etc/init.d/namedrestart


Log信息:

Feb 11 15:08:52server2 named[4052]: zone frame.com/IN/lan: transferred serial 2014021103: TSIG 'frame'

Feb 11 15:08:52server2 named[4052]: transfer of 'frame.com/IN/lan' from 172.17.100.254#53: Transfer completed:1 messages, 9 records, 314 bytes, 0.002 secs (157000 bytes/sec)

Feb 11 15:08:52server2 named[4052]: zone frame.com/IN/lan: sending notifies (serial2014021103)

Feb 11 15:08:52server2 named[4052]: transfer of 'frame.com/IN/wan' from 172.17.100.254#53:connected using 172.17.100.252#59411

Feb 11 15:08:52server2 named[4052]: zone frame.com/IN/wan: transferred serial2014021105: TSIG'frame'

Feb 11 15:08:52server2 named[4052]: transfer of 'frame.com/IN/wan' from 172.17.100.254#53: Transfer completed:1 messages, 7 records, 278 bytes, 0.001 secs (278000 bytes/sec)


2.3.5 DDNS配置

使用DNS为客户端提供名称解析的前提条件是区域数据文件中存在相应的A记录或PTR记录,如果客户端的数量比较多,或者是客户端的IP地址是通过DHCP获取的,IP地址不固定,则无法在DNS的区域数据文件中指定A记录或PTR记录,这时可以使用DDNS

DDNS:动态DNS,需要DNSDHCP的配置使用。

配置步骤如下:

1. DNS服务器端的配置

A.使用dnssec-keygen生成密钥。

[root@server1 etc]#dnssec-keygen -a hmac-md5 -b 128 -n user dhcp

Kdhcp.+157+46163

[root@server1 etc]#

B. 查看Kdhcp*.key里面的内容,将密钥复制到named.conf配置文件的key

key dhcp {

       alogrithm hmac-md5;

       secret"6ETH9fOCvfhmYq7bHDYdjA==";

};

C. 在区域配置文件中,增加allow-update

zone"frame.com" IN {

       type master;

allow-update { key dhcp; };

       file "named.lan.frame.com";

};


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

       type master;

allow-update { key dhcp; };

       file "named.lan.172.17.100";

};

allow-update:如果是none,则不允许DDNS更新,如果是key的方式,则表示使用key所定义的密钥作为密钥的客户端提交的DDNS请求。

D.修改/var/named/chroot/var/named目录的权限,使得named具有w权限,因为bind需要往里面写数据。

chown –R named:named /var/named/chroot/var/named

[root@server1 etc]#chown -R named:named /var/named/chroot/var/named/

[root@server1 etc]#ll -d /var/named/chroot/var/named/

drwxr-x---. 5 namednamed 4096 Feb 11 12:59 /var/named/chroot/var/named/

[root@server1 etc]#

E. 修改dhcp的配置dhcpd.conf

增加如下内容:

ddns-update-styleinterim;

ignore client-updates;


key dhcp {

       algorithm hmac-md5;

       secret"6ETH9fOCvfhmYq7bHDYdjA==";

}


zone frame.com. {

       primary 172.17.100.254;

       key dhcp;

}


zone100.17.172.in-addr.arpa. {

       primary 172.17.100.254;

       key dhcp;

}


注意:如果您不知道该如何设置SElinux,一定要记得把它关闭掉。我就在这里折腾了很长的一段时间,每次客户端获取地址的时候,就提示权限拒绝,后来才发现是selinux没有关闭,关闭后,重启系统就ok了。

测试:

会在/var/named/chroot/var/named目录下生成两个以jnl结尾的文件:

[root@server1named]# ll

total 48

drwxrwx---. 2 namednamed 4096 Feb 10 16:49 data

drwxrwx---. 2 namednamed 4096 Feb 11 16:08 dynamic

-rw-r-----. 1 namednamed 1892 Feb 18  2008 named.ca

-rw-r-----. 1 namednamed  152 Dec 15  2009 named.empty

-rw-r-----. 1 namednamed  319 Feb 11 12:55named.lan.172.17.100

-rw-r--r-- 1 named named  813 Feb 11 16:28named.lan.172.17.100.jnl

-rw-r-----. 1 namednamed  306 Feb 11 12:55named.lan.frame.com

-rw-r--r-- 1 named named  797 Feb 11 16:28named.lan.frame.com.jnl

-rw-r-----. 1 namednamed  152 Jun 21  2007 named.localhost

-rw-r-----. 1 namednamed  168 Dec 15  2009 named.loopback

-rw-r-----. 1 namednamed  227 Feb 11 12:59named.wan.frame.com

drwxrwx---. 2 namednamed 4096 Jun  5  2012 slaves

[root@server1named]#


查看name.lan.frame.com文件:

test                    A       172.17.100.100

                       TXT    "314fdf716a0eb1434a50add1da7f9e4306"

[root@server1named]#


[root@server1named]# nslookup

> test

Server:         172.17.100.254

Address:        172.17.100.254#53


Name:   test.frame.com

Address:172.17.100.100

> 172.17.100.100

Server:         172.17.100.254

Address:        172.17.100.254#53


100.100.17.172.in-addr.arpa     name = test.frame.com.

>


3.客户端配置

Linux客户端配置DNS服务器的地址可以在/etc/resolv.conf里面配置或者是在/etc/sysconfig/network-scripts/ifcfg-eth0网卡的配置文件里面配置。

/etc/resolv.conf

该文件被network manager产生的,如果在网卡的配置文件里面没有关闭network manager的话,则每次重启网卡该文件里面的配置都会丢失。切记切记……

nameserver:指定DNS服务器的地址,最多3个。

search:后面跟域名,指定搜索域。


[root@server1named]# cat /etc/resolv.conf

nameserver172.17.100.254

nameserver172.17.100.253

domain frame.com

search frame.com

[root@server1named]#


/etc/sysconfig/network-scripts/ifcfg-eth0

[root@server1 named]# cat/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"    //网卡名称

BOOTPROTO=none  //引导协议,可以是dhcp,也可以是nonestatic

NM_CONTROLLED="no"   //该网卡是否受到NetworkManager的控制,这里要设为no

ONBOOT=yes    //开机是否启动该网卡

TYPE="Ethernet"   //网卡类型

HWADDR=00:0C:29:9C:2A:A5   //网卡MAC地址

IPADDR=172.17.100.254   //网卡IP地址

PREFIX=24   //子网掩码,也可以是NETMASK=255.255.255.0的形式

GATEWAY=172.17.100.1  //网关

DEFROUTE=yes  

IPV6INIT=yes  //是否启用IPV6

PEERDNS=no  //如果该网卡为DHCP的方式,则表示是否要覆盖/etc/resolv.conf里面所配置的DNS信息。yes覆盖,no不覆盖

[root@server1named]#