[ 上一节 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 下一节 ]


Debian GNU/Linux 网络管理员手册 (已过时文档)
第 8 章 - DNS/BIND


作者:Ivan E. Moore II rkrusty@debian.org

欢迎。本节的目的是帮助您在 Debian 上设置 BIND。本文档将从零开始,引导您搭建一个实际可用的、功能齐全的 BIND 系统。根据一些人的要求,我将包含关于如何从主服务器和辅助服务器的角度设置可用的 DNS 域的说明。

我还将只关注 BIND 9.x,因为这是 Debian 正在使用的最新版本。如果您正在使用 BIND 4.x,我建议您升级。

请注意,大多数人不需要在其系统上安装 BIND。事实上,几乎只有服务器真正需要它。漏洞会不时出现,从拒绝服务攻击到实际的 root 权限泄露都有可能发生。大多数 DNS 服务器的设置都不正确,从而导致这种情况。如果您正在设置家庭系统,您很可能不需要安装 BIND。请在继续之前仔细考虑。

注意:8.2.1 及更高版本的 bind 具有不同的布局。所有与 bind 相关的配置文件现在都位于 /etc/bind 中。这包括区域文件。

有关 BIND 的高级帮助,请参阅 获取 BIND 帮助,第 8.7 节


8.1 获取必要的文件

首先,您需要安装正确的文件。进入 dselect 并安装以下文件

     Required Files:
     
     bind9
     dnsutils
     
     Optional Files:
     
     bind9-doc
     bind9-host
     libbind-dev
     dns-browse
     libnet-dns-perl
     nslint
     dhcp-dns
     dnscvsutil

如果您使用 apt-get,则只需运行此命令

     apt-get install bind9 bind9-doc dnsutils

8.2 配置 BIND


8.2.1 bindconfig

如果您已经安装了 bind 并在安装期间回答了问题,您可以返回并通过键入 bindconfig 重新配置基本 BIND 系统。此程序仅执行通用基本设置。 bindconfig 是 dpkg 在安装 BIND 时运行的程序,因此我接下来要介绍的内容正是您首次安装 BIND 时将经历的过程。它看起来像这样。

此程序在 8.2.1 及更高版本的 bind 中不存在。它可能会在某个时候再次出现,但如果您使用的是这些版本,请暂时忽略这些步骤。


8.2.1.1 步骤 1(如果是通过 dselect 或 apt-get 首次安装,请忽略此步骤)

     snowcrash:/var/named# bindconfig
     
     It appears that you already have an /etc/named.conf file, suggesting
     that you have already configured BIND version 8.X at least once.  If
     you proceed, a copy of this file will be saved, but no customizations
     that you have made to it will be included in the new configuration.
     
     If this means nothing to you, go ahead and proceed with the remainder
     of the configuration process.  If you have customized /etc/named.conf,
     you probably want to stop now to preserve your customizations.
     
     Proceed to configure BIND, ignoring existing /etc/named.conf? [N]

8.2.1.2 步骤 2

     BIND Configuration
     ------------------
     By answering the following questions, you can configure BIND for your system.
     If your system has already been configured, the default values will allow you
     to verify your existing configuration.
     
     Press [ENTER]

8.2.1.3 步骤 3

     Forwarder Hosts
     ---------------
     If you are close to a well-connected host or set of hosts which accept
     recursive DNS queries, it would be to your advantage to use them as forwarders
     in order to reduce traffic over links to outside servers.
     
     Your DNS server will send all queries not in its cache to the forwarders
     first. Each forwarder will be asked in turn until an answer is returned or the
     list is exhausted. If no answer is forthcoming from a forwarder, the server
     will continue as it would have without the forwarders.
     
     To answer this question, separate each address with a space, or answer `none'
     to eliminate all forwarder hosts.
     
     Forwarder IP addresses? []

此选项允许您将任何 DNS 请求转发到另一个 DNS 服务器。您可能想要这样做的原因是,如果您位于防火墙内并且无法直接访问外部世界。您可以将您的服务器指向从网络内部可以访问外部世界的特定服务器执行所有查找。


8.2.1.4 步骤 4

     Localhost Entries
     -----------------
     With this option, BIND will contain entries for the `localhost' pseudo-host
     and its reverse mapping (127.0.0.1). This is recommended.
     
     Enable localhost entries? [Y]

您需要这个。这允许映射到您的 localhost (127.0.0.1) 和从您的 localhost (127.0.0.1) 映射。


8.2.1.5 步骤 5

     Configuration Complete
     ----------------------
     Advanced configuration, such as sortlists, xfrnets, limits, and other options
     can be accomplished by manually editing the /var/named/boot.options
     configuration file and reloading your nameserver. You may wish to refer to
     the named(8) man page or review the documentation in /usr/doc/net/named to
     assist in further customization.
     
     This automatic configuration does not manipulate zone files; you should ensure
     the proper boot entries are made in /var/named/boot.zones for each primary and
     secondary zone you are serving. If you leave this file empty, your server will
     act conveniently as a caching-only name server.
     
     Saving old /var/named/boot.options to /var/named/boot.options.old ...
     Reading boot.zones ... 
     Reading boot.options ... 
     Rotated `/etc/named.conf' at Mon Dec  7 06:34:58 EST 1998.
     Reload named now with the new configuration? [Y]

您的所有基本配置现已完成。继续并选择“是”以重新启动 bind。


8.2.2 resolv.conf

/etc/resolv.conf 是 Linux 查找如何执行 DNS 查找的位置。格式如下

     domain yourdomain.com
     search yourdomain.com otherdomains.com
     nameserver 192.168.100.1
     nameserver 127.0.0.1

非常简单明了。第一行告诉它您所在的域。如果您愿意,可以省略此行,但我建议使用它。第二行是搜索模式。这也可以省略,但我也建议使用它。没有它,您将无法在不键入其完全限定域名的情况下查找主机名。即... 您无法查找 beavis。您必须查找 beavis.otherdomain.com。(除非您在 /etc/hosts 文件中指定了此信息)

“nameserver”行告诉它 DNS 服务器的搜索顺序。现在,由于我们正在您的系统上设置 BIND,您将需要更改此文件。您希望它看起来更像下面这样

     domain yourdomain.com
     search yourdomain.com
     nameserver 127.0.0.1
     nameserver x.x.x.x

将 “yourdomain.com” 替换为您正在使用的任何域,并将 “x.x.x.x” 替换为您可以使用的备份 DNS 服务器。(这样,如果您的服务器失败,您仍然可以执行查找)。

保存此文件,您应该就完成了。到目前为止,这为您提供了查找 Internet DNS 信息的能力。

有关设置可用的 DNS 域的信息,请参阅 设置主 DNS 服务器,第 8.4 节


8.3 高级配置


8.3.1 named.conf

named.conf 是您告诉 BIND 什么、在哪里以及如何操作的地方。它是 BIND 的主要配置文件。在 BIND 8.x 之前,此文件名为 named.boot。以下是首次安装 BIND 后获得的默认 named.conf 文件。

     
     // generated by named-bootconf.pl
     
     options {
             directory "/var/named";
             /*
              * 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;
     };
     
     //
     // Boot file for name server
     //
     // type         domain                  source          file
     zone "." {
             type hint;
             file "named.root";
     };
     
     // Zone boot information and daemon options are kept in other files
     // (autoincluded from boot.zones)
     //
     // Name server zone boot file
     // See named(8) for syntax and further information
     //
     // type         domain                  source          file
     // (autoincluded from boot.options)
     //
     // Options for name server
     // Use `bindconfig' to automatically configure this file
     //
     // type         domain                  source          file
     zone "localhost" {
             type master;
             file "named.local";
     };
     
     zone "127.in-addr.arpa" {
             type master;
             file "named.rev-local";
     };
     
     // Custom configurations below (will be preserved)

named.conf 文件是高度可配置的。只需查看它,您就可以了解如何添加新域。要添加新域,只需在 named.conf 文件的底部添加以下内容

     zone "newdomain.com" {
             type master;
             file "newdomain.db";
     };
     
     zone "100.168.192.in-addr.arpa" {
             type master;
             file "192.rev";
     };

只需将 “newdomain.com” 替换为您要为其执行 DNS 的域名,并将 “100.168.192.in-addr.arpa” 替换为您将为其执行反向 DNS 的正确子网。请注意此反向查找区域的名称:它是网络数字 IP 地址的反向顺序,后跟 .in-addr.arpa。有关其工作原理的更多信息,请参阅 /usr/share/doc 中的 BIND 文档。(如果您安装了 bind-doc 或 bind9-doc)

上面示例中的 “type” 指定您将成为该域的主服务器还是从服务器。 type master 表示您的 DNS 服务器将不依赖于任何其他人来获取有关该域的信息。可以设置其他系统来执行该域的区域传输。区域传输基本上意味着将信息传输到另一个 DNS 服务器,以便可以使用该服务器执行 DNS 查找。如果您要从另一个服务器提取信息,则需要改为使用 type slave。

上面示例中的 “file” 指定存储或将要存储信息的实际文件名。默认情况下,这些文件将(或应该)位于 /var/named 中。(除非您更改了 /etc/named.conf 中的 “directory” 语句。)

默认情况下,BIND 没有设置太多安全性,任何人都可以远程提取您的信息。要控制谁可以执行区域传输并因此从您的服务器提取信息,请将此行添加到您的 named.conf 文件

     
             allow-transfer "192.168.100.1";  /* this line */

此行将进入 options 部分,如下所示

     options {
             directory "/var/named";
             allow-transfer "192.168.100.1";  
     };

将 192.168.100.1 替换为您希望能够从您的站点执行区域传输的服务器的 IP 地址。注意:这并不意味着未在此处列出的人员将无法从您的服务器执行 nslookup。这只是意味着他们必须知道他们在寻找什么。他们必须知道主机名或 IP 地址才能执行查找。他们将无法仅提取存储在您的数据库文件中的所有数据。


8.3.2 区域文件

区域文件(或数据库文件)是您的 BIND 系统的核心。这是存储有关哪个主机名与哪个 IP 地址关联的所有信息的地方。


8.3.2.1 域区域文件

这是 yourdomain.com 的域文件的示例。请注意,这是一个非常通用的示例,并且还有更多功能。有关这些功能的帮助,请参阅 BIND 文档。

     ;
     ; BIND data file for yourdomain.com
     ;
     @       IN      SOA     yourdomain.com. root.yourdomain.com. (
                                   1         ; Serial
                              604800         ; Refresh
                               86400         ; Retry
                             2419200         ; Expire
                              604800 )       ; Default TTL
     
             IN      NS      dns.yourdomain.com.
     	IN	MX	10	mail.yourdomain.com.
     
     www	IN	A	192.168.100.5
     dns	IN	A	192.168.100.10
     mail	IN	A	192.168.100.20

以 ; 开头的任何行都是注释行,BIND 会忽略它。前 6 行是区域的配置文件行。这些行告诉它区域是什么 (yourdomain.com),谁负责 (root.yourdomain.com,相当于 root@yourdomain.com) 以及其他一些内容。这些其他内容包括用于跟踪更新时间的序列号、刷新数据库的频率、重试区域传输的频率、区域信息何时过期以及默认生存时间。 *重要提示* 每次更改区域文件时,都必须递增序列号。如果您不这样做,可能会出现问题,尤其是在您是向辅助站点提供信息的主服务器的情况下。如果您同时拥有主系统和从系统,则大多数此类信息仅会使用。

接下来的两行告诉它谁是主 DNS 服务器,谁应该接收此域的邮件。您可以拥有每个列表的多个条目。要添加更多 DNS 服务器,只需完全重复列出的内容,并将 dns.yourdomain.com 替换为另一个 DNS 服务器。要添加另一个邮件服务器,您可以执行相同的操作,但您有一个额外的字段。 MX 行中的 “10” 表示优先级,数字越低优先级越高。这意味着如果您有 2 个 MX 条目,一个为 10,另一个为 20,它将尝试将邮件传递到优先级为 10 的 MX 条目,如果失败,则会转到优先级为 20 的 MX 条目。

区域文件的其余部分列出了您的所有主机和 IP。有关更多信息、其他功能和此信息的配置,请查看 BIND 文档。


8.3.2.2 反向文件

反向查找文件几乎与域文件相同,只有细微的变化。这是一个反向查找文件的示例。

     ;
     ; BIND reverse data file for 192.168.100.0
     ;
     @       IN      SOA     yourdomain.com. root.yourdomain.com. (
                                   1         ; Serial
                              604800         ; Refresh
                               86400         ; Retry
                             2419200         ; Expire
                              604800 )       ; Default TTL
     ;
             IN      NS      dns.yourdomain.com.
     
     5	IN	PTR	www.yourdomain.com.
     10	IN	PTR	dns.yourdomain.com.
     20	IN	PTR	mail.yourdomain.com.

此文件的第一部分与域区域文件的第一部分完全相同。底部部分是不同的地方。这次我们首先列出 IP 地址的最后一部分,然后最后列出主机名。

这里您必须注意两件事。您必须在此处使用完全限定域名,并且必须在其末尾放置一个 “.”。这两件事对于文件很重要,如果您不这样做,将会发生奇怪的事情。另一种可能性是使用 “$ORIGIN”,它是一个域名,会自动附加到所有不以点结尾的名称。可以在 db 文件中使用 $ORIGIN 更改 origin。不要忘记 $ORIGIN 的结尾点!

     $ORIGIN yourdomain.com.

[Paul Albitz, Cricket Liu: DNS and BIND, O'Reilly & Accosiates, Inc, 1st Edition July 1994, page 136]


8.4 设置主 DNS 服务器

主 DNS 服务器是 DNS 文件的主副本所在的位置。它可以是独立系统,也可以通过执行区域传输来支持其他服务器(辅助服务器)。区域传输就是这样,将区域文件从一个系统传输到另一个系统。这就是主服务器将其区域信息分发到其他服务器的方式。

本节将介绍如何将您的 Debian 系统设置为主 DNS 服务器。我将介绍如何创建一个虚假域并配置 BIND 以使用该域。


8.4.1 准备工作

我们在这里要做的是创建一个新域。为了我们的目的,我们将使用 foo.org。在本节中,我们将设置您的 Debian 系统作为 foo.org 的主服务器。

为了让您更好地理解这一切是如何运作的,我将在示例中使用以下服务器及其对应的 IP。

     
     www.foo.org  =  192.168.100.10
     news.foo.org =  192.168.100.20
     mail.foo.org =  192.168.100.30
     dns.foo.org  =  192.168.100.40
     dns2.foo.org =  192.168.100.50

在我们的示例中使用这些,dns.foo.org 将代表您的 Debian 服务器。 dns2.foo.org 将在 设置辅助 DNS 服务器,第 8.5 节 中使用。您还将看到我们正在使用 192.168.100.x 子网。在我们的示例中,我们将成为此子网的主服务器。


8.4.2 为您的新 DNS 域配置 BIND

现在配置 BIND。如 高级配置,第 8.3 节 所示,配置 BIND 相当简单。同样,我不会介绍任何高级配置,但如果您确实需要帮助,请查看 BIND 8.0 在线文档


8.4.2.1 区域文件

首先我们需要创建 2 个文件。一个用于您的 foo.org 域,另一个用于您的 192.168.100.x 子网。我们将从 foo.org 域文件开始。您需要在 /var/named 中创建一个名为 foo.db 的文件。(此文件可以随意命名,但我在此示例中使用此名称)。该文件应类似于以下内容

     
     ;
     ; BIND data file for foo.db
     ; /var/named/foo.db
     ;
     @       IN      SOA     foo.org. root.foo.org. (
                          1998121401         ; Serial
                              604800         ; Refresh
                               86400         ; Retry
                             2419200         ; Expire
                              604800 )       ; Default TTL
     
             IN      NS      dns.foo.org.
     
             IN      MX      10      mail.foo.org.
     
     www	IN	A	192.168.100.10
     news	IN	A	192.168.100.20
     mail	IN	A	192.168.100.30
     dns	IN	A	192.168.100.40
     dns2	IN	A	192.168.100.50

请注意,在上面的示例中,我使用 1998121401 作为序列号。我这样做主要是为了跟踪文件上次修改的时间。它告诉我文件上次修改时间是 1998-12-14,并且是当天第一次 (01) 修改。您不必这样做,但您确实需要确保每次修改序列号时都递增它。(特别是如果您有辅助服务器)

现在您需要创建您的 192.168.100.x 子网文件。因此在 /var/named 中创建一个名为 192.168.100.db 的文件。它需要看起来有点像这样

     
     ;
     ; BIND reverse data file for 192.168.100.0
     ; /var/named/192.168.100.db
     ;
     @       IN      SOA     foo.org. root.foo.org. (
                          1998121401         ; Serial
                              604800         ; Refresh
                               86400         ; Retry
                             2419200         ; Expire
                              604800 )       ; Default TTL
     
             IN      NS      dns.foo.org.
     
     10	IN	PTR	www.foo.org.
     20	IN	PTR	news.foo.org.
     30	IN	PTR	mail.foo.org.
     40	IN	PTR	dns.foo.org.
     50	IN	PTR	dns2.foo.org.

请注意每个主机名末尾的点 (.)(例如 www.foo.org.)。句点必须在那里,否则您的区域将无法被 BIND 正确读取。


8.4.2.2 named.conf

现在我们需要将您的新域添加到 BIND 配置文件。因此,继续编辑您的 /etc/named.conf 文件,并在底部添加以下行。

     
     zone "foo.org" {
             type master;
             file "foo.db";
     };
     
     zone "100.168.192.in-addr.arpa" {
             type master;
             file "192.168.100.rev";
     };

现在保存该文件,您就完成了。您现在要做的就是执行 /etc/init.d/bind reload 并进行测试。有关测试 BIND 的帮助,请查看 测试,第 8.6 节


8.5 设置辅助 DNS 服务器

辅助 DNS 服务器基本上只是一个备份服务器。它不保存区域信息的主版本,而是保存它们的副本。大多数站点在远程位置使用辅助服务器或减少主服务器上的负载。辅助服务器在指定的时间执行区域传输,以确保它具有最新版本的区域信息。


8.5.1 准备工作

设置主服务器和辅助服务器的最大区别在于您的区域文件已经构建完成。您必须做的唯一更改是告诉两个系统上的 BIND 此服务器是辅助服务器并执行区域传输。


8.5.2 将 BIND 配置为新 DNS 域的辅助服务器


8.5.2.1 对主服务器的更改

首先,我们需要对您的主服务器进行更改,以便它知道您的新辅助服务器。在您的主服务器上,编辑您的 foo.db 域文件,并将以下行添加到其中。(注意:此处显示完整文件)

     
     ;
     ; BIND data file for foo.db
     ; /var/named/foo.db
     ;
     @       IN      SOA     foo.org. root.foo.org. (
                          1998121401         ; Serial
                              604800         ; Refresh
                               86400         ; Retry
                             2419200         ; Expire
                              604800 )       ; Default TTL
     
             IN      NS      dns.foo.org.
     	IN	NS	dns2.foo.org.	; ADD THIS LINE ***
     
             IN      MX      10      mail.foo.org.
     
     www     IN      A       192.168.100.10
     news    IN      A       192.168.100.20
     mail    IN      A       192.168.100.30
     dns     IN      A       192.168.100.40
     dns2    IN      A       192.168.100.50

现在编辑您的 /var/named/192.168.100.db 文件并执行相同的操作。

     
     ;
     ; BIND reverse data file for 192.168.100.0
     ; /var/named/192.168.100.db
     ;
     @       IN      SOA     foo.org. root.foo.org. (
                          1998121401         ; Serial
                              604800         ; Refresh
                               86400         ; Retry
                             2419200         ; Expire
                              604800 )       ; Default TTL
     
             IN      NS      dns.foo.org.
     	IN	NS	dns2.foo.org.	;  ADD THIS LINE ***
     
     10      IN      PTR     www.foo.org.
     20      IN      PTR     news.foo.org.
     30      IN      PTR     mail.foo.org.
     40      IN      PTR     dns.foo.org.
     50      IN      PTR     dns2.foo.org.

您通过添加新的 IN NS 行所做的是告诉 BIND dns2.foo.org 也是 foo.org 和 192.168.100.x 子网的授权 DNS 服务器。使用 BIND 8.x,这也告诉 bind,每当对区域文件进行更改时,它都需要通知 dns2.foo.org 已进行更改,以便 dns2.foo.org 可以执行区域传输。

请注意,如果您已将主服务器设置为仅允许来自特定主机的区域传输,则需要确保 dns2.foo.org 包含在该列表中。(/etc/named.conf 中的 allows-transfer 选项。)

您现在可以重新加载主服务器上的 BIND。(/etc/init.d/bind reload


8.5.2.2 named.conf

现在在您的辅助服务器上,您需要在 /etc/named.conf 文件中添加信息。将以下行添加到 /etc/named.conf 的底部

     
     zone "foo.org" {
             type slave;
             file "foo.db";
     	masters {
     		192.168.100.40;
     	};
     };
     
     zone "100.168.192.in-addr.arpa" {
             type slave;
             file "192.168.100.db";
     	masters {
     		192.168.100.40;
     	};
     };

上面告诉 BIND 您的服务器是 foo.org 和 192.168.100.x 子网的 slave(辅助服务器)。它还告诉 BIND 它需要从 192.168.100.40(即 dns.foo.org)获取区域信息(foo.db 和 192.168.100.db)。


8.5.2.3 区域文件

因为这是一个辅助服务器,所以无需对区域文件执行任何操作。奖励!只要您在主服务器上正确设置了一切,并且您的 named.conf 文件配置正确,一切都将正常工作。

您已完成。重新加载您的 BIND 并进行测试。 /etc/init.d/bind reload


8.5.2.4 信息

现在。每次修改主站点的区域文件并且序列号递增时,BIND 都会向所有辅助服务器(区域文件中任何带有 IN NS 语句的服务器)发送通知,声明已进行更改。这些服务器上的 BIND 随后将检查其自己的区域文件,以查看它是否具有相同的版本。如果主服务器通知它的版本较新,那么它将执行区域传输并获取较新版本。

如果一切设置正确,您将永远不需要对辅助服务器进行任何更改,除非升级 BIND 本身。从现在开始的所有更改都应在主服务器上进行。例外情况是,如果在主服务器上添加了新区域,您还需要将其添加到辅助服务器,如果您希望它们成为新区域的辅助服务器。


8.6 测试

测试是容易的部分。如果您按照此处列出的说明进行操作,一切都应该正常工作。在我们能够正确测试之前,您需要做的第一件事是重新加载数据库。

     /etc/init.d/bind reload

然后您需要继续加载 nslookup 并运行一些查询

     snowcrash:~# nslookup
     Default Server:  localhost
     Address:  127.0.0.1
     
     >

首先,当您运行 nslookup 时,它应该看起来像上面的示例,除非您创建了自己的域并且正在使用 127.0.0.1 以外的 IP 地址。您应该能够键入 www.debian.org,它应该思考一会儿并返回 www.debian.org 的 IP 地址。

如果您按照此处的说明设置新域,则您的 nslookup 应该看起来更像这样

     snowcrash:~# nslookup
     Default Server:  dns.foo.org
     Address:  192.168.100.40
     
     >

您现在应该能够查找我们添加到您的区域文件中的每个主机。(www.foo.org、mail.foo.org 等...)


8.7 获取 BIND 帮助

以下站点是 BIND 帮助的良好来源。


[ 上一节 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 下一节 ]


Debian GNU/Linux 网络管理员手册 (已过时文档)

本手册自 2000 年起已过时且已弃用,请参阅 http://www.debian.org/doc/user-manuals#quick-reference

Ardo van Rangelrooij ardo.van.rangelrooij@tip.nl
Oliver Elphick olly@lfix.co.uk
Ivan E. Moore II rkrusty@debian.org
Duncan C. Thomson duncan@sciuro.demon.co.uk