DNS(Domain Name System,域名系统)。
8.2.1 DNS概述
DNS包含域名服务器和解析器两个部分。
域名服务器:存储和管理授权区域内的域名数据,提供接口供客户机检索数据;
解析器:即客户机,向域名服务器递交查询请求,翻译域名服务器返回的结果并递交给高层应用程序。
1.DNS域名空间的分层结构
Internet上的顶级域名有两种:机构域和地理域。
(1)机构域一种是将域名空间按功能分成几大类,分别表示不同的组织,称为机构域,比如:com(商业组织)、edu(教育机构)、org(政府机构)、net(网络提供者)、int(国际实体)、mil(军事机构)、org(其他组织)等。
(2)地理域另一种象cn(中国)这样的按照地理位置划分的国别代码,通常用两个字符表示,称为地理域。
图8-5 Internet域名的层次
2.域名解析过程
DNS的工作原理及过程分为下面几个步骤:
(1)客户机提出域名解析请求,并将该请求发送给本地的DNS服务器。
(2)当本地的DNS服务器收到请求后,就先查询本地的缓存,如果有该记录项,则本地的域名服务器就直接把查询的结果返回。
(3)如果本地的缓存中没有该记录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地DNS服务器一个所查询域(根的子域)的主域名服务器的IP地址。
(4)本地DNS服务器再向上一步返回的域名服务器发送请求,然后接受请求的DNS服务器查询自己的缓存,如果没有该记录,则返回相关的下级DNS服务器的IP地址。
(5)重复(4),直到找到正确的记录。
(6)本地DNS服务器把返回的结果保存到缓存,以备下一次使用,同时将结果返回给DNS客户机。
8.2.2 实例—设置DNS服务器
实例8-3 通过GUI设置DNS服务器下面介绍在桌面环境下对DNS的配置过程:
第1步:复制named.root文件
# cp /usr/share/doc/bind-9.3.3/sample/var/named/named.root /var/named/chroot/var/named/named.root
named.root文件的内容如图8-6所示。在DNS数据库中,named.root文件列出了所有根DNS服务器的地址。当一个DNS的请求不在该DNS服务器所管理的域时,DNS服务器会将该请求发送给一个根DNS服务器。
实例8-4 通过创建和修改(配置)文件来设置DNS服务器下面介绍通过编辑文件的方式对DNS服务器进行配置的过程:
第1步:复制named.root文件
# cp /usr/share/doc/bind-9.3.3/sample/var/named/named.root /var/named/chroot/var/named/named.root
named.root文件的内容如图8-6所示。
注意:
在/usr/share/doc/bind-9.3.3/sample下面有named.conf文件和正向/逆向解析区文件的范例文件,读者可以将他们分别复制到相应的目录,然后根据实际需求进行修改即可。
第2步:修改named.conf文件修改主DNS服务器的/var/named/chroot/etc/named.conf文件,内容如下:
options {
directory "/var/named"; //定义服务器区配置文件存放的目录,由于使用了chroot功能,
//区配置文件存放的实际目录是/var/named/chroot/var/named
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
};
view "internal" {
match-clients { any; };
match-destinations { any; };
recursion yes; //对内网用户开启DNS的递归查询
zone "0.168.192.in-addr.arpa." IN { //定义逆向解析区声明,in-addr.arpa是固定写法
type master; //注意:书写反向地址解析时,与通常书写的ip地址顺序相反,如:0.168.192
file "192.168.0.db"; //逆向解析区文件名,名称可以任意取
};
zone "test.edu.cn." IN { //定义正向解析区声明,如果不写IN,那么默认就是IN类
type master;
file "test.edu.cn.db"; //正向解析区文件名,名称可以任意取
};
zone "." IN { //定义根区声明
type hint; //选择type为hint("."专用)
file "named.root"; //默认文件名named.root,有时也可能是named.ca
}; //在DNS数据库中,named.root文件列出了所有根DNS服务器的地址
zone "localhost." IN { //定义localhost的正向解析区声明
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa." IN { //定义localhost的逆向解析区声明
type master;
file "named.local";
allow-update { none; };
};
//定义localhost的逆向解析区声明(IPv6)
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." IN {
type master;
file "named.ip6.local";
allow-update { none; };
};
};
include "/etc/rndc.key"; //包含/etc/rndc.key文件
下面对主配置文件named.conf的语法进行介绍。
1)配置语句
named.conf的配置语句及其功能见表8-3。
表8-3 named.conf的配置语句及其功能配置语句
功能
acl
定义IP地址的访问控制列表
controls
定义rndc命令使用的控制通道,若省略此句,则只允许经过rndc.key认证的127.0.0.1的 rndc控制
include
将其他文件包含到该配置文件中
key
定义授权的安全密钥
logging
定义日志的记录规范
options
定义全局配置选项
server
设置每个服务器的特有的选项
trusted-key
为服务器定义DNSSEC加密密钥
view
定义域名空间的一个视图
zone
定义一个区(域)
2)options语句
named.conf文件中全局配置语句的语法为:
options(
配置子句;
配置子句;
);
常用的全局配置子句及其功能见表8-4。
表8-4 全局配置子句及其功子句
功能
directory
定义服务器区配置文件的存放目录,默认为/var/named
notify yes/no
若named是主服务器,当区数据库变化时将自动通知相应区的从服务器,默认为yes
recursion yes|no
是否使用递归式DNS服务器,默认值为yes
transfer-format one-answer|many-answer
设置从主服务器向从服务器复制数据的方式,使用在主域名服务器上,是否允许在一条消息中放入多条应答信息,默认值为one-answer
forwarders {IPaddrs}
设置全局转发器,列出要用作转发器的服务器 IP 地址
forward only/first
若值为only,则服务器缓存数据并查询转发器,但从不查询其他的任何服务器,若转发器不能响应查询则查询失败;若值为first,则在转发查询失败或没有查到结果时,会在本地发起正常查询。默认为first?
3)区声明
named.conf文件中最重要的部分是区声明,zone语句的语法为:
zone,zone-name” IN(
type 子句;
file 子句;
其他子句;
);
常用的区声明子句及其功能见表8-5。
表8-5 区声明子句及其功能子句
功能
type master/slave/hint/forward
说明一个区的类型。master说明一个区为主域名服务器;slave说明一个区为辅助域名服务器;hint说明一个区为根服务器的索引;forward说明一个区为转发区
file,filename”
指定一个区的信息数据库文件名,既区文件名,区文件定义了一个区的域名信息
4)view指令在实际的网络应用中,有时希望能够根据来自不同IP地址的请求,对同一个域名解析到不同的IP地址,比如:一所高校的校园网有两个出口:教育网和公网(网通、电信等),希望来自教育网的用户通过教育网接口访问,来自公网的用户通过公网接口访问,另外,还要对校内用户提供域名解析服务。此时可以通过BIND9提供的view指令实现该功能(BIND8没有view指令),加快用户的访问速度。
view可以看成zone的集合,如果在配置文件named.conf中一个view都没有,那么所有的zone默认属于一个view。
(1)修改配置文件named.conf,主要内容如下:
acl "jiaoyuwang_ip_range"{ //创建一个访问控制列表
127.0.0.1; 211.68.0.0/16; 211.84.0.0/16;
//127.0.0.1是本机,211.68.0.0/16和211.84.0.0/16表示教育网,注意:在此仅仅是示例,
//如果实际应用,读者要获得教育网地址列表
};
acl "lan_ip_range"{
127.0.0.1; 192.168.0.0/24; 10.10.0.0/16;
//127.0.0.1是本机,211.68.0.0/16和218.68.0.0/16表示校园内网,读者要根据自己的
//网络环境获得校园网地址列表
};
view "jiaoyuwang" {
match-clients?{ "jiaoyuwang_ip_range"; }; //此视图对教育网用户提供视图内定义的DNS服务
recursion no;? //把递归关掉,这台DNS服务器忽略外来用户的非本地域名请求
zone "." IN {
type hint;
file "name.root";
};
zone "xinx.edu.cn" {
type master;?
file "jiaoyuwang/xinx.edu.cn.db"; //针对教育网用户的正向解析区文件
};
};
view "inside" {
match-clients { "lan_ip_range"; }; //此视图对内网用户提供视图内定义的DNS服务
recursion yes; //对内网用户开启DNS的递归查询
zone "." IN {
type hint;
file "name.root";
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "0.168.192.in-addr.arpa.db"; //针对内网用户的逆向解析区文件
};?
zone "xinx.edu.cn" {
type master;?
file "xinx.edu.cn.db"; //针对内网用户的正向解析区文件
};
};
view "gongwangqita" {
match-clients { any; };
//地址列表也可以用any、none、localnets和localhost。any是指任何主机,
//none不匹配任何主机,localnets是指本地网络的所有主机,localhost是指本地主机。
//将此视图放在jiaoyuwang和inside视图之后,对除了教育网用户和内网用户以外的
//所有用户提供视图内定义的DNS服务
recursion no;? //把递归关掉,这台DNS服务器忽略外来用户的非本地域名请求
zone "." IN {
type hint;
file "name.root";
};
zone "xinx.edu.cn " {
type master;
file "gongwangqita/db.caterpillar.com.outside";
//针对除了教育网用户和内网用户以外的所有用户的正向解析区文件
};
};
(2)创建文件/var/named/chroot/var/named/jiaoyuwang/xinx.edu.cn.db
jiaoyuwang/xinx.edu.cn.db正向解析区文件对教育网用户提供DNS服务,内容如下:
$TTL 1H
@ SOA dns.xinx.edu.cn. root.xinx.edu.cn,(
2 ; Serial
3H ; Refresh
1H ; Retry
1W ; Expire
1H ) ; Minimum
IN NS dns.xinx.edu.cn, ; NS(Name Server)后面的主机管理整个“xinx.edu.cn.”域
dns IN A 192.168.0.5
www IN A 211.68.58.22 ;与教育网相连的网络接口的公共IP地址
(3)创建文件/var/named/chroot/var/named/xinx.edu.cn.db
xinx.edu.cn.db正向解析区文件对内网用户提供DNS服务,内容如下:
$TTL 1H
@ SOA dns.xinx.edu.cn. root.xinx.edu.cn,(
2 ; Serial
3H ; Refresh
1H ; Retry
1W ; Expire
1H ) ; Minimum
IN NS dns.xinx.edu.cn, ; NS(Name Server)后面的主机管理整个“xinx.edu.cn.”域
IN MX 10 dns.test.edu.cn, ; MX(Mail eXchanger)指定邮件转发服务器,接收
;从Internet上来的邮件,然后再转发给相应的主机
dns IN A 192.168.0.5
www IN A 192.168.0.22 ;与内网相连的网络接口的IP地址
(4)创建文件/var/named/chroot/var/named/gongwangqita/xinx.edu.cn.db
gongwangqita/xinx.edu.cn.db正向解析区文件对除了教育网用户和内网用户以外的所有用户提供DNS服务,内容如下:
$TTL 1H
@ SOA dns.xinx.edu.cn. root.xinx.edu.cn,(
2 ; Serial
3H ; Refresh
1H ; Retry
1W ; Expire
1H ) ; Minimum
IN NS dns.xinx.edu.cn, ; NS(Name Server)后面的主机管理整个“xinx.edu.cn.”域
dns IN A 192.168.0.5
www IN A 58.32.5.78 ;与电信网相连的网络接口的公共IP地址
以上示例仅用来帮助读者理解view指令的使用。
第3步:创建正向/逆向解析区文件在主DNS服务器/var/named/chroot/var/named/目录创建正向解析区文件test.edu.cn.db,文件内容如下,正向解析文件主要由一系列A资源记录(RR,Resource Record)组成,使得DNS服务器能够将域名解析成IP地址。
$TTL 1H
@ SOA dns.test.edu.cn. root.test.edu.cn,(
2 ; Serial
3H ; Refresh
1H ; Retry
1W ; Expire
1H ) ; Minimum
IN NS dns.test.edu.cn, ; NS(Name Server)后面的主机管理整个“test.edu.cn.”域
IN MX 10 dns.test.edu.cn, ; MX(Mail eXchanger)指定邮件转发服务器,接收
;从Internet上来的邮件,然后再转发给相应的主机
dns IN A 192.168.0.5
www IN A 192.168.0.10
IN A 192.168.0.20 ; www有两个IP地址
dns2 IN CNAME dns ;指定主机别名
在主DNS服务器/var/named/chroot/var/named/目录创建逆向解析区文件192.168.0.db,文件内容如下,逆向解析文件由一系列PTR资源记录(RR,Resource Record)组成,使得DNS服务器能够将IP地址反向解析成域名。
$TTL 1H
@ SOA dns.test.edu.cn. root.test.edu.cn,(
2 ; Serial
3H ; Refresh
1H ; Retry
1W ; Expire
1H ) ; Minimum
NS dns.test.edu.cn.
5 PTR dns.test.edu.cn.
10 PTR www.test.edu.cn.
20 PTR www.test.edu.cn.
注意:
对DNS服务器的配置其实就是对named.conf文件、正向解析文件、逆向解析文件的修改。
下面对正向/逆向解析区文件的语法进行介绍。
每个区文件都是由区文件指令和若干条资源记录(RR,Resource Record)组成。
1)区文件指令在区文件中使用的区文件指令及其功能见表8-6。
表8-6 区文件指令及其功能区文件指令
功能
$INCLUDE
读取一个外部文件
$GENERATE
创建一组NS,CNAME或PTR类型的资源记录
$ORIGIN
设置管辖源
$TTL
TTL(Time To Live)跟清除cache的时间有关,单位是秒,定义向外查询的记录可以在DNS服务器的cache中保存多长时间
2)SOA记录
SOA(Start of Authority)记录表示一个授权区的开始,其格式如下:
zone(或@) [IN] SOA Hostname Contact (
Serial
Refresh
Retry
Expire
Minimum )
@表示在named.conf文件中由zone定义的区的名称,比如:zone "test.edu.cn." IN {},在test.edu.cn.db文件中的@就表示“test.edu.cn.”。
在SOA后面有两个部分:Hostname和Contact。Hostname是主机名称(dns.test.edu.cn.),Contact是管理员的电子邮箱地址,因为@在资源记录中有特殊的意义,所以用点“.”代替这个符号。root@test.edu.cn.应写为root.test.edu.cn.,注意后面的“.”。
小刮号中有五个数字,除了Minimum与TTL有关之外,其他四个的都跟主/从DNS服务器的同步有关。SOA记录中的数据字段及其功能见表8-7。
表8-7 SOA记录中的数据字段及其功能数据字段
功能
Serial
这个数字用来做为主(Master)、辅助(Slave)域名服务器之间的同步的参考数值,也就是说,当Slave的Serial小于Master的Serial时,那么Slave要根据Master的内容来更新自己的信息。每次改变信息文件时都应该使这个数加一
Refresh
Slave进行主动更新的时间间隔,Slave在试图检查Master的SOA记录之前应等待的秒数
Retry
如果到了Refresh的时间,但是Slave却无法连接到Master时,那么在多久之后,Slave会再次的主动尝试与主机联系
Expire
如果Slave一直无法与Master连接上,那么经过多久的时间之后,Slave不要再连接Master
Minimum
该字段其实就是TTL,如果没有定义TTL,那么TTL的值就以该值为准
3)标准资源记录(RR,Resource Record)
DNS标准资源记录的格式是:[domain] [ttl] [class] type rdate
各个字段之间用空格或制表符分隔,这些字段的含义见表8-8。可以包含一些特殊字符:“@”表示当前域、“()”允许数据跨行,通常用于SOA记录、“;”引出注释,“*”仅用于domain字段的通配符,domain字段说明资源记录引用的对象名,可以是一台单独的主机也可以是个域名。
表8-8 资源记录中各字段的含义字段
含义
domain
资源记录引用的域对象名。它可以是单台主机,也可以是整个域。作为domain输入的字串,除非不是以一个点结束,否则就与当前域有关系。如果该domain字段是空的,那么该记录适用于最后一个带名字的域对象
ttl
生存时间字段。以秒为单位,定义该资源记录中的信息存放在高速缓存中的时间长度。通常省略该字段,表示使用位于文件开始处的$TTL语句所指定值
class
指定网络地址类型,TCP/IP网络使用IN(Internet)
type
标识这是哪一类资源记录,常用的资源记录类型见表8-9
rdata
指定与这个资源记录有关的数据,这个值是必要的,数据字段的格式取决于类型字段的内容
表8-9 资源记录类型类型
含义
A
A(Address)记录用于将主机名(域名)转换为 IP 地址
CNAME
CNAME(Canonical NAME)是指别名记录,用于设置主机的别名
HINFO
描述主机的硬件和操作系统
KEY
KEY(Public Key)安全记录,存储了一个关于DNS名称的公钥
MX
MX(Mail eXchanger)邮件交换记录,控制邮件的路由。
格式为:zone?[ttl]?IN MX preference host,其中preference是优先级字段,数值越小优先级越高
NS
NS(Name Server)标识一个区的域名服务器以及授权子域
PTR
PTR(PoinTeR)将地址转换为主机名(域名)
SIG
SIG(Signatrue)指出带签名和身份认证的区信息,细节见RFC 2535
SOA
SOA(Start Of Authority)记录表示一个授权区定义的开始,告诉域名服务器,它后面跟着的所有资源记录是控制这个域的
SRV
SRV(Services)指出知名网络服务的信息
TXT
TXT(Text)注释或非关键的信息
在正向/逆向解析区文件中,资源记录的书写顺序是:SOA RR应该放在最前面,通常NS RR紧跟在SOA RR之后,其他记录的顺序无关紧要。
第4步:检查配置文件的语法执行named-checkconf命令,可以检查/etc/named.conf文件是否有语法错误,如果执行named-checkconf命令后没有任何输出,说明/etc/named.conf文件没有语法错误。
[root@localhost ~]# named-checkconf
none:0,open,/etc/named.conf,file not found
此时可以建立对/var/named/chroot/etc/named.conf文件的符号链接/etc/named.conf。
[root@localhost ~]# ln -s /var/named/chroot/etc/named.conf /etc/named.conf
[root@localhost ~]# ls -l /etc/named.conf
lrwxrwxrwx 1 root root 32 05-18 12:46 /etc/named.conf -> /var/named/chroot/etc/named.conf
[root@localhost ~]# named-checkconf
[root@localhost ~]#
第5步:测试修改/etc/resolv.conf文件,将nameserver行改写为nameserver 192.168.0.5。
执行#service named restart命令重启DNS服务器,或者执行#rndc reload命令,重新加载配置文件。
执行#nslookup www.test.edu.cn命令测试DNS的正向解析功能。
执行#nslookup 192.168.0.10命令测试DNS的反向解析功能。
将第2步的named.conf文件中的match-clients { any; };修改为match-clients { none; };,执行#nslookup www.test.edu.cn命令,结果如图8-22所示,读者分析这是为什么?
8.2.3 实例—设置DNS客户机在Linux系统中,需要配置两个文件:/etc/host.conf和/etc/resolv.conf。
8.2.1 DNS概述
DNS包含域名服务器和解析器两个部分。
域名服务器:存储和管理授权区域内的域名数据,提供接口供客户机检索数据;
解析器:即客户机,向域名服务器递交查询请求,翻译域名服务器返回的结果并递交给高层应用程序。
1.DNS域名空间的分层结构
Internet上的顶级域名有两种:机构域和地理域。
(1)机构域一种是将域名空间按功能分成几大类,分别表示不同的组织,称为机构域,比如:com(商业组织)、edu(教育机构)、org(政府机构)、net(网络提供者)、int(国际实体)、mil(军事机构)、org(其他组织)等。
(2)地理域另一种象cn(中国)这样的按照地理位置划分的国别代码,通常用两个字符表示,称为地理域。
图8-5 Internet域名的层次
2.域名解析过程
DNS的工作原理及过程分为下面几个步骤:
(1)客户机提出域名解析请求,并将该请求发送给本地的DNS服务器。
(2)当本地的DNS服务器收到请求后,就先查询本地的缓存,如果有该记录项,则本地的域名服务器就直接把查询的结果返回。
(3)如果本地的缓存中没有该记录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地DNS服务器一个所查询域(根的子域)的主域名服务器的IP地址。
(4)本地DNS服务器再向上一步返回的域名服务器发送请求,然后接受请求的DNS服务器查询自己的缓存,如果没有该记录,则返回相关的下级DNS服务器的IP地址。
(5)重复(4),直到找到正确的记录。
(6)本地DNS服务器把返回的结果保存到缓存,以备下一次使用,同时将结果返回给DNS客户机。
8.2.2 实例—设置DNS服务器
实例8-3 通过GUI设置DNS服务器下面介绍在桌面环境下对DNS的配置过程:
第1步:复制named.root文件
# cp /usr/share/doc/bind-9.3.3/sample/var/named/named.root /var/named/chroot/var/named/named.root
named.root文件的内容如图8-6所示。在DNS数据库中,named.root文件列出了所有根DNS服务器的地址。当一个DNS的请求不在该DNS服务器所管理的域时,DNS服务器会将该请求发送给一个根DNS服务器。
实例8-4 通过创建和修改(配置)文件来设置DNS服务器下面介绍通过编辑文件的方式对DNS服务器进行配置的过程:
第1步:复制named.root文件
# cp /usr/share/doc/bind-9.3.3/sample/var/named/named.root /var/named/chroot/var/named/named.root
named.root文件的内容如图8-6所示。
注意:
在/usr/share/doc/bind-9.3.3/sample下面有named.conf文件和正向/逆向解析区文件的范例文件,读者可以将他们分别复制到相应的目录,然后根据实际需求进行修改即可。
第2步:修改named.conf文件修改主DNS服务器的/var/named/chroot/etc/named.conf文件,内容如下:
options {
directory "/var/named"; //定义服务器区配置文件存放的目录,由于使用了chroot功能,
//区配置文件存放的实际目录是/var/named/chroot/var/named
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
};
view "internal" {
match-clients { any; };
match-destinations { any; };
recursion yes; //对内网用户开启DNS的递归查询
zone "0.168.192.in-addr.arpa." IN { //定义逆向解析区声明,in-addr.arpa是固定写法
type master; //注意:书写反向地址解析时,与通常书写的ip地址顺序相反,如:0.168.192
file "192.168.0.db"; //逆向解析区文件名,名称可以任意取
};
zone "test.edu.cn." IN { //定义正向解析区声明,如果不写IN,那么默认就是IN类
type master;
file "test.edu.cn.db"; //正向解析区文件名,名称可以任意取
};
zone "." IN { //定义根区声明
type hint; //选择type为hint("."专用)
file "named.root"; //默认文件名named.root,有时也可能是named.ca
}; //在DNS数据库中,named.root文件列出了所有根DNS服务器的地址
zone "localhost." IN { //定义localhost的正向解析区声明
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa." IN { //定义localhost的逆向解析区声明
type master;
file "named.local";
allow-update { none; };
};
//定义localhost的逆向解析区声明(IPv6)
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." IN {
type master;
file "named.ip6.local";
allow-update { none; };
};
};
include "/etc/rndc.key"; //包含/etc/rndc.key文件
下面对主配置文件named.conf的语法进行介绍。
1)配置语句
named.conf的配置语句及其功能见表8-3。
表8-3 named.conf的配置语句及其功能配置语句
功能
acl
定义IP地址的访问控制列表
controls
定义rndc命令使用的控制通道,若省略此句,则只允许经过rndc.key认证的127.0.0.1的 rndc控制
include
将其他文件包含到该配置文件中
key
定义授权的安全密钥
logging
定义日志的记录规范
options
定义全局配置选项
server
设置每个服务器的特有的选项
trusted-key
为服务器定义DNSSEC加密密钥
view
定义域名空间的一个视图
zone
定义一个区(域)
2)options语句
named.conf文件中全局配置语句的语法为:
options(
配置子句;
配置子句;
);
常用的全局配置子句及其功能见表8-4。
表8-4 全局配置子句及其功子句
功能
directory
定义服务器区配置文件的存放目录,默认为/var/named
notify yes/no
若named是主服务器,当区数据库变化时将自动通知相应区的从服务器,默认为yes
recursion yes|no
是否使用递归式DNS服务器,默认值为yes
transfer-format one-answer|many-answer
设置从主服务器向从服务器复制数据的方式,使用在主域名服务器上,是否允许在一条消息中放入多条应答信息,默认值为one-answer
forwarders {IPaddrs}
设置全局转发器,列出要用作转发器的服务器 IP 地址
forward only/first
若值为only,则服务器缓存数据并查询转发器,但从不查询其他的任何服务器,若转发器不能响应查询则查询失败;若值为first,则在转发查询失败或没有查到结果时,会在本地发起正常查询。默认为first?
3)区声明
named.conf文件中最重要的部分是区声明,zone语句的语法为:
zone,zone-name” IN(
type 子句;
file 子句;
其他子句;
);
常用的区声明子句及其功能见表8-5。
表8-5 区声明子句及其功能子句
功能
type master/slave/hint/forward
说明一个区的类型。master说明一个区为主域名服务器;slave说明一个区为辅助域名服务器;hint说明一个区为根服务器的索引;forward说明一个区为转发区
file,filename”
指定一个区的信息数据库文件名,既区文件名,区文件定义了一个区的域名信息
4)view指令在实际的网络应用中,有时希望能够根据来自不同IP地址的请求,对同一个域名解析到不同的IP地址,比如:一所高校的校园网有两个出口:教育网和公网(网通、电信等),希望来自教育网的用户通过教育网接口访问,来自公网的用户通过公网接口访问,另外,还要对校内用户提供域名解析服务。此时可以通过BIND9提供的view指令实现该功能(BIND8没有view指令),加快用户的访问速度。
view可以看成zone的集合,如果在配置文件named.conf中一个view都没有,那么所有的zone默认属于一个view。
(1)修改配置文件named.conf,主要内容如下:
acl "jiaoyuwang_ip_range"{ //创建一个访问控制列表
127.0.0.1; 211.68.0.0/16; 211.84.0.0/16;
//127.0.0.1是本机,211.68.0.0/16和211.84.0.0/16表示教育网,注意:在此仅仅是示例,
//如果实际应用,读者要获得教育网地址列表
};
acl "lan_ip_range"{
127.0.0.1; 192.168.0.0/24; 10.10.0.0/16;
//127.0.0.1是本机,211.68.0.0/16和218.68.0.0/16表示校园内网,读者要根据自己的
//网络环境获得校园网地址列表
};
view "jiaoyuwang" {
match-clients?{ "jiaoyuwang_ip_range"; }; //此视图对教育网用户提供视图内定义的DNS服务
recursion no;? //把递归关掉,这台DNS服务器忽略外来用户的非本地域名请求
zone "." IN {
type hint;
file "name.root";
};
zone "xinx.edu.cn" {
type master;?
file "jiaoyuwang/xinx.edu.cn.db"; //针对教育网用户的正向解析区文件
};
};
view "inside" {
match-clients { "lan_ip_range"; }; //此视图对内网用户提供视图内定义的DNS服务
recursion yes; //对内网用户开启DNS的递归查询
zone "." IN {
type hint;
file "name.root";
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "0.168.192.in-addr.arpa.db"; //针对内网用户的逆向解析区文件
};?
zone "xinx.edu.cn" {
type master;?
file "xinx.edu.cn.db"; //针对内网用户的正向解析区文件
};
};
view "gongwangqita" {
match-clients { any; };
//地址列表也可以用any、none、localnets和localhost。any是指任何主机,
//none不匹配任何主机,localnets是指本地网络的所有主机,localhost是指本地主机。
//将此视图放在jiaoyuwang和inside视图之后,对除了教育网用户和内网用户以外的
//所有用户提供视图内定义的DNS服务
recursion no;? //把递归关掉,这台DNS服务器忽略外来用户的非本地域名请求
zone "." IN {
type hint;
file "name.root";
};
zone "xinx.edu.cn " {
type master;
file "gongwangqita/db.caterpillar.com.outside";
//针对除了教育网用户和内网用户以外的所有用户的正向解析区文件
};
};
(2)创建文件/var/named/chroot/var/named/jiaoyuwang/xinx.edu.cn.db
jiaoyuwang/xinx.edu.cn.db正向解析区文件对教育网用户提供DNS服务,内容如下:
$TTL 1H
@ SOA dns.xinx.edu.cn. root.xinx.edu.cn,(
2 ; Serial
3H ; Refresh
1H ; Retry
1W ; Expire
1H ) ; Minimum
IN NS dns.xinx.edu.cn, ; NS(Name Server)后面的主机管理整个“xinx.edu.cn.”域
dns IN A 192.168.0.5
www IN A 211.68.58.22 ;与教育网相连的网络接口的公共IP地址
(3)创建文件/var/named/chroot/var/named/xinx.edu.cn.db
xinx.edu.cn.db正向解析区文件对内网用户提供DNS服务,内容如下:
$TTL 1H
@ SOA dns.xinx.edu.cn. root.xinx.edu.cn,(
2 ; Serial
3H ; Refresh
1H ; Retry
1W ; Expire
1H ) ; Minimum
IN NS dns.xinx.edu.cn, ; NS(Name Server)后面的主机管理整个“xinx.edu.cn.”域
IN MX 10 dns.test.edu.cn, ; MX(Mail eXchanger)指定邮件转发服务器,接收
;从Internet上来的邮件,然后再转发给相应的主机
dns IN A 192.168.0.5
www IN A 192.168.0.22 ;与内网相连的网络接口的IP地址
(4)创建文件/var/named/chroot/var/named/gongwangqita/xinx.edu.cn.db
gongwangqita/xinx.edu.cn.db正向解析区文件对除了教育网用户和内网用户以外的所有用户提供DNS服务,内容如下:
$TTL 1H
@ SOA dns.xinx.edu.cn. root.xinx.edu.cn,(
2 ; Serial
3H ; Refresh
1H ; Retry
1W ; Expire
1H ) ; Minimum
IN NS dns.xinx.edu.cn, ; NS(Name Server)后面的主机管理整个“xinx.edu.cn.”域
dns IN A 192.168.0.5
www IN A 58.32.5.78 ;与电信网相连的网络接口的公共IP地址
以上示例仅用来帮助读者理解view指令的使用。
第3步:创建正向/逆向解析区文件在主DNS服务器/var/named/chroot/var/named/目录创建正向解析区文件test.edu.cn.db,文件内容如下,正向解析文件主要由一系列A资源记录(RR,Resource Record)组成,使得DNS服务器能够将域名解析成IP地址。
$TTL 1H
@ SOA dns.test.edu.cn. root.test.edu.cn,(
2 ; Serial
3H ; Refresh
1H ; Retry
1W ; Expire
1H ) ; Minimum
IN NS dns.test.edu.cn, ; NS(Name Server)后面的主机管理整个“test.edu.cn.”域
IN MX 10 dns.test.edu.cn, ; MX(Mail eXchanger)指定邮件转发服务器,接收
;从Internet上来的邮件,然后再转发给相应的主机
dns IN A 192.168.0.5
www IN A 192.168.0.10
IN A 192.168.0.20 ; www有两个IP地址
dns2 IN CNAME dns ;指定主机别名
在主DNS服务器/var/named/chroot/var/named/目录创建逆向解析区文件192.168.0.db,文件内容如下,逆向解析文件由一系列PTR资源记录(RR,Resource Record)组成,使得DNS服务器能够将IP地址反向解析成域名。
$TTL 1H
@ SOA dns.test.edu.cn. root.test.edu.cn,(
2 ; Serial
3H ; Refresh
1H ; Retry
1W ; Expire
1H ) ; Minimum
NS dns.test.edu.cn.
5 PTR dns.test.edu.cn.
10 PTR www.test.edu.cn.
20 PTR www.test.edu.cn.
注意:
对DNS服务器的配置其实就是对named.conf文件、正向解析文件、逆向解析文件的修改。
下面对正向/逆向解析区文件的语法进行介绍。
每个区文件都是由区文件指令和若干条资源记录(RR,Resource Record)组成。
1)区文件指令在区文件中使用的区文件指令及其功能见表8-6。
表8-6 区文件指令及其功能区文件指令
功能
$INCLUDE
读取一个外部文件
$GENERATE
创建一组NS,CNAME或PTR类型的资源记录
$ORIGIN
设置管辖源
$TTL
TTL(Time To Live)跟清除cache的时间有关,单位是秒,定义向外查询的记录可以在DNS服务器的cache中保存多长时间
2)SOA记录
SOA(Start of Authority)记录表示一个授权区的开始,其格式如下:
zone(或@) [IN] SOA Hostname Contact (
Serial
Refresh
Retry
Expire
Minimum )
@表示在named.conf文件中由zone定义的区的名称,比如:zone "test.edu.cn." IN {},在test.edu.cn.db文件中的@就表示“test.edu.cn.”。
在SOA后面有两个部分:Hostname和Contact。Hostname是主机名称(dns.test.edu.cn.),Contact是管理员的电子邮箱地址,因为@在资源记录中有特殊的意义,所以用点“.”代替这个符号。root@test.edu.cn.应写为root.test.edu.cn.,注意后面的“.”。
小刮号中有五个数字,除了Minimum与TTL有关之外,其他四个的都跟主/从DNS服务器的同步有关。SOA记录中的数据字段及其功能见表8-7。
表8-7 SOA记录中的数据字段及其功能数据字段
功能
Serial
这个数字用来做为主(Master)、辅助(Slave)域名服务器之间的同步的参考数值,也就是说,当Slave的Serial小于Master的Serial时,那么Slave要根据Master的内容来更新自己的信息。每次改变信息文件时都应该使这个数加一
Refresh
Slave进行主动更新的时间间隔,Slave在试图检查Master的SOA记录之前应等待的秒数
Retry
如果到了Refresh的时间,但是Slave却无法连接到Master时,那么在多久之后,Slave会再次的主动尝试与主机联系
Expire
如果Slave一直无法与Master连接上,那么经过多久的时间之后,Slave不要再连接Master
Minimum
该字段其实就是TTL,如果没有定义TTL,那么TTL的值就以该值为准
3)标准资源记录(RR,Resource Record)
DNS标准资源记录的格式是:[domain] [ttl] [class] type rdate
各个字段之间用空格或制表符分隔,这些字段的含义见表8-8。可以包含一些特殊字符:“@”表示当前域、“()”允许数据跨行,通常用于SOA记录、“;”引出注释,“*”仅用于domain字段的通配符,domain字段说明资源记录引用的对象名,可以是一台单独的主机也可以是个域名。
表8-8 资源记录中各字段的含义字段
含义
domain
资源记录引用的域对象名。它可以是单台主机,也可以是整个域。作为domain输入的字串,除非不是以一个点结束,否则就与当前域有关系。如果该domain字段是空的,那么该记录适用于最后一个带名字的域对象
ttl
生存时间字段。以秒为单位,定义该资源记录中的信息存放在高速缓存中的时间长度。通常省略该字段,表示使用位于文件开始处的$TTL语句所指定值
class
指定网络地址类型,TCP/IP网络使用IN(Internet)
type
标识这是哪一类资源记录,常用的资源记录类型见表8-9
rdata
指定与这个资源记录有关的数据,这个值是必要的,数据字段的格式取决于类型字段的内容
表8-9 资源记录类型类型
含义
A
A(Address)记录用于将主机名(域名)转换为 IP 地址
CNAME
CNAME(Canonical NAME)是指别名记录,用于设置主机的别名
HINFO
描述主机的硬件和操作系统
KEY
KEY(Public Key)安全记录,存储了一个关于DNS名称的公钥
MX
MX(Mail eXchanger)邮件交换记录,控制邮件的路由。
格式为:zone?[ttl]?IN MX preference host,其中preference是优先级字段,数值越小优先级越高
NS
NS(Name Server)标识一个区的域名服务器以及授权子域
PTR
PTR(PoinTeR)将地址转换为主机名(域名)
SIG
SIG(Signatrue)指出带签名和身份认证的区信息,细节见RFC 2535
SOA
SOA(Start Of Authority)记录表示一个授权区定义的开始,告诉域名服务器,它后面跟着的所有资源记录是控制这个域的
SRV
SRV(Services)指出知名网络服务的信息
TXT
TXT(Text)注释或非关键的信息
在正向/逆向解析区文件中,资源记录的书写顺序是:SOA RR应该放在最前面,通常NS RR紧跟在SOA RR之后,其他记录的顺序无关紧要。
第4步:检查配置文件的语法执行named-checkconf命令,可以检查/etc/named.conf文件是否有语法错误,如果执行named-checkconf命令后没有任何输出,说明/etc/named.conf文件没有语法错误。
[root@localhost ~]# named-checkconf
none:0,open,/etc/named.conf,file not found
此时可以建立对/var/named/chroot/etc/named.conf文件的符号链接/etc/named.conf。
[root@localhost ~]# ln -s /var/named/chroot/etc/named.conf /etc/named.conf
[root@localhost ~]# ls -l /etc/named.conf
lrwxrwxrwx 1 root root 32 05-18 12:46 /etc/named.conf -> /var/named/chroot/etc/named.conf
[root@localhost ~]# named-checkconf
[root@localhost ~]#
第5步:测试修改/etc/resolv.conf文件,将nameserver行改写为nameserver 192.168.0.5。
执行#service named restart命令重启DNS服务器,或者执行#rndc reload命令,重新加载配置文件。
执行#nslookup www.test.edu.cn命令测试DNS的正向解析功能。
执行#nslookup 192.168.0.10命令测试DNS的反向解析功能。
将第2步的named.conf文件中的match-clients { any; };修改为match-clients { none; };,执行#nslookup www.test.edu.cn命令,结果如图8-22所示,读者分析这是为什么?
8.2.3 实例—设置DNS客户机在Linux系统中,需要配置两个文件:/etc/host.conf和/etc/resolv.conf。