Bind配置手册

DNS 简介在Linux 中,域名服务(DNS )是由柏克莱网间名域(Berkeley Internet Name Domain ——BIND )软件实现的。BIND 是一个客户/服务系统,它的客户方

DNS 简介

在Linux 中,域名服务(DNS )是由柏克莱网间名域(Berkeley Internet Name Domain ——BIND )软件实现的。BIND 是一个客户/服务系统,它的客户方面称为转换程序(resolver ),它产生域名信息的查询,将这类信息发送给服务器,DNS 软件回答转换程序的查询。BIND 的服务方面是一个称为named (读作“name ”“d ”)的守护进程。

我们将讨论三种基本BIND 配置任务:

配置BIND 转换程序。

配置BIND 域名服务。

建立服务器数据库文件,称为“区文件(zone file)。

前面我们介绍过,术语“区(zone )”往往可以与单词“域(domain )”互换使用,但这里却有一些区别,“区”是指域数据库文件,而“域”则比较通用。在本书中,域是用域名定义的域结构中的一部分,而区则是域数据库文件中包含域信息的集合,包含域信息的文件称为“区文件”。

DNS的作用是把IP 地址转化为代表主机、网络和邮件别名的助记名。它把整个Internet IP 地址和名字空间分解为不同的逻辑组来做这项工作。每个组对它所拥有的计算机和其他信息具有控制权。

DNS 服务器的类型

BIND可以配置成以几种不同的方法运行的DNS ,常见的BIND 配置是唯转换程序系统、唯高速缓存系统、主服务器和辅助服务器。

转换程序是一段要求域名服务器提供域信息的程序,在Linux 系统中,它是作为一个库程序来实现的,不是一个单独的客户程序。在唯转换程序系统中,仅使用转换程序,并不运行域名服务器。这种系统是很容易配置的,最多只需要设置/etc/resolv.conf文件。其它三个BIND 配置选项都是用于named 服务软件的。 唯高速缓存服务器唯高速缓存服务器(caching-only server)可运行域名服务器软件但是没有域名数据库软件。它从某个远程服务器取得每次域名服务器查询的回答,一旦取得一个答案,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。所有的域名服务器都按这种方式使用高速缓存中的信息,但唯高速缓存服务器则依赖于这一技术提供所有的域名服务器信息。唯高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。

,

对于唯高速缓存服务器只需要配置一个高速缓存文件,但最常见的配置还包括一个回送文件,这或许是最常见的域名服务器配置。接着才是唯转换程序配置,它是最容易配置的。

主服务器主服务器(primary name server)是特定域所有信息的权威性信息源。它从域管理员构造的本地磁盘文件中加载域信息,该文件(区文件)包含着该服务器具有管理权的一部分域结构的最精确信息。主服务器是一种权威性服务器,因为它以绝对的权威去回答对它域的任何查询。

配置主服务器需要一整套配置文件,包括正规域的区文件(named.hosts )和反向域的区文件(named.rev )、引导文件(named.conf )、高速缓存(named.ca )和回送文件(named.local ),其它的配置都不需要这样一整套文件。

辅助域名服务器辅助域名服务器(secondary name server)可从主服务器中转移一整套域信息。区文件是从主服务器中转移出来的,并作为本地磁盘文件存储在辅助服务器中。这种转移称为“区文件转移”。在辅助域名服务器中有一个所有域信息的完整拷贝,可以有权威地回答对该域的查询,因此,辅助域名服务器也称作权威性服务器。

配置辅助域名服务器不需要生成本地区文件,因为可以从主服务器中下载该区文件。然而其它的文件是确是需要的,包括引导文件、高速缓存文件和回送文件。

一个域名服务器可以是这类配置中的任何一种,但经常是将多种配置类型的元素组合在一起。然而所有的系统都要运行转换程序。

DNS 常用术语

DNS是一个很复杂的概念,表1列出了常用的DNS 术语。

表1 常用DNS 术语

,

在概念上可以把DNS 分为三个部分:

域名空间这是标识一组主机并提供他们的有关信息的树结构的详细说明。树上的每一个节点都有它控制下的主机的有关信息的数据库。查询命令试图从这个数据库中提取适当的信息。简单地说,这只是所有不同类型信息的列表,这些信息是域名、IP 地址、邮件别名和那些在DNS 系统中能查到的内容。

域名服务器它们是保持并维护域名空间中的数据的程序。每个域名服务器含有一个域名空间子集的完整信息,并保存其它有关部分的信息。一个域名服务器拥有它控制范围的完整信息。控制的信息按区进行划分,区可以分布在不同的域名服务器上,以便为每个区提供服务。每个域名服务器都知道每个负责其他区的域名服务器。如果来了一个请求,它请求给定域名服务器负责的那个区的信息,那么这个域名服务器只是简单地返回信息。但是,如果请求是不同区的信息,那么这个域名服务器就要与控制该区的相映服务器联系。

解析器解析器是简单的程序或子程序库,它从服务器中提取信息以响应对域名空间中主机的查询。

配置转换程序

使用DNS 的第一步是在用户的计算机上配置转换程序,即让机器能够能够从DNS 服务器中获取域名解析/反解析服务。转换程序不是一个单独而明确的处理进程,而是网络进程调用的一个标准C 程序库。如果本地系统不运行named ,就必须配置本地转换程序。

转换程序控制文件/etc/host.conf

/etc/host.conf是用来控制本地转换程序的文件的设置。该文件告诉转换程序使用哪些服务、按照什么顺序进行。该文件的字段可以用空格或制表符分隔。字符“#”表示注释行。表2是可在host.conf 中指定的选项。

表2

/etc/host.conf文件的配置选项

,

下面这个例子是主机vlager 上的/etc/host.conf文件:

# /etc/host.conf

# We have named running, but no NIS (yet)

order bind hosts

# Allow multiple addrs

multi on

# Guard against spoof attempts

nospoof on

# Trim local domain (not really necessary).

trim vbrew.com.

这个例子给出了域vbrew.com 的通用解析程序配置。该解析程序首先使用DNS 然后使用/etc/hosts文件查找主机名。在解析查找中指定本地/etc/hosts文件是一个好主意。如果由于某种原因不能使用域名服务器了,我们还可以使用主机文件中列出的那些主机名。该机器上允许使用多个IP 地址,主机通过重新解析主机名字(从IP 地址逆向查找返回的主机名字)来检查IP 欺骗。 转换程序/配置文件/etc/resolv.conf

当配置转换程序使用BIND 域名服务查询主机时,我们必须告诉转换程序使用哪一个域名服务器。用来完成这项任务的工具就是/etc/resolv.conf文件。

/etc/resolv.conf控制转换程序使用DNS 解析主机名使用的方式,它可以明确

,

地定义系统的配置,允许我们命名由于缺省服务器不响应而使用的备份服务器。因此,尽管会增加系统负荷,但在某些场合使用resolv.conf 是很受欢迎的。 /etc/resolv.conf是一个简单而易读的文件。在/etc/resov.conf中使用的命令,具有系统专用的形式,但一般都支持domain 和nameserver 两项命令。

nameserver 项利用IP 地址去识别让转换程序去识别查询域信息的那些服务器。我们可以多次使用nameserver 选项,可以使用多达三个域名服务器。这些名服务器是按照它们在文件中的顺序进行查询的,如果没有接收到一个服务器的响应,就去试表中的下一个服务器,直到所有服务器试完为止(如果在

/etc/resolv.conf文件中设置了三个以上的域名服务器,那么,即使前三个服务器都没有响应查询请求,Linux 也不会去请求后面的服务器)。我们应该将最可靠的域名服务器列在最前面,以便在查询时不会超时。如果resolv.conf 文件中不包含nameserver 项,或者不存在resolv.conf 文件,就将所有名服务器查询发送给本地主机。然而,如果有一个resolv.conf 文件,它包含nameserver 项,除非有一项指向本地主机,否则就不查询本地主机。在配置唯转换程序的主机中,resolv.conf 文件包含nameserver 项,但没有一个项指向本地主机。 domain 项用来定义缺省域名(主机的本地域名)。转换程序会将缺省域名挂在任何不含点的主机名后面。例如,转换程序接收到主机名vale (它不含点),就将其缺省域名挂接在vale 后面,构成对它的查询。如果domian 域中的name 值是vbrew.com ,那么转换程序就将查询vale.vbrew.com 。如果没有出它,则转换程序就试图通过getdomainname()系统调用来获得本地域名。

如果听起来让人迷惑不解的话,我们可以看看下面这个例子,这是Virtual Brewery 中的resolv.conf 文件:

# /etc/resolv.conf

# Our domain

domain vbrew.com

#

# We use vlager as central nameserver:

nameserver 191.72.1.1

在该例中,通过domain 指定缺省域名,并列出一个用于解析主机名的域名服务器。在这个例子中没有指定查寻顺序(使用search 选项),因此如果要查询一台机器的地址(如vale ),解析器则首先试图查找vale ,如果没找到,则查找vale.vbrew.com ,然后再查找vbrew.com 。

唯转换程序配置

,

配置唯转换程序是非常简单的,下面是一个唯转换程序的/etc/resolv.conf文件的例子:

# /etc/resolv.conf

# Our domain

domain vbrew.com

#

# We use vlager as central nameserver:

nameserver 191.72.1.1

# netx try vale namesever 191.72.1.3

该配置文件告诉转换程序将所有的查询发送给主域名服务器vlager ,如果失败,就试vale 。这些查询是永远不能在本地转换的。这一个简单的resolv.conf 文件就可以满足唯转换程序配置的全部要求。

设置域名服务器

在Linux 上的域名服务是由named 守护进程来执行的,named 最早是为BSD 向客户机提供域名服务而开发的。named 守护进程通常在系统启动时开始工作,并一直工作到系统关闭。该进程从被称作/etc/named.boot的配置文件中获取有关信息和将主机名映射为IP 地址的各种文件。

为了运行named ,只要在命令行中输入:

# /etc/rc.d/init.d/named start

named就会开始运行,读取named.boot 文件及其定义的任何区文件并将它的进程ID 以ASCII 码的形式写入/var/run/named.pid中,下载任何来自主服务器的区文件,如果有必要的话在端口53等待DNS 请求。

虽然转换程序的配置只需要一个配置文件, 但是在配置named 时却要使用多个文件, 一整套named 配置文件如表3所示。

表3

named 配置文件

,

在下面各节中我们将探讨如何利用其中的每一个文件去配置named 。

/etc/named.conf文件

named.conf文件通常很小,只包括一些指向DNS 信息源的信息。其中某些源是本地文件,其他则是远程服务器。下面我们将看到一个需要生成的每种文件类型的例子。

表4概括了named.conf 文件中使用的各种配置语句,它提供的信息能帮助我们了解这一些例子:

表4

named.boot 文件的配置选项

配置named.conf 文件所使用的方法,是用来控制将域名服务器作为主服务器、辅助服务器还是唯高速缓存服务器的。理解不同配置的最佳方法是讨论各种named.conf 的示例文件。

1. 唯高速缓存服务器

配置唯高速缓存域名服务器是很简单的。必须有named.conf 和named.ca 文件,通常也要用到named.local 文件。下面是用于唯高速缓存服务器的

named.conf 文件的例子,其中以“//”开头的是注释:

// generated by named-bootconf.pl

,

options { /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53;

}; directory "/var/named";

//

// a caching only nameserver config //

//

// a caching only nameserver config //

zone "." {

};

type hint; file "named.ca";

,

zone "0.0.127.in-addr.arpa" {

type master; file "named.local";

directory这一行告诉named 到哪里去找寻文件。所有其后命名的文件都将是相对于此目录的。该文件告诉named 去维持一个域名服务器响应的高速缓存,并利用named.ca 文件的内容去初始化该高速缓存。该高速缓存初始化文件的名字可以是任何名字,但一般使用/var/named/named.ca。并不是在该文件中使用一个hint 语句就能使它成为唯高速缓存配置,几乎每一种服务器的配置都要用到cache 语句,而是因为没有master 和slave 语句才使它成为一个唯高速缓存配置。

但是,在我们这个例子中却有一个master 语句。事实上,几乎在每一个唯高速缓存的配置文件中都有这一个语句,它将本地服务器定义为它自己的回送域的主服务器,并假定该域的信息存储在named.local 文件中。这个回送域是一个in-addr.arpa 域(in-addr.arpa 域用于指定逆向解析,或IP 地址到DNS 名字解析),它将地址127.0.0.1映射为名字localhost 。转换自己的回送地址对于大多数人都是有意义的,因为大多数的named.conf 文件都包含这一项。

在大多数唯高速缓存服务器的配置文件中,这种directory 、master 和hint 语句是唯一使用的语句,但也可以增加其他的语句,forwarders 和slave 等语句都可以使用。

2. 主服务器和辅助服务器的配置

我们虚构的vbrew.com 是举例说明主服务器和辅助服务器的基础,下面是将vlager 定义为vbrew.com 域的主服务器的named.conf 文件:

options {

/* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked directory "/var/named"; // generated by named-bootconf.pl

,

* questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53;

};

//

// a caching only nameserver config //

zone "." {

};

zone "vbrew.com"{

};

zone "0.0.127.in-addr.arpa" {

};

zone "72.191.in-addr.arpa"{ type master; file "named.local"; type master; file "named.hosts"; type hint; file "named.ca";

标签: