(1)设置正向解析区域
正向解析区域用于实现域名到IP地址之间的转换。下面是一个正向解析区域的配置内容举例:
zone “my.internal.com” {
type master;
file “my.internal.com.db”;
allow-transfer {192.168.255.128;};
};
其中“my.internal.com”表示所定义的正向解析区域的名称,表示该DNS服务器上保存着my.internal.com区域的相关数据。网络上的所有其他DNS客户端或服务器都可以通过这台DNS服务器查询到该区域的信息。
选项“type”定义了区域的类型,对于主区域应该设置为“master”,如果是从区域则应该设为“slave”.
选项“file”定义了正向解析区域文件的名称。一个区域内的所有相关数据(如主机名,IP地址,刷新时间和过期时间等)都存储在区域文件中。该文件名用户可以自行定义,但为了方便管理,一般以区域名命名。
选项“allow-transfer”定义了允许进行区域复制的从DNS服务器地址列表。由于DNS服务器经常是黑客攻击的对象,为了安全起见,必须严格限制区域复制操作,保证其只能向信任的从DNS服务器开放区域复制功能。如果没有设置从DNS服务器,可以使用“none”选项,禁用区域复制功能,如allow-transfer { none; };
(2)设置反向解析区域
在大部分的DNS查询中,DNS客户端一般执行正向解析,即根据域名信息查询对应的IP地址。但在某些特殊的应用场合中,也会使用反向解析操作,即通过IP地址查询对应的域名。下面是针对上例所定义的正向解析区域而定义的反向解析区域:
zone “255.168.192.in-addr.arpa” IN {
type master;
file “my.internal.com.db.arpa”;
};
其中“255.168.192.in-addr.arpa”定义了反向解析区域的名称,“.in-addr.arpa”是固定后缀格式,“.in-addr.arpa”的子域名称一般是IP地址的反序,即由与点分十进制方法表示的IP地址顺序相反的字符串组成。例如子网“192.168.32.0/24”的反向解析域名为“32.168.192.in.addr.arpa”,子网“192.168.0.0/16”的反向解析域名为“168.192.in-addr.arpa”.
选项“type”定义了DNS区域的类型,与相应的正向解析区域中的“type”选项使用相同的设置。
选项“file”定义了反向解析区域文件的名称。该文件名用户可以自行定义,但为了方便管理,一般以反向解析的子网名称命名。
选项“allow-transfer”定义了允许进行区域复制的从DNS服务器地址列表,一般与相应的正向解析区域中的“allow-transfer”选项使用相同的设置。
(三)DNS正向解析区域文件
一个DNS正向解析区域文件中包含了该区域的所有相关数据,包括主机名,IP地址,刷新时间和过期时间等信息。一台DNS服务器中可以包含多个区域文件,同一个区域文件也可以存储在多台DNS服务器中。区域文件按DNS资源记录(Resource Record,RR)格式进行组织,由多条DNS资源记录组成。一条DNS资源记录的格式录如下所示:
[ name ] [ TTL ] addr-class record-type record-specific-data
其中name字段是域记录的名称,一般用符号“@”表示。通常只有第一条DNS 资源记录被设置为name。区域文件中的其他资源记录的name字段必须为空。TTL字段是一个可选的Time to Live即生存周期,定义了数据在数据库中存储的时间,该字段为空表示默认的生存周期时间将由授权开始记录(Start of Authority ,SOA)所指定。addr-class字段表示地址类型,对于Internet地址来说,地址类型应该为”IN” (Internet).record-type字段表示记录类型,不同记录类型对应不同类型的主机和域名服务器,常用资源记录类型如下表:
类型 |
说明 |
A |
用于描述域名和IP地址匹配的主机地址记录,映射主机名称到IP地址 |
NS |
用于引用域名服务器 |
SOA |
授权开始记录(Start of Authority Record).在区域文件第一条记录中指定,表明之后所有记录都是本域授权 |
CNAME |
别名(Canonical Name)资源记录,也称为规范名字资源记录,用于将多个名称映射到同一台计算机上 |
PTR |
指针记录,用于映射IP地址到主机名 |
WKS |
已知的服务描述 |
RP |
文本字符串,包含相关主机的连接点信息 |
HINFO |
主机信息 |
MINFO |
电子邮箱或邮件列表信息 |
MX |
邮件交换器(Mail exchanger)资源记录,用于指向一个邮件服务器 |
MA |
文本字符串 |
record-specific-data字段表示与记录相关的数据。
一个正向解析区域文件的例子:
$TTL 86400
my.internal.com. IN SOA dns.my.internal.com admin.my.internal.com (
2007090503 ;serial # (counter)
10800 ;refresh (3小时)
3600 ;retry (1小时)
604800 ;expire (1星期)
86400 ) ;TTL (3天)
my.internal.com. IN NS dns.my.internal.com.
dns IN A 192.168.255.129
www IN A 192.168.255.3
mail.my.internal.com. IN A 192.168.255.5
mail2.my.internal.com. IN A 192.168.255.6
rhel5 IN CNAME dns
samba IN CNAME www
forum IN CNAME www
my.internal.com. IN MX 10 mail.my.internal.com.
my.internal.com. IN MX 12 mail.my.internal.com.
具体介绍各行语句的含义:
(1) 第一行中的“$TTL 86400”用于设置允许客户端缓存所查询的数据的时间,即数据的有效期。该值默认单位为秒,也可以使用“h”--表示小时;“D”--表示天;“W”--表示星期。例如86400秒为三天,还可表示为“$TTL 3D”。为了减少不必要的DNS查询流量,通常该值不应设置得过小。
(2) 第二行至第七行用于设置授权开始记录(SOA资源记录)。通常应将SOA资源记录放在区域文件的第一行或第二行。SOA资源记录与其他资源记录格式相同。但数据段内容不同,SOA记录专有格式如下所示:
name [TTL] addr-class SOA Origin contact-email-address ( serial number
Refresh
Retry
Expire
Minimum )
name:定义了当前SOA所辖的域名,域名以“.”结束。也可以不使用域名而直接使用“@”代替。
TTL:代表有效时间,可以省略。省略后系统将使用文件第一行设置的TTL值。
addr-class:定义地址类型,对于Internet用户,地址类型为“IN”。
Origin:表示域名服务器的主机名,以“.”结束。
contact-email-address:通常是该域管理员的电子邮件地址,由于在该文件中“@”符号已有定义,所以电子邮件地址以“user.hostname”格式表示,即以“.”取代了“@”
()括号之间:定义了该域的一些常规选项,其中所有的数字均以秒为单位,且分号“:”表示注释,分号后的语句将被忽略,本例中的SOA记录也可以缩略地表示为:
@ IN SOA dns.my.internal.com admin.my.internal.com ( 2007090503 10800 3600 604800 86400 )
()括号内各选项含义如下:
serial number序列号:序列号表示DNS数据库的可用版本。当数据库被更新时,必须将这个数字加1,这样从DNS服务器会根据该数字决定是否更新数据库,序列号可以使用任何正整数,但一般采用YYYYMMDDNNN格式,MM表示月份;DD表示两位的日期,NN表示当日更新的次数。本例中的序列号2007090503,表示2007年9月5日的第4次更新(前3次更新的版本号为2007090500,2007090501,2007090502)。
Refresh刷新:刷新表示每一个从DNS服务器将以多长的时间间隔查询主DNS服务器,即从DNS服务器检查和更新信息的频率,以秒为单位,本例中的“10800”秒即3小时。此处需要注意的是,如果主DNS服务器更新了主区域配置文件,但没有更新序列号,从DNS服务器将无法更新其区域信息。
Retry重试:重试表示从DNS服务器在和主DNS服务器联系失败后,将间隔多长时间重新试图连接,该时间间隔以秒为单位,本例中的“3600”秒即1小时。
Expire超时:超时定义了从DNS服务器在和主DNS服务器能够使用数据的最长期限。如果从DNS服务器经过“超时”仍未能和主DNS服务器取得联系,那么从DNS服务器将停止应答任何关于此域的请求。因为通常情况下,不应答会比应答坏的信息要好一些(数据太旧,已经过时),本例中“604800”秒表示一星期。
TTL(生存时间):TTL与数据库请求的应答一起返回,告诉DNS客户端或服务器该信息可保存的最长时间。该值是文件中所有记录的默认值。如果为某个资源记录指定了生存时间,则该值将被覆盖,但该值指定了其强制的最小值。本例中的“86400”秒表示3天。
(3)第八行表示域名服务器记录(Name Server),用于指定负责某个域的域名服务器,其语法格式为:
IN NS name-server-hostname
其中name和TTL字段可以省略,系统将使用SOA记录中的默认值。例如本例中使用:
my.internal.com. IN NS dns.my.internal.com.表示my.internal.com域的域名服务器为dns.my.internal.com
(4)第九行至十二行是地址资源记录(A记录),是联系域名和IP地址的地址记录。一条A记录可以将一个域名转换成一个I地址。其语法格式为:hostname IN A IP-address.
本例中的4条A地址记录:
dns IN A 192.168.255.129
www IN A 192.168.255.3
mail.my.internal.com. IN A 192.168.255.5
mail2.my.internal.com. IN A 192.168.255.6
分别表示dns.my.internal.com的IP地址为192.168.255.129;
的IP地址为192.168.255.3;
mail.my.internal.com 的IP地址为192.168.255.5;
mail2.my.internal.com的IP地址为192.168.255.6.
可以看到,其中没有使用“.”结束的域名会自动追加域名,例如“dns”会自动扩展为“dns.my.internal.com”.
(5)第十三至十五行是规则名字记录(CNAME).CNAME用于为区域中的主机创建别名,这个主机别名必须与A记录中的主机名相联系。可以给一个A记录指定多个CNAME记录,从而将多个名称映射到同一台计算机上。例如本例中的三条CNAME记录:
rhel5 IN CNAME dns
samba IN CNAME www
forum IN CNAME www
其分别为dns.my.internal.com指定了别名rhel5.my.internal.com;为指定了samba.my.internal.com和forum.my.internal.com两个别名。
(6)第十六行至十七行表示邮件交换记录(MX),该记录指向邮件服务器,任何发送到该区域的邮件都会被发送到该邮件服务器。如果本区域中有多个邮件服务器,可以在MX记录中指定不同的级别,数字越小优先级越高。如果邮件不能送达指定的邮件服务器,系统将会按优先级选择替代的邮件服务器进行投递。例如本例中的两条MX记录:
my.internal.com. IN MX 10 mail.my.internal.com.
my.internal.com. IN MX 12 mail2.my.internal.com.
可以看到,发送到my.internal.com域的邮件将被优先发往mail.my.internal.com,如果发送失败将继续发送到mail2.my.internal.com上。
注意:由于MX资源只记录了邮件服务器的域名,而在实际传输过程中使用的是IP地址,因此在该文件中必须为邮件服务器指定一个A记录,否则会导致邮件传输失败!
(四)DNS反向解析区域文件
反向解析区域文件采用与正向解析区域文件相同的组织格式,即该文件也由多条DNS资源记录(Resource Record ,RR)组成,但该文件用于建立IP地址到DNS域名的转换记录,因此使用的是PTR资源指针记录而不再是CNAME或A记录。
一个反向解析区域文件的例子:
$TTL 86400
255.168.192.in-addr.arpa. IN SOA dns.my.internal.com admin.my.internal.com (
2007090503 ;serial # (counter)
10800 ;refresh (3小时)
3600 ;retry (1小时)
604800 ;expire (1星期)
86400 ) ;TTL (3天)
255.168.192.in-addr.arpa. IN NS dns.my.internal.com.
129.255.168.192.in-addr.arpa. IN PTR dns.my.internal.com.
3 IN PTR .
5 IN PTR mail.my.internal.com.
6 IN PTR mail2.my.internal.com.
具体介绍各行语句的含义:
(1) 第一行中的“$TTL 86400”用于设置允许客户端缓存所查询的数据的时间。
(2) 第二行至第七行用于设置授权开始记录(SOA资源记录)。其中name字段用于指定区域名称,通常采用
“逆序IP+.in-addr.arpa”的格式,也可以直接使用“@”代替。其余选项内容与正向解析区域文件相同。
(3) 第八行表示域名服务器记录(Name Server),用于指定负责某个网络的域名服务器。例如本例中使用:
255.168.192.in-addr.arpa. IN NS dns.my.internal.com.
表示负责192.168.255.0/24的域名服务器为dns.my.internal.com
(4) 第九至十二行表示指针记录(PTR)。与正向解析区域文件中的A记录相反,PTR用于将IP地址解析成DNS域名。
本例中使用了以下语句:
129.255.168.192.in-addr.arpa. IN PTR dns.my.internal.com.
3 IN PTR .
5 IN PTR mail.my.internal.com.
6 IN PTR mail2.my.internal.com
其中IP地址是192.168.255.129的主机对应dns.my.internal.com;
IP地址是192.168.255.3的主机对应;
IP地址是192.168.255.5的主机对应mail.my.internal.com;
IP地址是192.168.255.6的主机对应mail2.my.internal.com;
可以看到,后三条记录没有以句点结束,因此Bind自动在其后面追加了“.255.168.192.in-addr.arpa.”后缀。
(五)配置客户端:
#vi /etc/resolv.conf
domain my.internal.com
search my.internal.com
nameserver 192.168.255.129
nameserver 192.168.255.9
“domain”指令用于为系统指定默认的域名。如果没有在这一行中设置系统的域名,那么默认的域名将从系统的主机名中直接提取。
“search”指令用于设定默认的搜索路径。如果执行ping www,实际会创建完整的主机名并执行ping 。如果在此文件中没有定义search指令,那么当有不完整的主机名需要解析时,系统将会使用默认的域名。
“nameserver”指令用于指定使用的域名服务器。用户可以在该文件中使用多个nameserver指令定义多个域名服务器。多个域名服务器表示如果其中一个不可达,就可以继续使用下一个进行解析。每个域名服务器将按其在配置文件中出现的顺序依次被请求。通常为了达到一定的冗余度,使系统能够持续运行,至少应设置两个nameserver指令,分别指向不同的域名服务器。
Linux操作系统在对域名进行解析的过程中,除了采用DNS方式,还可以使用/etc/hosts文件,其解析顺序由/etc/host.conf文件设定,如下所示:#cat /etc/host.conf 结果显示为:order host , bind 该设置说明,在解析过程中系统将会优先使用hosts文件,如果hosts不能正确解析再使用DNS服务器。/etc/hosts文件需要用户手动添加,因此不适合大型网络,但其执行效率较高。hosts文件格式如下:ip-address(IP地址) hostname(域名) short-cut-hostname(主机名)
(六)DNS服务器的其它应用:
1.利用DNS服务器实现负载均衡
随着网络规模越来越大,网络用户数量也急剧增加,与此同时网络服务器(如WWW,FTP)的负担也变得越来越重,仅靠一台服务器同时应付成千上万用户的访问,必然会使服务器一直处于满负荷状态,从而导致其运行效率变低,响应时间变长,甚至根本无暇响应用户的请求。为此可以使用DNS服务器进行负载均衡,使网络流量分散到多台服务器上。在DNS服务器中,通过给一个主机名指定多个A资源记录,可以为一个域名指定多个IP地址。在应答DNS查询时,DNS服务器会对每一查询按区域文件中A资源记录的先后顺序返回不同的解析结果,从而将客户的访问指向不同的计算机,使得不同的客户端能通过同一域名访问不同的服务器,达到负载均衡的目的。
例如,为了分担大量FTP用户对FTP服务器的访问压力,在同一网段中设置两台内容完全相同的FTP服务器进行分流。两台FTP服务器的IP地址分别为192.168.255.128和192.168.255.1。为了实现负载均衡,需要修改DNS服务器的正向解析区域文件,加入FTP服务器的A资源记录,如下所示:
@ in soa my.internal.zone. root 1 3H 15M 1W 1D
IN NS dns.my.internal.zone.
dns IN A 192.168.255.129
rhel IN A 192.168.255.129
www IN A 192.168.255.3
ftp IN A 192.168.255.128 (FTP服务器1)
ftp IN A 192.168.255.1 (FTP服务器2)
使用ping命令可以查看负载均衡效果,当连续对FTP服务器执行ping操作,可以看到ftp.my.internal.zone被解析到了不同的IP地址:
#ping ftp.my.internal.zone
PING ftp.my.internal.zone (192.168.255.1) 56 (84)bytes of data……… (被解析到192.168.255.1)
#ping ftp.my.internal.zone
PING fty.my.internal.zone (192.168.255.128) 56 (84)bytes of data……..(被解析到192.168.255.128)
这样当客户端以名称ftp.my.internal.zone请求服务器连接时就会被解析到不同的服务器主机上,从而达到负载均衡!
2.泛域名的解析
泛域名的解析是指一个域名下的所有主机,子域都被解析到同一个IP地址上。实现泛域名解析只需在DNS服务器正向解析区域文件中加入一条以“*”表示的资源记录即可。例如修改上面例子中的区域文件,加入泛域名设置,如下所示:
@ in soa my.internal.zone. root 1 3H 15M 1W 1D
IN NS dns.my.internal.zone.
dns IN A 192.168.255.129
rhel IN A 192.168.255.129
www IN A 192.168.255.3
ftp IN A 192.168.255.128
ftp IN A 192.168.255.1
*.my.internal.zone. in a 192.168.255.128 //或 * IN A 192.168.255.128
当使用ping命令测试泛域名设置是否生效,如下所示:
#ping rhel5.my.internal.zone
PING rhel5.my.internal.zone (192.168.255.128) 56 (84)bytes of data…//rhel5.my.internal.zone被解析到192.168.255.128
#ping rhel5-1.my.internal.zone
PING rhel5-1.my.internal.zone (192.168.255.128) 56 (84)bytes of data…//rhel5-1.my.internal.zone被解析到192.168.255.128
可以看到网络内并不存在rhel5和rhel5-1这两台主机,但按照泛域名设置,rhel5.my.internal.zone与rhel5-1.my.internal.zone均被解析到了192.168.255.128主机。
3.直接解析域名
用户在使用域名访问网站时,经常在输入网站地址时省去主机名“www”或“mail”,例如访问北京理工大学邮箱主页只输入“”,访问百度只输入“”。要实现该功能只需要在DNS服务器正向解析区域中加入一条以“.”表示的资源记录即可。例如,修改上例中的区域文件以加入直接解析域名功能,如下所示:
@ in soa my.internal.zone. root 1 3H 15M 1W 1D
IN NS dns.my.internal.zone.
dns IN A 192.168.255.129
rhel IN A 192.168.255.129
www IN A 192.168.255.3
ftp IN A 192.168.255.128
ftp IN A 192.168.255.1
*.my.internal.zone. IN A 192.168.255.128
. IN A 192.168.255.128 //或“my.internal.zone. IN A 192.168.255.128”
可以使用ping命令测试对域名my.internal.zone直接进行解析的结果,命令行为:
#ping my.internal.zone
PING my.internal.zone.my.internal.zone(192.168.255.128)56 (84)bytes of data. //my.internal.zone被解析到192.168.255.128。