20.4. 配置文件 /etc/named.conf

BIND 名称服务器本身的所有设置都被储存在文件 /etc/named.conf 中。但是,将要处理的域的区域数据(由主机名、IP 地址等组成)储存在 /var/lib/named 目录下单独的文件中。稍后将介绍其详细信息。

/etc/named.conf 大致分为两部分。一部分是存放常规设置的 options 部分,另一部分由各个域的 zone 项组成。而 logging 部分和 acl(访问控制列表)项是可选的。注释行以 # 符号或 // 开头。例 20.2 “基本的 /etc/named.conf”显示了一个最小的 /etc/named.conf

例 20.2. 基本的 /etc/named.conf

options { 
        directory "/var/lib/named"; 
        forwarders { 10.0.0.1; };
        notify no;
};

zone "localhost" in {
       type master;
       file "localhost.zone";
};

zone "0.0.127.in-addr.arpa" in {
        type master;
        file "127.0.0.zone";
};

zone "." in {
        type hint;
        file "root.hint";
};

20.4.1. 重要的配置选项

directory "filename";

指定目录,BIND 可以在该目录中找到包含区域数据的文件。通常,此目录是 /var/lib/named

forwarders { ip-address; };

指定在无法直接解析 DNS 请求的情况下应将其转发到的名称服务器(大多数情况下是提供商的名称服务器)。用 IP 地址(例如 10.0.0.1)替换 ip-address

forward first;

在尝试通过根名称服务器解析 DNS 请求前,对 DNS 请求进行转发。可以写入 forward only(而不是 forward first)转发所有请求并且不将任何请求发送到根名称服务器。这可以用于防火墙配置。

listen-on port 53 { 127.0.0.1; ip-address; };

指示 BIND 通过哪个网络接口和哪个端口来接受客户机查询。不需要显式指定 port 53,因为 53 是默认端口。输入 127.0.0.1 允许接收来自 Localhost 的请求。如果完全省略此项,则在默认情况下使用所有接口。

listen-on-v6 port 53 {any; };

指示 BIND 应通过哪个端口监听 IPv6 客户机请求。唯一可以替代 any 的是 none。就 IPv6 而言,服务器只接受通配符地址。

query-source address * port 53;

如果防火墙阻止外发的 DNS 请求,则需要此项。此项指示 BIND 从端口 53 向外部发送请求,而不使用端口号大于 1024 的任何端口。

query-source-v6 address * port 53;

指示 BIND 将哪个端口用于 IPv6 查询。

allow-query { 127.0.0.1; net; };

定义客户机可以从中发送 DNS 请求的网络。用地址信息(例如 192.168.1/24)替换 net。末尾的 /24 是网络掩码的缩写表示,本例中,网络掩码是 255.255.255.0

allow-transfer ! *;;

控制哪些主机可以请求区域传送。在本例中,用 !* 可以完全拒绝此类请求。如果没有此项,则可以从任何位置请求区域传送,没有任何限制。

statistics-interval 0;

如果缺少此项,则 BIND 每小时在 /var/log/messages 中生成几行统计信息。将其设置为 0 可以完全禁止生成此类统计信息,也可以设置时间间隔(以分钟为单位)。

cleaning-interval 720;

此选项定义 BIND 间隔多长时间清除其超速缓存。每次出现此选项都会在 /var/log/messages 中触发一项。时间是以分钟为单位指定的。默认值是 60 分钟。

interface-interval 0;

BIND 定期在网络接口中搜索新接口或不存在的接口。如果将该值设置为 0,则不执行搜索,BIND 只监听启动时检测到的接口。否则,采用分钟定义时间间隔。默认值是 60 分钟。

notify no;

指定 no 将阻止其它名称服务器在区域数据被更改或名称服务器被重启动时得到通知。

20.4.2. 日志记录

可以在 BIND 中详细配置日志记录的内容、方式和位置。通常,默认设置已足够了。例 20.3 “禁用日志记录的项” 显示了此项最简单的形式,并完全禁止任何日志记录。

例 20.3. 禁用日志记录的项

logging {
        category default { null; };
};

20.4.3. 区域项

例 20.4. my-domain.de 的区域项

zone "my-domain.de" in {
      type master;
      file "my-domain.zone";
      notify no;
};

zone 后,指定要管理的域名 my-domain.de,后跟 in 和用花括号括起来的相关选项块,如 例 20.4 “my-domain.de 的区域项” 所示。要定义从属区域,请将 type 切换为 slave 并将管理此区域的名称服务器指定为 master(它可能是另一个主区域的从属区域),如 例 20.5 “other-domain.de 的区域项” 所示。

例 20.5. other-domain.de 的区域项

zone "other-domain.de" in {
      type slave;
      file "slave/other-domain.zone";
      masters { 10.0.0.1; }; 
};

区域选项:

type master;

通过指定 master,指示 BIND 由本地名称服务器对区域进行处理。这假定已用正确的格式创建了区域文件。

type slave;

从另一个名称服务器传送此区域。必须将它与 masters 一起使用。

type hint;

hint 类型的区域 . 用于设置根名称服务器。此区域定义可以保留原样。

file my-domain.zone 或 file “slave/other-domain.zone”;

此项指定域的区域数据所在的文件。从属区域不需要此文件,因为此数据是从另一个名称服务器中获取的。要区分主文件和从属文件,请对从属文件使用目录 slave

masters { server-ip-address; };

只有从属区域需要此项。它指定应从哪个名称服务器传送区域文件。

allow-update {! *; };

此选项控制外部写访问,这将允许客户机创建 DNS 项(出于安全原因,通常不希望出现这种情况)。没有此项,就不允许进行区域更新。上述项可以实现相同的结果,因为 !* 有效地禁止了此类操作。