分类:
2012-05-18 17:32:42
原文地址:建立BIND配置文件 作者:phoenix1017
BIND配置文件在4版本和8版本有很大不同,值得注意。但在8版本和9版本之间变化不大。由于4版本已经过时太久远,在这里就不介绍了,你可以参考以前的相关版本书籍。在配置文件中,你可以使用C 、C++或者是shell设计三种注释方法:
/* This is a C-style comment */// This is a C++-style comment# This is a shell-style comment通常,配置文件包含一行目录指示该区数据文件放置位置。在读取数据文件之前,域名服务器把它的目录改变到本地,在这里允许将像对当前的目录文件名替换成全路经(绝对路径),下面就是一个选项的描述:
options { directory "/var/named"; // Place additional options here.};
只能有一个选项描述在配置文件里,因此任何其他增加的选项(在本书提到的)必须放在这个目录内。
在主服务器中,配置文件包括每一个区数据所要读得区描述,每一行包括zone、随后的该区域名和类(in 代表internet),master类型是指这个服务器是主服务器,最后一行是文件名称:
zone "movie.edu" in { type master; file "db.movie.edu";};
在本章前面曾谈到,如果你在一个源记录中忽略了这个类(class),域名服务器将从配置文件里确定正确的类(class)。在区描述中的“in”设置了internet类,“in”类为区(zone)描述的缺省类,从而你可以省去设置直接使用internet类。
下面是配置文件中用于读“root hint”文件的内容:
zone "." in { type hint; file "db.cache";};前面提到,这个文件不是为普通的缓冲数据,他只包含根(root)域名服务器的hints。
实际上,BIND9已经建立hints区文件,从而你不必在named.conf(配置文件)内再建。但是,建上后也无碍,我们不要多虑。因此我们就一直包含他。
在缺省情况下,BIND设置配置文件为/etc/named.conf,区数据文件向我设置的一样在/var/named,这个目录不必非在此目录下,只要该目录的根目录有足够的空间,在运行域名服务前目录挂载上即可。以下是完整的named.conf文件:
// BIND configuration file options { directory "/var/named"; // Place additional options here.}; zone "movie.edu" in { type master; file "db.movie.edu";}; zone "249.249.192.in-addr.arpa" in { type master; file "db.192.249.249";}; zone "253.253.192.in-addr.arpa" in { type master; file "db.192.253.253";}; zone "0.0.127.in-addr.arpa" in { type master; file "db.127.0.0";}; zone "." in { type hint; file "db.cache"; };
4.4 缩写
在这点,我们已经创建了所有的注域名服务器的文件。让我们回头再看一看区数据文件(zone datafile),有缩写格式我们还没使用,除非你理解了以前的长格式后,虽然所写格式看上去很怪。现在长格式我们已经讲过了,接下来讲述缩写格式。
4.4.1 增加域名
区描述的第二部分列举了域名,域名是缩写的关键,域名是在这个区数据文件中所有数据的源(origin),“源”被增加给该区数据文件中的所有的名字,不要以“.”结束,否则意义将不同,是因为每一个文件描述不同的区了。
既然“源”附加给名称,代替在db.movie.edu中输入shrek.movie.edu的地址:
shrek.movie.edu. IN A 192.249.249.2我们可以这样输入:
shrek IN A 192.249.249.2在db.192.249.249文件中,我们输入:
2.249.249.192.in-addr.arpa. IN PTR shrek.movie.edu.因为249.249.192.in-addr.arpa是“源”,我们可以这样输入:
2 IN PTR shrek.movie.edu.还记得曾经提醒你在使用完整格式时不要忽略尾部的“.”吗?假设你忘记了尾部的“.”:
shrek.movie.edu IN A 192.249.249.2你根本没有替换,就变成了shrek.movie.edu.movie.edu,
4.4.2 @符号
作为“源”的这个域名可以被表示为“@”,在区文件的SOA记录中经常可以看到。SOA记录可以这样输入:
@ IN SOA toystory.movie.edu. al.movie.edu. ( 1 ; Serial 3h ; Refresh after 3 hours 1h ; Retry after 1 hour 1w ; Expire after 1 week 1h ) ; Negative caching TTL of 1 hour
4.4.3 重复的名称
如果一个源记录(resource record,在RR记录的第一部分)是一个空格或“tab”键,这个名称是用得上一个记录的名称。可以用在名称的多个源记录中,下面示例:
wormhole IN A 192.249.249.1 IN A 192.253.253.1在第二个地址记录中,名称“wormhole”被隐含了,即使源记录是不同的类型以可以这样使用。
4.4.4 区数据文件的缩写形式
刚才我们介绍了缩写,下面我们将使用缩写形式编辑区数据文件(db.movie.edu文件):
$TTL 3h;; Origin added to names not ending; in a dot: movie.edu; @ IN SOA toystory.movie.edu. al.movie.edu. ( 1 ; Serial 3h ; Refresh after 3 hours 1h ; Retry after 1 hour 1w ; Expire after 1 week 1h ) ; Negative caching TTL of 1 hour ;; Name servers (The name '@' is implied); IN NS toystory.movie.edu. IN NS wormhole.movie.edu. ;; Addresses for the canonical names;localhost IN A 127.0.0.1shrek IN A 192.249.249.2toystory IN A 192.249.249.3monsters-inc IN A 192.249.249.4misery IN A 192.253.253.2shining IN A 192.253.253.3carrie IN A 192.253.253.4 wormhole IN A 192.249.249.1 IN A 192.253.253.1 ;; Aliases;toys IN CNAME toystorymi IN CNAME monsters-incwh IN CNAME wormhole ;; Interface specific names;wh249 IN A 192.249.249.1wh253 IN A 192.253.253.1
下面是db.192.249.249文件:
$TTL 3h;; Origin added to names not ending; in a dot: 249.249.192.in-addr.arpa; @ IN SOA toystory.movie.edu. al.movie.edu. ( 1 ; Serial 3h ; Refresh after 3 hours 1h ; Retry after 1 hour 1w ; Expire after 1 week 1h ) ; Negative caching TTL of 1 hour ;; Name servers (The name '@' is implied); IN NS toystory.movie.edu. IN NS wormhole.movie.edu. ;; Addresses point to canonical names;1 IN PTR wormhole.movie.edu.2 IN PTR shrek.movie.edu.3 IN PTR toystory.movie.edu.4 IN PTR monsters-inc.movie.edu.
下面是db.192.253.253文件:
$TTL 3h;; Origin added to names not ending; in a dot: 253.253.192.in-addr.arpa; @ IN SOA toystory.movie.edu. al.movie.edu. ( 1 ; Serial 3h ; Refresh after 3 hours 1h ; Retry after 1 hour 1w ; Expire after 1 week 1h ) ; Negative caching TTL of 1 hour ;; Name servers (The name '@' is implied); IN NS toystory.movie.edu. IN NS wormhole.movie.edu. ;; Addresses point to canonical names;1 IN PTR wormhole.movie.edu.2 IN PTR misery.movie.edu.3 IN PTR shining.movie.edu.4 IN PTR carrie.movie.edu.
下面是db.127.0.0文件:
$TTL 3h@ IN SOA toystory.movie.edu. al.movie.edu. ( 1 ; Serial 3h ; Refresh after 3 hours 1h ; Retry after 1 hour 1w ; Expire after 1 week 1h ) ; Negative caching TTL of 1 hour IN NS toystory.movie.edu. IN NS wormhole.movie.edu. 1 IN PTR localhost.
当我们看这个新的db.movie.edu文件,你可能注意到SOA和NS记录中已经没有“movie.edu”了:
@ IN SOA toystory al ( 1 ; Serial 3h ; Refresh after 3 hours 1h ; Retry after 1 hour 1w ; Expire after 1 week 1h ) ; Negative caching TTL of 1 day IN NS toystory IN NS wormhole 在其他的区数据文件中不能这样输入,因为他们的“源”是不同的。在db.movie.edu文件中,用这些名称代替完整的域名,所以在所有的区数据文件中NS和SOA记录严格统一。