11.2. BIND
BIND
(Berkeley Internet Name Domain),Red Hat Enterprise Linux 包含的 DNS
服务器。着重介绍其结构和配置文件,并论述了如何对其进行本地和远程管理。
11.2.1. 空白区域
BIND
配置大量“空白区域”,以防止递归服务器向无法使用它们的互联网服务器发送不必要请求(因而造成进行查询的客户端的 SERVFAIL 响应延迟)。这些空白区域可保证返回即时且授权的 NXDOMAIN 响应。配置选项 empty-zones-enable
控制是否生成空白区域,还可同时使用 disable-empty-zone
选项在其使用的默认前缀列表中禁用一个或多个空白区域。
11.2.2. 配置 DHCP 服务器
named
服务后,它会如 表 11.1 “named 服务配置文件” 所述从文件中读取配置。
表 11.1. named 服务配置文件
路径 | 描述 |
---|---|
/ | 配置文件 |
/etc/named/ | 主配置文件中包含的配置文件辅助目录。 |
{
和 }
)括起来。注:编辑此文件时必须非常小心,以避免语法错误,否则将无法启动 named
服务。典型的 /etc/named.conf
文件类似如下:
statement-1 ["statement-1-name"] [statement-1-class] { option-1; option-2; option-N; }; statement-2 ["statement-2-name"] [statement-2-class] { option-1; option-2; option-N; }; statement-N ["statement-N-name"] [statement-N-class] { option-1; option-2; option-N; };
注意
chroot
环境中运行。在那种情况下,初始化脚本将使用 mount --bind
命令挂载上述配置文件,以便可以在这个环境以外管理该配置。不需要向 /var/named/chroot/
目录复制任何内容,因为会自动挂载该目录。这样可简化维护服务,因为在 chroot
环境中运行时,不需要对 BIND
配置文件进行任何特别处理。可使用 BIND
管理所需的一切,而无需在 chroot
环境中运行。
/var/named/chroot/
中的对应挂载点为空,则以下目录会自动挂载至 /var/named/chroot/
目录:
/etc/named
/etc/pki/dnssec-keys
/run/named
/var/named
/usr/lib64/bind
或/usr/lib/bind
(视具体架构而定)。
/var/named/chroot/
中不存在以下文件,则也会将其挂载到目标文件中:
/
/etc/rndc.conf
/etc/rndc.key
/etc/named.rfc1912.zones
/etc/named.dnssec.keys
/etc/named.iscdlv.key
/etc/named.root.key
重要
chroot
环境中的文件生成一个备用副本后,方可编辑原始文件。也可以使用禁用 “edit-a-copy” 模式的编辑器。例如:要使用 Vim 编辑在 chroot
环境中运行的 BIND 的配置文件 /etc/named.conf
,请作为 root
运行以下命令:
~]# vim -c "set backupcopy=yes" /etc/named.conf
11.2.2.1. 在 chroot 环境中安装 BIND
chroot
环境中运行的 BIND,请作为 root
运行以下命令:
~]# yum install bind-chroot
named-chroot
服务,首先请检查是否运行 named
服务,方法是运行以下命令:
~]$ systemctl status named
如果该服务正在运行,则必须将其禁用。
root
运行以下命令,禁用 named
:
~]# systemctl stop named
~]# systemctl disable named
然后,作为 root
运行以下命令启用 named-chroot
服务:
~]# systemctl enable named-chroot
~]# systemctl start named-chroot
root
运行以下命令,检查 named-chroot
服务状态:
~]# systemctl status named-chroot
11.2.2.2. 常用语句类型
/etc/named.conf
中常用的语句类型:
-
acl
acl
(访问控制列表)语句可让您定义主机组,这样可以允许或者拒绝对该名称服务器的访问。它使用以下格式:acl acl-name { match-element; ... };
acl-name 语句名称是访问控制列表名称,match-element 选项通常是独立IP
地址(比如10.0.1.1
),或者无类别域际路由选择(CIDR)网络标记(例如:10.0.1.0/24
)。有关已经定义的关键字列表请查看 表 11.2 “预定义访问控制列表”。表 11.2. 预定义访问控制列表
关键字 描述 any
与所有 IP
地址匹配。localhost
与本地系统使用的 IP
地址匹配。localnets
与所有本地系统连接的网络中的 IP
地址匹配。none
与任何 IP
地址都不匹配。acl
语句在与其他语句联合使用时特别有用,比如options
。例 11.2 “联合使用 acl 和 Options” 定义两个访问控制列表,black-hats
和red-hats
。并在为red-hats
赋予普通访问授权的同时,在black-hats
中添加black-hats
。例 11.2. 联合使用 acl 和 Options
acl black-hats { 10.0.2.0/24; 192.168.0.0/24; 1234:5678::9abc/24; }; acl red-hats { 10.0.1.0/24; }; options { blackhole { black-hats; }; allow-query { red-hats; }; allow-query-cache { red-hats; }; };
-
include
include
语句可让您在/etc/named.conf
中包含文件,这样就可将可能的敏感数据保存在有严格权限的独立文件中。其格式如下:include "file-name"
file-name 语句名称是文件的绝对路径。例 11.3. 在 /etc/named.conf 中添加文件
include "/etc/named.rfc1912.zones";
-
options
options
语句可让您定义全局服务器配置选项,也可让您设定其他语句的默认形式。您可使用它指定named
工作目录位置,允许的查询类型等等。其格式如下:options { option; ... };
有关常用 option 指令列表请查看下面的 表 11.3 “常用配置选项”。表 11.3. 常用配置选项
选项 描述 allow-query
指定哪些主机可以在名称服务器中查询授权资源记录。它接受访问控制列表、 IP
地址集合、或者 CIDR 标记中的网络。所有主机均默认有此功能。allow-query-cache
指定哪些主机可以在名称服务器中查询未授权数据,比如递归查询。默认只允许 localhost
和localnets
。blackhole
指定哪些主机不能查询名称服务器。这个选项可在某个主机或者网络向服务器提出过多请求时使用。默认选项为 none
。directory
为 named
服务指定工作目录。默认选项为/var/named/
。disable-empty-zone
用于在使用的默认前缀列表中禁用一个或多个空白区域。可在 options 语句及 view 语句中指定。可多次使用该选项。 dnssec-enable
指定是否返回与 DNSSEC 关联的资源记录。默认选项为 yes
。dnssec-validation
指定是否提供使用 DNSSEC 认证的资源记录。默认选项为 yes
。empty-zones-enable
控制是否生成空白区域。只能在 options 语句中指定。 forwarders
为名称服务器指定有效 IP
地址列表,所有申请应转发到此地址进行解析。forward
指定forwarders
指令行为。它接受以下选项:first
— 解析该名称前,服务器将查询forwarders
指令中列出的名称服务器。only
— 无法查询forwarders
指令中列出的名称服务器前,该完全将不会自行解析该名称。
listen-on
指定侦听查询的 IPv4
网络接口。在DNS
服务器中还作为网关使用。可以使用这个选项回答来自只使用单一网络的查询。默认使用所有IPv4
接口。listen-on-v6
指定侦听查询的 IPv4
网络接口。在DNS
服务器中还作为网关使用。您可以使用这个选项回答来自只使用单一网络的查询。默认使用所有IPv6
接口。max-cache-size
指定服务器缓存使用的最大内存数。达到极限后,该服务器可让记录永久过期,这样就不会超过极限。在使用多个 view 的服务器中,该极限分别适用于每个查看缓存。默认选项为 32M
。notify
指定更新 zone 后是否通知辅名称服务器。它接受以下选项:yes
— 该服务器会通知所有辅名称服务器。no
— 该服务器不会通知任何辅名称服务器。master-only
— 该服务器只通知该区域的主服务器。explicit
— 该服务器只通知在 zone 语句的also-notify
列表中指定的辅服务器。
pid-file
指定由 named
服务生成的进程 ID 文件位置。recursion
指定是否作为递归服务器使用。默认选项为 yes
。statistics-file
为统计文件指定备选位置。默认使用 /var/named/named.stats
文件。注意
已将named
用于运行时数据的目录从 BIND 默认位置/var/run/named/
移动到新位置/run/named/
。结果是将 PID 文件从默认位置/var/run/named/named.pid
移动到新位置/run/named/named.pid
。此外,已将 session-key 文件移动至/run/named/session.key
。需要在选项部分使用语句中指定这些位置。详情请查看 例 11.4 “使用 options 语句”。重要
要防止分布式拒绝服务(distributed denial of service,DDoS)攻击,建议您使用allow-query-cache
选项只为客户端的特定子集限制递归DNS
服务。完整选项列表请参考 第 11.2.8.1 节 “已安装文档” 中提供的《BIND 9 管理员参考手册》及named.conf
manual page。例 11.4. 使用 options 语句
options { allow-query { localhost; }; listen-on port 53 { 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; max-cache-size 256M; directory "/var/named"; statistics-file "/var/named/data/named_stats.txt"; recursion yes; dnssec-enable yes; dnssec-validation yes; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; };
-
zone
zone
语句可让您定义区域的特点,比如其配置文件位置和具体区域选项,并可用来覆盖全局options
语句。其格式如下:zone zone-name [zone-class] { option; ... };
如 表 11.4 “Zone 语句中的常用选项” 所述,zone-name 属性是区域的名称,zone-class 是区域的自选等级,option 是zone
语句选项。zone-name 属性特别重要,因为它是为$ORIGIN
指令分配的默认值,该指令用于/var/named/
目录中的对应区域文件。named
守护进程可将区域名称附加到区域文件中列出的任意非全限定域名中。例如:如果zone
语句定义了example.com
名称空间,请使用example.com
作为 zone-name,这样就可将其放在example.com
区域文件主机名的最后。有关区域文件的详情,请查看 第 11.2.3 节 “编辑区域文件”。表 11.4. Zone 语句中的常用选项
选项 描述 allow-query
指定哪些客户端可请求查询这个区域的信息。这个选项会覆盖全局 allow-query
选项。默认允许所有查询请求。allow-transfer
指定哪些辅服务器可请求传递区域的信息。默认允许所有传递请求。 allow-update
指定哪些主机可在其区域中动态更新信息。默认选项是拒绝所有动态更新请求。注:允许主机更新其区域信息时应格外小心。不要在这个选项中设置IP
地址,除非该服务器位于可信网络中。请如 第 11.2.6.3 节 “事务处理签名(Transaction SIGnatures,TSIG)” 所述使用 TSIG 密钥。file
指定 named
工作目录中包含区域配置数据的文件名称。masters
指定可请求授权 zone 信息的 IP
地址。只有将区域定义为type
slave
时方可使用这个选项。notify
指定更新 zone 后是否通知辅名称服务器。它接受以下选项:yes
— 该服务器会通知所有辅名称服务器。no
— 该服务器不会通知任何辅名称服务器。master-only
— 该服务器只通知该区域的主服务器。explicit
— 该服务器只通知在 zone 语句的also-notify
列表中指定的辅服务器。
type
指定区域类型。它接受以下选项:delegation-only
— 加强基础区域的授权状态,比如 COM、NET 或者 ORG。任何没有具体说明或暗示授权的回答都将被视为NXDOMAIN
。这个选项只可用于在递归或者缓存部署中使用的 TLD(顶级域,Top-Level Domain)或者 root 区域文件。forward
— 将所有关于这个区域信息的请求转发到其他名称服务器。hint
— 用来指向 root 名称服务器的特殊区域类型,root 名称服务器是用来解析使用其他方法无法了解的 zone。hint
区域的默认配置就足够。master
— 这个 zone 授权的专用名称服务器。如果某个区域的配置文件位于这个系统中,则应将该 zone 设定为master
。slave
— 作为这个区域的专用从属服务器的名称服务器。在masters
指令中指定主服务器。
主、辅名称服务器/etc/named.conf
文件的更改包括添加、修改、或者删除zone
语句,且让名称服务器可有效工作通常只需要zone
语句选项的小子集。在 例 11.5 “主名称服务器的 Zone 语句” 中,将区域识别为example.com
,类型设定为master
,并让named
服务读取/var/named/example.com.zone
文件。它还只允许一个辅名称服务器(192.168.0.2
)转移到该 zone。例 11.5. 主名称服务器的 Zone 语句
zone "example.com" IN { type master; file "example.com.zone"; allow-transfer { 192.168.0.2; }; };
辅服务器的zone
语句略微不同。类型设定为slave
,同时masters
指令会通告named
主服务器的IP
地址。在 例 11.6 “辅名称服务器的 Zone 语句” 中,将named
服务配置为在192.168.0.1
IP
地址向主服务器查询example.com
zone 的信息。然后会将接收到的信息保存在/var/named/slaves/example.com.zone
文件中。注:必须将所有从属 zone 都放在/var/named/slaves/
目录中,否则该服务就无法转移到该 zone。例 11.6. 辅名称服务器的 Zone 语句
zone "example.com" { type slave; file "slaves/example.com.zone"; masters { 192.168.0.1; }; };
11.2.2.3. 其他语句类型
/etc/named.conf
中不常用的语句类型:
-
controls
controls
语句可让您配置使用rndc
命令管理named
服务所需的各种安全要求。有关rndc
程序及其用法请参考 第 11.2.4 节 “使用 rndc 程序”。-
key
key
语句可让您根据名称定义具体密钥。密钥是用来认证各种动作,比如安全更新或者使用rndc
命令。key
有两个选项:algorithm algorithm-name
— 使用的算法类型(例如:hmac-md5
)。secret "key-value"
— 加密密钥。
有关rndc
程序及其用法请参考 第 11.2.4 节 “使用 rndc 程序”。-
logging
logging
语句可让您使用各种类型的日志,也称频道。可以在该语句中使用channel
选项,构建自定义日志类型,该类型可有自己的文件名(file
)、大小限制(size
)、版本号(version
)以及重要程度(severity
)。定义自定义频道后,可使用category
选项将频道分类并在重启named
服务后开始记录。默认情况下,named
会向rsyslog
守护进程发送标准信息,这些信息会保存在/var/log/messages
文件中。BIND 中内置了几个使用不同安全等级标准频道,比如default_syslog
(处理信息日志消息)和default_debug
(具体处理 debug 消息)。默认分类称为default
,它使用内置频道进行一般日志记录,不需要任何特殊配置。自定义日志记录过程会非常繁琐,且不在本章论述范围内。有关创建自定义 BIND 日志的详情请参考 第 11.2.8.1 节 “已安装文档” 中提供的《BIND 9 管理员参考手册》。-
server
server
语句可让您指定影响named
服务响应远程名称服务器方式的具体选项,特别要考虑通知和区域传送。transfer-format
选项控制每条信息附带的资源记录数。它可以是one-answer
(只有一个资源记录),也可以是many-answers
(多条资源记录)。备注:many-answers
选项更有效,但旧的 BIND 版本不支持。-
trusted-keys
-
view
view
语句可让您根据正在进行主机查询的名称服务器所在网络生成特殊视图。这可让有些主机接收某个区域的回答,而其他主机接收完全不同的信息。另外,还可让某些区域只能用于具体的可信主机,而非可信主机只能查询其他区域。只要名称是唯一的就可以尽量使用多视图。match-clients
选项可让您指定在具体窗口中使用的IP
地址。如果在窗口中使用options
语句,它会覆盖已经配置的全局 options 语句。最后,大多数view
语句包含多个可在match-clients
列表中使用的zone
语句。
11.2.2.4. 注释标签
/etc/named.conf
文件还包含注释。named
服务会忽略这些注释,但可为用户提供有价值的附加性信息。以下是有效注释标签:
//
//
字符后到该行结束的所有文本都视为注释。例如:notify yes; // notify all secondary nameservers
#
#
字符后到该行结束的所有文本都视为注释。例如:notify yes; # notify all secondary nameservers
/*
和*/
- 所有
/*
和*/
之间的文本都视为注释。例如:notify yes; /* notify all secondary nameservers */
11.2.3. 编辑区域文件
/var/named/
的 named
工作目录中,同时每个区域文件都是根据 zone
语句中的 file
选项命名,通常在某种程度上与有问题的域关联,并将该文件识别为包含区域数据,比如 example.com.zone
。
表 11.5. named 服务区域文件
路径 | 描述 |
---|---|
/var/named/ | named 服务的工作目录。不允许该名称服务器写入这个目录。 |
/var/named/slaves/ | 从属区域的目录。named 服务可写入这个目录。 |
/var/named/dynamic/ | 其他文件的目录,比如动态 DNS (DDNS)区域,或者管理的 DNSSEC 密钥。named 服务可写入这个目录。 |
/var/named/data/ | 各种统计和 debug 文件目录。named 服务可写入这个目录。 |
11.2.3.1. 常用指令
$
)开始,后接该指令名称,且通常是在该文件的开始。以下是区域文件中的常用指令:
-
$INCLUDE
$INCLUDE
指令可让您在出现其他文件的时候包括该文件,这样其他区域设置就可以保存在不同的区域文件中。例 11.7. 使用 $INCLUDE 指令
$INCLUDE /var/named/penguin.example.com
-
$ORIGIN
$ORIGIN
指令可让您将区域名附加到不合格记录中,比如那些只有 hostname 的记录。注:如果在/etc/named.conf
中指定该区域,则没有必要使用这个指令,因为默认使用该区域名称。例 11.8. 使用 $ORIGIN 指令
$ORIGIN example.com.
-
$TTL
$TTL
指令可让您该区域的默认Time to Live(TTL)值,即区域记录可在多长时间内有效。每个资源记录都包含各自的 TTL 值,这些值可覆盖这个指令。增大这些值可让远程名称服务器将区域 信息缓存更长时间,减小该区域的查询次数,并延长传播资源记录更改所需时间。例 11.9. 使用 $TTL 指令
$TTL 1D
11.2.3.2. 常用资源记录
-
A
- 地址记录指定要为某个名称分配的
IP
地址。它使用以下格式:hostname IN A IP-address
如省略 hostname 值,则该记录会指向最新指定的 hostname。例 11.10. 使用资源记录
server1 IN A 10.0.1.3 IN A 10.0.1.5
-
CNAME
- 正规名称 记录将名称彼此配对。因此,这类记录有时是指别名记录。它使用以下格式:
alias-name IN CNAME real-name
CNAME
记录是使用常用命名方案服务最长指向的记录,比如 Web 服务器的www
。但其用法有很多局限:- CNAME 记录不应指向其他 CNAME 记录。这主要是避免可能的无线循环。
- CNAME 记录不应包含其他资源记录类型(比如 A、NS、MX 等等)。唯一例外的是登录该区域后与 DNSSEC 相关的记录(即 RRSIG、NSEC 等)
- 其他指向主机完全限定域名(FQDN)资源记录(即 NS、MX、PTR)不应指向 CNAME 记录。
例 11.11. 使用 CNAME 资源记录
server1 IN A 10.0.1.5 www IN CNAME server1
-
MX
- 邮件互换记录指定发送到由这个区域控制具体名称空间的邮件应保存在哪里。它使用以下格式:
IN MX preference-value email-server-name
email-server-name 是完全限定域名(FQDN)。preference-value 可使用数字为名称空间将电子邮件服务器分级,为某些电子邮件系统赋予其他系统没有的属性。使用最小 preference-value 值的MX
资源记录是首选系统。但多个电子邮件服务器可使用同一值以便平均分配邮件量。在 例 11.12 “使用 MX 资源记录” 中,第一个mail.example.com
电子邮件服务器是mail2.example.com
电子邮件服务器在接收来自example.com
域的邮件时的首选。例 11.12. 使用 MX 资源记录
example.com. IN MX 10 mail.example.com. IN MX 20 mail2.example.com.
-
NS
- 名称服务器 记录可为具体区域宣布授权名称服务器。它使用以下格式:
ssh username@penguin.example.net
nameserver-name 应该是完全限定域名(FQDN)。注:当有两个名称服务器都作为该域的授权服务器时,哪个是主服务器,哪个是辅服务器并不重要。它们都是授权的服务器。例 11.13. 使用 NS 资源记录
IN NS dns1.example.com. IN NS dns2.example.com.
-
PTR
- 指针记录指向该名称空间的另一部分。它使用以下格式:
last-IP-digit IN PTR FQDN-of-system
last-IP-digit 指令是IP
地址的最后一个数字,且 FQDN-of-system 是完全限定域名(FQDN)。 -
SOA
- 权限启动记录发布有关名称服务器的名称空间的重要授权信息。它在指令后面,是区域文件的第一个资源记录。它使用以下格式:
@ IN SOA primary-name-server hostmaster-email ( serial-number time-to-refresh time-to-retry time-to-expire minimum-TTL )
正确的数值是:@
符号将$ORIGIN
指令(如果没有设定$ORIGIN
指令,即区域名称)作为这个SOA
资源记录定义的名称空间。- primary-name-server 指令是为这个域授权的主名称服务器的主机名。
- hostmaster-email 指令是与名称空间联络的个人电子邮件。
- serial-number 指令是个数值,每次区域文件有变化时这个值就会增加,说明
named
现在应该重新载入这个区域。 - time-to-refresh 指令是在该区域文件有任何修改时,辅名称服务器用来决定在询问主名称服务器前需要等待多长时间的数值。
- time-to-retry 指令是在主名称服务器不响应的事件中,辅名称服务器用来决定在提交刷新请求前需要等待多长时间的数值。如果主服务器在 time-to-expire 指令规定的时间内没有回应刷新请求,那么辅服务器会停止响应,因为授权服务器对那个名称服务器有疑问。
- 在 BIND 4 和 8 中,minimum-TTL 指令是其他名称服务器缓存该区域信息的时间。在 BIND 9 中,它定义为否定回答提供的缓冲时间长度。否定回答缓存最长可设定为 3 小时(即
3H
)。
配置 BIND 时,所有时间都使用秒为单位。但在指定秒之外的时间单位时可使用缩写,比如分钟(M
)、小时(H
)、天(D
)和周(W
)。表 11.6 “秒与其他时间单位对比” 为您提供秒为单位的时间以及使用其他格式的对等时间。表 11.6. 秒与其他时间单位对比
秒 其他时间单位 60 1M
1800 30M
3600 1H
10800 3H
21600 6H
43200 12H
86400 1D
259200 3D
604800 1W
31536000 365D
例 11.14. 使用 SOA 资源记录
@ IN SOA dns1.example.com. hostmaster.example.com. ( 2001062501 ; serial 21600 ; refresh after 6 hours 3600 ; retry after 1 hour 604800 ; expire after 1 week 86400 ) ; minimum TTL of 1 day
11.2.3.3. 注释标签
named
服务会忽略这些注释,但可为用户提供有价值的附加信息。分号之后到这一行结束前的所有文本都视为注释。例如:
604800 ; expire after 1 week
11.2.3.4. 用法示例
11.2.3.4.1. 简单区域文件
SOA
值。
例 11.15. 简单区域文件
$ORIGIN example.com. $TTL 86400 @ IN SOA dns1.example.com. hostmaster.example.com. ( 2001062501 ; serial 21600 ; refresh after 6 hours 3600 ; retry after 1 hour 604800 ; expire after 1 week 86400 ) ; minimum TTL of 1 day ; ; IN NS dns1.example.com. IN NS dns2.example.com. dns1 IN A 10.0.1.1 IN AAAA aaaa:bbbb::1 dns2 IN A 10.0.1.2 IN AAAA aaaa:bbbb::2 ; ; @ IN MX 10 mail.example.com. IN MX 20 mail2.example.com. mail IN A 10.0.1.5 IN AAAA aaaa:bbbb::5 mail2 IN A 10.0.1.6 IN AAAA aaaa:bbbb::6 ; ; ; This sample zone file illustrates sharing the same IP addresses ; for multiple services: ; services IN A 10.0.1.10 IN AAAA aaaa:bbbb::10 IN A 10.0.1.11 IN AAAA aaaa:bbbb::11 ftp IN CNAME services.example.com. www IN CNAME services.example.com. ; ;
dns1.example.com
和 dns2.example.com
,并使用 A
记录分别将其绑定到 10.0.1.1
和 10.0.1.2
IP
地址。
MX
记录配置的电子邮件服务器通过 A
记录指向 mail
和 mail2
。因为这些名称没有以点结尾,它们后面的 $ORIGIN
域会将其扩展到 mail.example.com
和 mail2.example.com
。
CNAME
记录将可在标准名称中使用的服务,比如 www.example.com
(WWW)指向正确的服务器。
/etc/named.conf
中类似如下的 zone
语句将这个区域调入服务:
zone "example.com" IN { type master; file "example.com.zone"; allow-update { none; }; };
11.2.3.4.2. 逆向名称解析区域文件
IP
地址转换称完全限定域名(FQDN)的具体名称空间。它与标准区域文件很相似,除了在连接 IP
地址和完全限定域名时使用 PTR
资源记录,如 例 11.16 “逆向名称解析区域文件” 所示。
例 11.16. 逆向名称解析区域文件
$ORIGIN 1.0.10.in-addr.arpa. $TTL 86400 @ IN SOA dns1.example.com. hostmaster.example.com. ( 2001062501 ; serial 21600 ; refresh after 6 hours 3600 ; retry after 1 hour 604800 ; expire after 1 week 86400 ) ; minimum TTL of 1 day ; @ IN NS dns1.example.com. ; 1 IN PTR dns1.example.com. 2 IN PTR dns2.example.com. ; 5 IN PTR server1.example.com. 6 IN PTR server2.example.com. ; 3 IN PTR ftp.example.com. 4 IN PTR ftp.example.com.
IP
地址 10.0.1.1
通过 10.0.1.6
指向对应的完全限定域名。
/etc/named.conf
中类似如下的 zone
语句将这个区域调入服务:
zone "1.0.10.in-addr.arpa" IN { type master; file "example.com.rr.zone"; allow-update { none; }; };
zone
语句相比,除区域名称外太多什么不同之处。注:逆向名称解析要求区域文件中前三个逆向解析的 IP
地址块后接 .in-addr.arpa
。这样可让在逆向名称解析区域文件中使用的单独 IP
块与这个区域关联。
11.2.4. 使用 rndc 程序
rndc
程序是可用来管理 named
服务的命令行工具,在本地机器和远程机器中都可使用,其用法如下:
rndc
[option...] command [command-option]
11.2.4.1. 配置该工具
named
配置为侦听所选端口(默认为 953
),同时必须在该服务和 rndc
程序中使用同一密钥。
rndc
配置文件位于 /etc/rndc.conf
。如果没有该文件,则该程序将使用 /etc/rndc.key
中的密钥,该文件是在使用 rndc-confgen -a
命令安装的过程中自动生成。
named
服务是使用 /etc/named.conf
配置文件中的 controls
语句配置的。除非使用这个语句,否则只能允许来自回送地址(127.0.0.1
)的连接,并使用 /etc/rndc.key
中的密钥。
重要
root
用户可以读取 /etc/rndc.key
文件:
~]# chmod o-rwx /etc/rndc.key
11.2.4.2. 检查服务状态
named
服务当前的状态:
~]# rndc status
version: 9.7.0-P2-RedHat-9.7.0-5.P2.el6
CPUs found: 1
worker threads: 1
number of zones: 16
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
11.2.4.3. 重新载入配置及 Zone
~]# rndc reload
server reload successful
reload
命令后指定其名称即可重新载入单一 zone,例如:
~]# rndc reload localhost
zone reload up-to-date
~]# rndc reconfig
注意
DNS
(DDNS)的区域,请确定首先运行 freeze
命令:
~]# rndc freeze localhost
thaw
命令再次允许 DDNS
,并重新载入该区域文件:
~]# rndc thaw localhost
The zone reload and thaw was successful.
11.2.4.4. 更新区域密钥
sign
命令更新 DNSSEC 密钥并注册该区域。例如:
~]# rndc sign localhost
auto-dnssec
选项设定为 maintain
。例如:
zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; auto-dnssec maintain; };
11.2.4.5. 启用 DNSSEC 验证
root
运行以下命令启用 DNSSEC 验证:
~]# rndc validation on
~]# rndc validation off
11.2.4.6. 启用 Query Logging
root
运行以下命令启用(或禁用,假设目前处于启用状态)查询日志:
~]# rndc querylog
root
运行 status
命令检查当前设置。
11.2.5. 使用 dig 程序
dig
程序是一个命令行工具,可让您执行 DNS
查询和 debug 名称服务器配置。其常规用法如下:
dig
[@server] [option...] name type
11.2.5.1. 查找名称服务器
dig
name NS
例 11.17. 名称服务器查询示例
~]$ dig example.com NS
; <<>> DiG 9.7.1-P2-RedHat-9.7.1-2.P2.fc13 <<>> example.com NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57883
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;example.com. IN NS
;; ANSWER SECTION:
example.com. 99374 IN NS a.iana-servers.net.
example.com. 99374 IN NS b.iana-servers.net.
;; Query time: 1 msec
;; SERVER: 10.34.255.7#53(10.34.255.7)
;; WHEN: Wed Aug 18 18:04:06 2010
;; MSG SIZE rcvd: 77
11.2.5.2. 查找 IP 地址
IP
地址:
dig
name A
例 11.18. IP 地址查询示例
~]$ dig example.com A
; <<>> DiG 9.7.1-P2-RedHat-9.7.1-2.P2.fc13 <<>> example.com A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4849
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 155606 IN A 192.0.32.10
;; AUTHORITY SECTION:
example.com. 99175 IN NS a.iana-servers.net.
example.com. 99175 IN NS b.iana-servers.net.
;; Query time: 1 msec
;; SERVER: 10.34.255.7#53(10.34.255.7)
;; WHEN: Wed Aug 18 18:07:25 2010
;; MSG SIZE rcvd: 93
11.2.5.3. 查找主机名
IP
地址查找主机名:
dig
-x
address
例 11.19. 主机名查询示例
~]$ dig -x 192.0.32.10
; <<>> DiG 9.7.1-P2-RedHat-9.7.1-2.P2.fc13 <<>> -x 192.0.32.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29683
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 6
;; QUESTION SECTION:
;10.32.0.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
10.32.0.192.in-addr.arpa. 21600 IN PTR www.example.com.
;; AUTHORITY SECTION:
32.0.192.in-addr.arpa. 21600 IN NS b.iana-servers.org.
32.0.192.in-addr.arpa. 21600 IN NS c.iana-servers.net.
32.0.192.in-addr.arpa. 21600 IN NS d.iana-servers.net.
32.0.192.in-addr.arpa. 21600 IN NS ns.icann.org.
32.0.192.in-addr.arpa. 21600 IN NS a.iana-servers.net.
;; ADDITIONAL SECTION:
a.iana-servers.net. 13688 IN A 192.0.34.43
b.iana-servers.org. 5844 IN A 193.0.0.236
b.iana-servers.org. 5844 IN AAAA 2001:610:240:2::c100:ec
c.iana-servers.net. 12173 IN A 139.91.1.10
c.iana-servers.net. 12173 IN AAAA 2001:648:2c30::1:10
ns.icann.org. 12884 IN A 192.0.34.126
;; Query time: 156 msec
;; SERVER: 10.34.255.7#53(10.34.255.7)
;; WHEN: Wed Aug 18 18:25:15 2010
;; MSG SIZE rcvd: 310
11.2.6. BIND 的高级性能
named
服务提供名称解析服务,或者作为具体域的授权。但 BIND 9 有大量高级功能,可提供更安全、有效的 DNS
服务。
重要
11.2.6.1. 多窗口
DNS
条目,同时允许本地网络内客户端的查询。
/etc/named.conf
配置文件中添加 view
语句方可配置多视图。使用 match-clients
选项与 DNS
地址或者整个网络匹配,并为其提供特殊选项和区域数据。
11.2.6.2. 增量区域传送(IXFR)
11.2.6.3. 事务处理签名(Transaction SIGnatures,TSIG)
IP
地址方法进行的传送认证,因为攻击者不但需要访问要传送区域的 IP
地址,还需要知道密钥。
重要
IP
地址的认证方法。
11.2.6.4. DNS 安全扩展(DNSSEC)
DNS
数据的原始认证,现有拒绝的认证以及数据完整性。当将某个具体域标记为安全时,会为每个验证失败的资源记录返回 SERFVAIL
响应。
dig
程序调试使用 DNSSEC 签名的域或者可识别 DNSSEC 的解析程序。有用的选项有 +dnssec
(设定 DNSSEC OK 字节请求与 DNSSEC 关联的资源记录),+cd
(让递归名称服务器不要验证响应),和 +bufsize=512
(将数据包大小改为 512B 以便通过某些防火墙)。
11.2.7. 常见的要避免的错误
- 正确使用分号和括号
/etc/named.conf
文件中省略的分号或者不匹配的括号可造成named
服务无法启动。- 正确使用句号(即
.
符号) - 在区域文件中,域名结尾处的句号代表完全限定域名。如果省略,
named
服务会添加区域名称或者$ORIGIN
值完成它。 - 编辑区域文件时增加序列号
- 如果没有增加序列号,那么主名称服务器会有正确的新信息,但将永远无法将该更改通知辅名称服务器,也就不会尝试它们在那个 zone 中的数据。
- 要配置防火墙允许 NFS,请:
- 如果防火墙阻断
named
服务到其他名称服务器之间的连接,建议最好可随时修改防火墙设置。警告
在DNS
查询中使用固定UDP
源端口是一个潜在的安全漏洞,这个漏洞可让攻击者更容易地执行缓存中毒攻击。为防止这个攻击,默认DNS
发送随机短端口。将您的防火墙配置为允许来自随机UDP
源端口的传出查询。默认的使用范围为1024
到65535
。
11.2.8. 其他资料
11.2.8.1. 已安装文档
/usr/share/doc/bind-version/
- 主要目录中包含大多数最新的文档。该目录包含《BIND 9 管理员参考手册》,格式有 HTML 和 PDF,该文档详细介绍了 BIND 资源要求、如何配置名称服务器的不同类型;如何执行负载平衡;以及其他高级主题。
/usr/share/doc/bind-version/sample/etc/
- 该目录包含
named
配置文件示例。
rndc(8)
rndc
名称服务器控制程序的首页页中包含其用法的文档。named(8)
- 互联网名称服务器
named
的手册页包含可用于控制 BIND 名称服务器守护进程的各类参数的文档。 lwresd(8)
- 轻加权解析程序守护进程
lwresd
的手册页中包含守护进程及其用法的文档。 named.conf(5)
- 该 man page 中有可在
named
配置文件中使用选项的完整列表。 rndc.conf(5)
- 该 man page 中有可在
rndc
配置文件中使用选项的完整列表。
11.2.8.2. 在线资源
- https://access.redhat.com/site/articles/770133
- 有关在
chroot
环境中运行 BIND 的 Red Hat 知识库文章,其中包括与 Red Hat Enterprise Linux 6 的对比。 - https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/
- 《Red Hat Enterprise Linux 7 安全指南》有关于 DNSSEC 完整论述。
- https://www.icann.org/namecollision
- ICANN 有关域名冲突的常见问题。