4.6. 在 BIND DNS 服务器中配置区
				DNS 区域是包含域空间中特定子树的资源记录的数据库。例如,如果您负责 example.com 域,可以在 BIND 中为它设置一个区。因此,客户端可将 www.example.com 解析为在这个区中配置的 IP 地址。
			
4.6.1. 区域文件中的 SOA 记录
SOA(start of authority)记录在一个 DNS 区中是必必需的记录。例如,如果多个 DNS 服务器对某个区域具有权威,那么此记录非常重要,但也指向 DNS 解析器。
BIND 中的 SOA 记录具有以下语法:
name class type mname rname serial refresh retry expire minimum
name class type mname rname serial refresh retry expire minimum
					为提高可读性,管理员通常将区域文件中的记录分成多行,其中包含以分号(;)开头的注释。请注意,如果您分割 SOA 记录,圆括号将记录保留在一起:
				
						请注意完全限定域名 (FQDN) 末尾的结尾点。FQDN 包含多个域标签,它们用点分开。由于 DNS root 有一个空标签,所以 FQDN 以点结尾。因此,BIND 在没有结尾点的情况下将区域名称附加到名称中。不含尾部点的主机名(例如 ns1.example.com)会被扩展为 ns1.example.com.example.com.,对于主域名服务器,这不是正确的地址。
					
以下是 SOA 记录中的字段:
- 
							name:区域的名称,即所谓的源(origin)。如果将此字段设置为@,BIND 会将其扩展为/etc/named.conf中定义的区域名称。
- 
							class:在 SOA 记录中,必须将此字段始终设置为 Internet (IN)。
- 
							type:在 SOA 记录中,必须将此字段始终设置为SOA。
- 
							mname(主名称):此区域的主域名服务器的主机名。
- 
							rname(负责名称): 负责此区域的电子邮件地址。请注意,格式不同。您必须将 at 符号 (@) 替换为点 (.)。
- serial:此区域文件的版本号。次要域名服务器仅在主服务器上的序列号较高时更新其区域副本。- 格式可以是任意数字值。通常的格式是 - <year><month><day><two-digit-number>。使用这种格式,在理论上可以每天修改区域文件上百次。
- 
							refresh:在检查主服务器更新时,次要服务器应等待的时间。
- 
							retry:当次要服务器在尝试失败后重试查询主服务器的时间长度。
- 
							expire:当所有之前的尝试失败时,次要服务器停止查询主服务器的时间长度。
- 
							minimum:RFC 2308 将此字段的含义改为负缓存时间。兼容解析器使用它来确定缓存NXDOMAIN名称错误的时间。
						refresh, retry, expire, 和 minimum 项中的值定义了一个时间(以秒为单位)。但是,为了提高可读性,请使用时间后缀,如 m 表示分钟、h 表示小时,以及 d 表示天。例如,3h 代表 3 小时。
					
4.6.2. 在 BIND 主服务器上设置转发区
					转发区域将名称映射到 IP 地址和其他信息。例如,如果您负责域 example.com,您可以在 BIND 中设置转发区来解析名称,如 www.example.com。
				
先决条件
- 已配置了 BIND,例如作为缓存名称服务器。
- 
							named或named-chroot服务正在运行。
流程
- 在 - /etc/named.conf文件中添加区定义:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 这些设置定义: - 
									此服务器作为 example.com区域的主服务器 (类型 master)。
- 
									/var/named/example.com.zone文件是区域文件。如果您设置了相对路径,如本例中所示,这个路径相对于您在options语句中的目录中创建的directory相对。
- 任何主机都可以查询此区域。另外,还可指定 IP 范围或 BIND 访问控制列表 (ACL) 别名来限制访问。
- 没有主机可以传输区域。仅在设置次要服务器并且仅为次要服务器的 IP 地址时才允许区域传送。
 
- 
									此服务器作为 
- 验证 - /etc/named.conf文件的语法:- named-checkconf - # named-checkconf- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果命令没有显示输出,则语法为正确的。 
- 使用以下内容创建 - /var/named/example.com.zone文件:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 这个区域文件: - 
									将资源记录的默认生存时间 (TTL) 值设置为 8 小时。如果没有时间后缀(例如没有使用 h指定小时),BIND 会将该值解析为秒。
- 包含所需的 SOA 资源记录,以及有关该区域的详细信息。
- 
									将 ns1.example.com设置为此区域的权威 DNS 服务器。要正常工作,区域需要至少一个域名服务器 (NS) 记录。但是,若要与 RFC 1912 兼容,您需要至少有两个域名服务器。
- 
									将 mail.example.com设置为example.com域的邮件交换器 (MX)。主机名前面的数字值是记录的优先级。较低值的条目具有更高的优先级。
- 
									设置 www.example.com的 IPv4 和 IPv6 地址、mail.example.com和ns1.example.com。
 
- 
									将资源记录的默认生存时间 (TTL) 值设置为 8 小时。如果没有时间后缀(例如没有使用 
- 在区域文件上设置安全权限,仅允许 - named组读取它:- chown root:named /var/named/example.com.zone chmod 640 /var/named/example.com.zone - # chown root:named /var/named/example.com.zone # chmod 640 /var/named/example.com.zone- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 验证 - /var/named/example.com.zone文件的语法:- named-checkzone example.com /var/named/example.com.zone - # named-checkzone example.com /var/named/example.com.zone zone example.com/IN: loaded serial 2022070601 OK- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 重新载入 BIND: - systemctl reload named - # systemctl reload named- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果在 change-root 环境中运行 BIND,请使用 - systemctl reload named-chroot命令来重新加载该服务。
验证
- 从 - example.com区域查询不同的记录,并验证输出是否与您在区域文件中配置的记录匹配:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 本例假定 BIND 在同一主机上运行并响应 - localhost接口上的查询。
4.6.3. 在 BIND 主服务器中设置反向区
					反向区域将 IP 地址映射到名称。例如,如果您负责 IP 范围 192.0.2.0/24,您可以在 BIND 中设置反向区域,以将 IP 地址从这个范围内的 IP 地址解析为主机名。
				
						如果您为整个类网络创建一个反向区域,请相应地命名区域。例如,对于 C network 192.0.2.0/24,区域的名称是 2.0.192.in-addr.arpa。如果要为不同的网络大小创建反向区域,如 192.0.2.0/28,区域的名称为 28-2.0.192.in-addr.arpa。
					
先决条件
- 已配置了 BIND,例如作为缓存名称服务器。
- 
							named或named-chroot服务正在运行。
流程
- 在 - /etc/named.conf文件中添加区定义:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 这些设置定义: - 
									此服务器作为 2.0.192.in-addr.arpa反向区域的主服务器(type master)。
- 
									/var/named/2.0.192.in-addr.arpa.zone文件是区域文件。如果您设置了相对路径,如本例中所示,这个路径相对于您在options语句中的目录中创建的directory相对。
- 任何主机都可以查询此区域。另外,还可指定 IP 范围或 BIND 访问控制列表 (ACL) 别名来限制访问。
- 没有主机可以传输区域。仅在设置次要服务器并且仅为次要服务器的 IP 地址时才允许区域传送。
 
- 
									此服务器作为 
- 验证 - /etc/named.conf文件的语法:- named-checkconf - # named-checkconf- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果命令没有显示输出,则语法为正确的。 
- 使用以下内容创建 - /var/named/2.0.192.in-addr.arpa.zone文件:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 这个区域文件: - 
									将资源记录的默认生存时间 (TTL) 值设置为 8 小时。如果没有时间后缀(例如没有使用 h指定小时),BIND 会将该值解析为秒。
- 包含所需的 SOA 资源记录,以及有关该区域的详细信息。
- 
									将 ns1.example.com设置为此反向区域的权威 DNS 服务器。要正常工作,区域需要至少一个域名服务器 (NS) 记录。但是,若要与 RFC 1912 兼容,您需要至少有两个域名服务器。
- 
									设置 192.0.2.1和192.0.2.30地址的指针(PTR)记录。
 
- 
									将资源记录的默认生存时间 (TTL) 值设置为 8 小时。如果没有时间后缀(例如没有使用 
- 在区域文件上设置安全权限,仅允许 - named组读取它:- chown root:named /var/named/2.0.192.in-addr.arpa.zone chmod 640 /var/named/2.0.192.in-addr.arpa.zone - # chown root:named /var/named/2.0.192.in-addr.arpa.zone # chmod 640 /var/named/2.0.192.in-addr.arpa.zone- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 验证 - /var/named/2.0.192.in-addr.arpa.zone文件的语法:- named-checkzone 2.0.192.in-addr.arpa /var/named/2.0.192.in-addr.arpa.zone - # named-checkzone 2.0.192.in-addr.arpa /var/named/2.0.192.in-addr.arpa.zone zone 2.0.192.in-addr.arpa/IN: loaded serial 2022070601 OK- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 重新载入 BIND: - systemctl reload named - # systemctl reload named- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果在 change-root 环境中运行 BIND,请使用 - systemctl reload named-chroot命令来重新加载该服务。
验证
- 从反向区查询不同的记录,并验证输出是否与您在区域文件中配置的记录匹配: - dig +short @localhost -x 192.0.2.1 dig +short @localhost -x 192.0.2.30 - # dig +short @localhost -x 192.0.2.1 ns1.example.com. # dig +short @localhost -x 192.0.2.30 www.example.com.- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 本例假定 BIND 在同一主机上运行并响应 - localhost接口上的查询。
4.6.4. 更新 BIND 区文件
在某些情况下,例如,如果服务器的 IP 地址有变化,您必须更新区域文件。如果多个 DNS 服务器负责某个区,则仅在主服务器中执行这个步骤。存储区域副本的其他 DNS 服务器将通过区域传送接收更新。
先决条件
- zone 被配置。
- 
							named或named-chroot服务正在运行。
流程
- 可选:识别 - /etc/named.conf文件中的区文件的路径:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 您可以在区域定义的 - file指令中找到到区域文件的路径。相对路径相对于- options语句中的- directory设置的相对路径。
- 编辑区域文件: - 进行必要的更改。
- 在 SOA 记录中递增序列号。 重要- 如果序列号等于或低于先前值,次要服务器不会更新其区域的副本。 
 
- 验证区文件的语法: - named-checkzone example.com /var/named/example.com.zone - # named-checkzone example.com /var/named/example.com.zone zone example.com/IN: loaded serial 2022062802 OK- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 重新载入 BIND: - systemctl reload named - # systemctl reload named- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果在 change-root 环境中运行 BIND,请使用 - systemctl reload named-chroot命令来重新加载该服务。
验证
- 查询您添加、修改或删除的记录,例如: - dig +short @localhost A ns2.example.com - # dig +short @localhost A ns2.example.com 192.0.2.2- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 本例假定 BIND 在同一主机上运行并响应 - localhost接口上的查询。
4.6.5. 使用自动密钥生成和区维护功能进行 DNSSEC 区域签名
您可以使用域名系统安全扩展 (DNSSEC) 为区域签名,以确保身份验证和数据完整性。此类区域包含额外的资源记录。客户端可以使用它们来验证区域信息的真实性。
如果您为区启用 DNSSEC 策略功能,BIND 会自动执行以下操作:
- 创建密钥
- 为区域签名
- 维护区域,包括重新签名并定期替换密钥。
要启用外部 DNS 服务器以验证区的真实性,您必须在父区中添加该区域的公钥。请联系您的域供应商或 registry,以了解更多有关如何完成此操作的详细信息。
					此流程使用 BIND 中的内置 default DNSSEC 策略。这个策略使用单一 ECDSAP256SHA 密钥签名。另外,还可创建自己的策略来使用自定义密钥、算法和计时。
				
先决条件
- 
							已安装 BIND 9.16 或更高版本。要满足此要求,请安装 bind9.16软件包,而不是bind。
- 配置您要启用 DNSSEC 的区域。
- 
							named或named-chroot服务正在运行。
- 服务器可将时间与时间服务器同步。对于 DNSSEC 验证,系统时间准确非常重要。
流程
- 编辑 - /etc/named.conf文件,并将- dnssec-policy default;添加到您要启用 DNSSEC 的区域:- zone "example.com" { ... dnssec-policy default; };- zone "example.com" { ... dnssec-policy default; };- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 重新载入 BIND: - systemctl reload named - # systemctl reload named- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果在 change-root 环境中运行 BIND,请使用 - systemctl reload named-chroot命令来重新加载该服务。
- BIND 将公钥存储在 - /var/named/K<zone_name>.+<algorithm>+<key_ID>.key文件中。使用此文件显示区的公钥,格式为父区所需的格式:- DS 记录格式: - dnssec-dsfromkey /var/named/Kexample.com.+013+61141.key - # dnssec-dsfromkey /var/named/Kexample.com.+013+61141.key example.com. IN DS 61141 13 2 3E184188CF6D2521EDFDC3F07CFEE8D0195AACBD85E68BAE0620F638B4B1B027- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- DNSKEY 格式: - grep DNSKEY /var/named/Kexample.com.+013+61141.key - # grep DNSKEY /var/named/Kexample.com.+013+61141.key example.com. 3600 IN DNSKEY 257 3 13 sjzT3jNEp120aSO4mPEHHSkReHUf7AABNnT8hNRTzD5cKMQSjDJin2I3 5CaKVcWO1pm+HltxUEt+X9dfp8OZkg==- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 请求将区域的公钥添加到父区。请联系您的域供应商或 registry,以了解更多有关如何完成此操作的详细信息。
验证
- 从启用了 DNSSEC 签名的区域查询您自己的 DNS 服务器: - dig +dnssec +short @localhost A www.example.com - # dig +dnssec +short @localhost A www.example.com 192.0.2.30 A 13 3 28800 20220718081258 20220705120353 61141 example.com. e7Cfh6GuOBMAWsgsHSVTPh+JJSOI/Y6zctzIuqIU1JqEgOOAfL/Qz474 M0sgi54m1Kmnr2ANBKJN9uvOs5eXYw==- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 本例假定 BIND 在同一主机上运行并响应 - localhost接口上的查询。
- 在将公钥添加到父区并传播到其他服务器后,验证服务器是否将查询上的身份验证数据( - ad)标记设置为已签名区域:- dig @localhost example.com +dnssec - # dig @localhost example.com +dnssec ... ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ...- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow