NSD
概述
nsd(8) 是由 NLnet Labs 开发的高性能权威 DNS 服务器,内置于 OpenBSD 基本系统。该服务器专用于安全、高效地提供 DNS 区域服务,不支持递归查询。unbound(8) 负责为客户端执行 DNS 解析,而 nsd(8) 只应答其显式配置所服务的域的查询。
本章介绍如何在 OpenBSD 上配置与管理 nsd(8),以便向公众或内部网络提供 DNS 区域服务。
DNS 服务对比
要理解 nsd(8) 在 OpenBSD DNS 生态中的定位,可参考下表:
特性
unbound(8)
nsd(8)
named(8)(BIND)
用途
解析器
权威服务器
两者皆可
是否包含于 OpenBSD 基本系统
是
是
否
递归解析
是
否
是
权威服务器
否
是
是
DNSSEC 校验
是
否(仅提供 DNSSEC 数据)
是
DNS-over-TLS 支持
是
否
是
复杂度
低
低
高
使用场景
客户端系统
托管区域
混合环境
安装
nsd(8) 包含于 OpenBSD 7.8 基本系统,无需额外安装软件包。
开机启用 nsd:
启动守护进程:
主配置目录为 /var/nsd。配置文件存放于:
区域文件通常存放于:
配置
基础配置文件
下面是域 example.com 的最小配置示例:
server: 段定义守护进程级选项,zone: 段定义每个待服务的域。
在 /var/nsd/etc/nsd.conf 创建该文件后,测试配置:
区域文件格式
区域文件采用标准 BIND 风格语法:
将该文件保存为 /var/nsd/zones/example.com.zone。
权限
确保属主与权限正确:
区域编译与重载
nsd(8) 提供区域服务前,须先将区域编译为二进制数据库:
该命令读取配置并编译区域数据。随后重载:
查看运行状态:
NSD 与 DNSSEC
nsd(8) 不校验 DNSSEC,但可提供已签名的区域数据。签名须在外部完成(例如使用 ldns-signzone)。
对区域文件签名的示例:
更新 nsd.conf 引用已签名的区域文件,然后照常重建与重载。
控制 NSD
使用 nsd-control(8) 进行运行时控制:
nsd-control 工具需要控制密钥与证书,使用以下命令创建:
该命令生成 /var/nsd/etc/nsd_control.key 与 .pem 文件。
日志与调试
日志通过 syslog(3) 发送至 daemon 设施。查看日志:
调试时提高详细级别:
然后重启服务:
使用示例
提供域 example.com 服务:
将区域文件放在 /var/nsd/zones/example.com.zone
在 /var/nsd/etc/nsd.conf 中添加配置
执行:
验证:
关键文件与目录汇总
/var/nsd/etc/nsd.conf
NSD 配置文件
/var/nsd/zones/
区域数据文件
/var/nsd/db/nsd.db
编译后的二进制区域数据库
/var/nsd/run/nsd.pid
nsd(8) 的 PID 文件
/var/nsd/etc/nsd_control.*
nsd-control 的 TLS 密钥与证书
/var/log/daemon
经 syslog 输出的日志
最后更新于