1.5. 在 BIND DNS 服务器中配置区
DNS 区域是包含域空间中特定子树的资源记录的数据库。例如,如果您负责 example.com
域,可以在 BIND 中为它设置一个区。因此,客户端可将 www.example.com
解析为在这个区中配置的 IP 地址。
1.5.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 小时。
1.5.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
接口上的查询。
1.5.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
接口上的查询。
1.5.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
接口上的查询。
1.5.5. 使用自动密钥生成和区维护功能进行 DNSSEC 区域签名 复制链接链接已复制到粘贴板!
您可以使用域名系统安全扩展 (DNSSEC) 为区域签名,以确保身份验证和数据完整性。此类区域包含额外的资源记录。客户端可以使用它们来验证区域信息的真实性。
如果您为区启用 DNSSEC 策略功能,BIND 会自动执行以下操作:
- 创建密钥
- 为区域签名
- 维护区域,包括重新签名并定期替换密钥。
要启用外部 DNS 服务器以验证区的真实性,您必须在父区中添加该区域的公钥。请联系您的域供应商或 registry,以了解更多有关如何完成此操作的详细信息。
此流程使用 BIND 中的内置 default
DNSSEC 策略。这个策略使用单一 ECDSAP256SHA
密钥签名。另外,还可创建自己的策略来使用自定义密钥、算法和计时。
先决条件
-
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