BIND 9 运行 named 名称服务器。其配置决定它是否以权威方式回答、提供递归、传送区域或接受动态更新。应分别处理这些角色,因为面向互联网的权威服务器不应变成开放递归解析器。
服务器配置 #
named.conf 定义全局选项、访问控制列表、区域和日志。最小的权威配置会限制递归和区域传送:
acl trusted-recursors { 192.0.2.0/24; 2001:db8:1::/48; };
options {
directory "/var/named";
listen-on { any; };
listen-on-v6 { any; };
recursion no;
allow-transfer { none; };
minimal-responses yes;
};
zone "example.net" {
type primary;
file "zones/example.net";
allow-transfer { 192.0.2.53; };
};递归解析器需要 recursion yes,并且需要将 allow-recursion 或 allow-query-cache
ACL 限制为其客户端。除非部署明确提供带有滥用控制的公共解析器,否则绝不要向不可信网络暴露递归。
ACL 可以由 allow-query、allow-recursion、allow-query-cache、allow-transfer
和 match-clients 重用。BIND 的 view 语句会根据源地址、目标地址或 TSIG 身份呈现不同的区域和递归策略:
view "internal" {
match-clients { trusted-recursors; };
recursion yes;
allow-recursion { trusted-recursors; };
zone "example.net" {
type primary;
file "zones/internal/example.net";
};
};
view "external" {
match-clients { any; };
recursion no;
zone "example.net" {
type primary;
file "zones/external/example.net";
};
};启用视图时,应在适用的视图中定义每个客户端可见的区域。将最具体的 match-clients
规则放在前面,因为 BIND 会选择第一个匹配的视图。
区域文件 #
区域文件记录遵循以下格式:
owner [TTL] [class] type rdata$ORIGIN 提供相对名称后缀;$TTL 提供默认 TTL。@ 所有者表示当前 origin。区域顶点需要 SOA 记录和 NS 记录。缺少末尾点的名称相对于 $ORIGIN。
$ORIGIN example.net.
$TTL 3600
@ IN SOA ns1.example.net. hostmaster.example.net. (
2026080701 7200 900 1209600 300 )
IN NS ns1.example.net.
IN NS ns2.example.net.
ns1 IN A 192.0.2.53
www IN A 192.0.2.80
docs IN CNAME www每次发布区域变更时递增 SOA 序列号。从服务器使用该序列号判断是否需要传送。使用明确的 ACL 配置传送,并在适当时使用 TSIG 对其进行身份验证。
A 或 AAAA 记录将名称映射到地址。CNAME 将其所有者设为别名,且不能与该所有者上的普通数据共存。在父区域中使用 NS RRset 委派子区域;当被委派的名称服务器位于被委派名称之下时,在父区域中包含域内 A 或 AAAA glue:
child IN NS ns1.child
ns1.child IN A 192.0.2.91验证和运维 #
重新加载前进行验证:
named-checkconf /etc/named.conf
named-checkzone example.net /var/named/zones/example.net
rndc reload example.net
dig @127.0.0.1 www.example.net A +norecurse更改区域声明后使用 rndc reconfig,更改区域数据后使用 rndc reload。使用
dig 分别查询权威和递归路径,检查状态标志和权威部分,并在防火墙行为不同时测试 UDP 和 TCP。
DNSSEC 增加签名 RRset、DNSKEY 发布以及从父区域开始的 DS 链。BIND 可以通过
dnssec-policy 维护签名和密钥;密钥文件、轮换状态、父区域 DS 更新和时钟同步会因此成为运维依赖。使用 dig +dnssec 验证签名响应,并通过验证解析器进行测试,而不要将存在 RRSIG 视为有效链的证明。
以专用的非特权服务账户运行 named,并确保工作目录、密钥、日志文件和区域文件拥有所需权限。使用 named -g 运行前台诊断,并使用服务管理器执行常规运行。在放弃特权前绑定特权端口,限制可写目录,并让控制通道密钥仅对服务和授权管理员可读。
评论
在 GitHub 上阅读或评论(发表评论需要登录)