在互联网中使用IP地址唯一的标识一台计算机,IP地址有两个版本,IPV4和IPV6,IPV4地址由32位二进制组成的,采用的是点分10进制表示的,分为4个字段,每个字段的范围都是0-255.但是这种表示方法对于我们来说记忆起来不是很方便,我们在浏览一个网站的时候,输入的并不是IP地址,而是URL,系统会通过一个称为名称解析系统将IP地址和主机名做一个映射,这个名称解析系统有多种类型,如WINS、HOSTS文件以及这里所要讲的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 ~]#
DNS(Domain Name System)域名系统,DNS将巨大的信息按照层次划分成多个较小的部分,将每部分存储在不同的服务器上面,形成层次性、分布式的特点。DNS的层次结构包括根域、顶级域、二级域以及主机名。每一个区域都是DNS域名空间的一部分,维护着该域名空间的数据记录,每一层作为一个域,域与域之间用点(”.”)隔开。
根域:目前全球共有13台根域名服务器负责维护根域。
顶级域:常见的顶级域如下:
com:商业部门
gov:政府部门
org:非营利性组织
net:网络服务机构
edu:教育部门
mil:军事部门
cn:中国
二级域:用于给公司和个人注册的。如redhat.com就是一个基于com顶级域的二级域名,在该二级域下还可以包含子域,如xx.redhat.com,xx就是redhat.com的子域。
主机名:主机名位于域名空间的最底层,将主机名和DNS后缀的组合称为FQDN(完全合格域名),FQDN以点结尾。如www.redhat.com. 其中www为主机名,redhat.com为DNS后缀。redhat为二级域,com为顶级域,最后的一个点为根域。
DNS查询过程是指通过DNS服务器将一个FQDN解析为IP地址或者是将IP地址解析为FQDN或者是查询一个区域邮件服务器的过程。
正向查找:将FQDN解析为IP地址
反向查找:将IP地址解析为FQDN
查询方式:
1. 递归查询:发生在DNS客户端和DNS服务器之间。当DNS服务器收到DNS客户端的一个查询请求时,要么做出查询成功的响应,要么做出查询失败的响应。
2. 迭代查询:发生在DNS服务器和DNS服务器之间。DNS服务器根据自己的缓存文件或者是区域数据,以最佳结果响应。如果DNS服务器无法进行解析,则会向根DNS服务器发出查询请求,请求顶级域DNS服务器的地址,然后在一级级的查找,知道查询超时或查询结果不存在为止。
DNS查询过程示例:
1. 客户端访问www.redhat.com,将该查询请求提交给本地的DNS服务器(递归查询)。
2. 本地DNS服务器查询区域数据,发现本地DNS服务器并不是redhat.com的授权DNS服务器,因此会将查询请求发送到根DNS服务器,请求解析www.redhat.com的IP地址。根DNS服务器也不知道www.redhat.com的IP地址,但是知道维护com域的DNS服务器地址,因此将com域的DNS服务器的IP地址返回给本地DNS服务器(迭代查询)。
3. 本地DNS服务器将查询请求发送给维护com域的DNS服务器,请求查询www.redhat.com的IP地址,而com域的DNS服务器也不知道www.redhat.com这台主机的IP地址,但是知道维护redhat.com的DNS服务器的IP地址,因此将redhat.com的DNS服务器的IP地址返回给本地的DNS服务器(迭代查询)。
4. 本地DNS服务器将查询请求发送给维护redhat.com的DNS服务器,请求查询www.redhat.com的主机名所对应的IP地址,该DNS服务器是redhat.com的授权服务器,具有www.redhat.com的记录,因此将该主机名所对应的IP地址返回给本地DNS服务器。
5. 本地DNS服务器将查询结果发送给DNS客户端。
授权服务器:DNS服务器维护着一个区域的信息,这个服务器就称为该区域的授权服务器,授权服务器所做出的应答是权威的。
DNS服务器在提供名称解析时,会查询自己的数据库,在该数据库中包含了DNS区域资源信息的资源记录(resource record,RR)。常见的资源记录如下:
1. SOA(Start of AuthorityRecord起始授权记录):在一个区域中是唯一的,定义了一个区域的全局参数,进行整个区域的管理。
2. NS(Name Server名称服务器):在一个区域中至少有一条,记录了一个区域中的授权服务器。
3. A(Address 地址记录):记录了FQDN和IP地址的对应关系。
4. CNAME(Canonical Name别名记录):别名记录。可以隐藏内部网络的细节。
5. PTR:反向记录,将IP地址映射到FQDN。
6.MX(Mail eXchange):邮件交换记录。指向一个邮件服务器,根据收件人的地址后缀决定邮件服务器。
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查找。
在Linux系统中提供DNS服务的软件是Bind,也是最常用的软件,几乎90%的DNS服务器都是采用BIND。
DNS服务器采用的端口是UDP 53端口和TCP 53端口。
UDP 53端口:用于名称解析。
TCP 53端口:用户区域传输。
因此在配置防火墙时要同时放行TCP和UDP的53端口。
与bind服务有关的软件包如下:
1. bind:bind服务器端软件
2. bind-chroot:为bind提供chroot功能的软件包,将bind进程限制在自己的家目录下,可以防止bind被攻击后由于错误的权限设置导致影响整个系统。
可以直接使用进行安装所有和bind相关的所有软件。
安装:yum install �Cybind-*
查询是否正确安装:
[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 ~]#
全局配置文件:named.conf
如果没有使用chroot机制的话,则全局配置文件位于/etc/named.conf,如果使用了chroot机制的话,则全局配置文件位于/var/named/chroot/etc/named.conf。有没有使用chroot,对于bind的配置都是一样的,唯一的不同就是配置文件所在的路径不同了。
如果启用了chroot机制的话,且不希望bind的根目录为/var/named/chroot的话,则可以通过修改配置文件/etc/sysconfig/named中ROOTDIR来实现。
[root@server ~]#cat /etc/sysconfig/named | grep ROOTDIR
ROOTDIR=/var/named/chroot
[root@server ~]#
服务的启动、停止等:
/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.200和172.17.100.210这两个客户端提交的DNS查询请求。
allow-recursion:允许哪些客户端提交递归查询。与allow-query不同的是,不执行客户端提交的迭代查询。allow-query允许迭代查询和递归查询。
forwarders:指定转发服务器。如果定义了多个转发服务器,则依次进行尝试,知道获得查询信息为止。本地的DNS服务器会将查询请求转发到转发服务器。如果该项目设置在区域定义之外的话,是对所有非本地区域的解析都转发到指定的DNS服务器;如果定义在某个区域内,则是将对该区域的解析转发到指定服务器
forward only|first:only表示只将查询请求转发到所定义的转发服务器,不通过本机查询。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.x;x.x.x.x如,172.17.100.100;172.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
资源记录类型:常用的有SOA、NS、A、PTR、MX、CNAME
在定义资源记录时,一般情况下是SOA记录为第一行,NS记录第二行,其他的记录可以随便写。
;:表示注释
():允许数据跨行。通常用于SOA记录
@:表示当前域。根据主配置文件zone中所定义的区域名称。
*:用于名称字段的通配符。
SOA资源记录定义方法:
区域名称网络类型 SOA 主域名服务器的FQDN 管理员邮箱(
序列号;Serial
刷新间隔;refresh
重试间隔;retry
过期时间;expire
TTL)
说明如下:
主域名服务器的FQDN:区域中的master DNS服务器的FQDN,如ns1.frame.com.
管理员邮箱:用.代替@,如admin.frame.com
序列号:用于区域复制的依据。slave根据这个序列号来判断master的区域配置文件有没有发生变化。常用形式是YYYYMMDDCC,YYYY表示年,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
全局配置文件: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.zones和named.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 �Cf /va/log/messages查看启动信息,如果出现错误,可以知道错误原因。
8.测试:
客户端地址为:172.17.100.100
测试ok……
通过配置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;};
TGIG(transaction signature):事务签名。使用MD5加密的方式验证DNSmaster和slave之间数据传输的信息。
首先需要在master DNS服务器上生成加密密钥,然后将此密钥传递到辅助的DNS服务器上,经过配置以后,由slave DNS服务器以加密的方式将数据传输请求发送到master DNS服务器上。同时还可以提供DDNS的加密。TSIG主要用于确保slave DNS服务器所获取的信息是来自于真正的master DNS服务器,而不是来自于虚假的DNS服务器。
配置过程:
1.master DNS配置步骤
A. 使用dnssec-keygen为TSIG创建密钥。
常用的如下:
-a:指定所使用的加密算法。
-b:指定密钥长度。
-n:nametype,指定密钥的所有者类型。
用法概要
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 中定义的那样。它还可以生成与 TSIG(Transaction Signature,事务签名)一起使用的密钥,如 RFC 2845 中定义的那样。
选项
支持以下选项:
-a algorithm
选择加密算法。algorithm 的值必须是 RSAMD5 (RSA) 或 RSASHA1 之一、DSA、NSEC3RSASHA1、NSEC3DSA、DH (Diffie-Hellman) 或 HMAC-MD5。这些值不区分大小写。
对于 DNSSEC,RSASHA1 是强制实现的算法;DSA 是建议的算法。对于 TSIG,HMAC-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 记录的标志字段中设置指定的标志。唯一识别的标志是 KSK(Key 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 必须是 AUTHCONF、NOAUTHCONF、NOAUTH 或 NOCONF 之一。缺省值是 AUTHCONF。AUTH 指的是验证数据的能力,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)
使用DNS为客户端提供名称解析的前提条件是区域数据文件中存在相应的A记录或PTR记录,如果客户端的数量比较多,或者是客户端的IP地址是通过DHCP获取的,IP地址不固定,则无法在DNS的区域数据文件中指定A记录或PTR记录,这时可以使用DDNS。
DDNS:动态DNS,需要DNS与DHCP的配置使用。
配置步骤如下:
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 �CR 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.
>
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,也可以是none和static
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]#