简介
unbound 是一个开源的、高性能、验证、递归和转发 DNS 解析器。unbound 设计的目标是提供快速、安全且易于管理的 DNS 服务,适用于各种规模的企业和组织。
源代码地址:https://github.com/NLnetLabs/unbound
官方手册:https://unbound.docs.nlnetlabs.nl/en/latest/index.html
用 unbound 搭建 DNS 服务器,通过对已购买域名设置 NS 记录的 IP 地址,指向此服务器,就可以作为这些域名的 权威域名服务器。
另外,unbound 可以作为 DNS 缓存使用,首次解析的结果在 unbound 中缓存,当相同的查询再次到来时,可以提高 DNS 解析速度。例如:在垃圾邮件检测中,垃圾邮件的黑名单、情报信息和验证信息记录在DNS中,会非常频繁的查询 DNS 信息,所以使用 unbound 作为 DNS缓存,可以很大提高 DNS 的解析速度。
对于DNS还不是太熟悉的同学,可以参看往期文章:DNS记录这件小事 https://www.madbull.site/?p=1719
安装
安装非常简单,基本上系统源里都带,直接 apt 或者 dnf、yum 安装就可以了。注意,不同系统源安装的版本可能不一样,配置文件给出的默认配置也不一样。我这里安装的版本是 1.22.0,本文以此为例。

配置部署
参考官方文档可以了解配置的详情,这里列出常用的几个配置。
1、添加根DNS(也就是 . 域)的访问地址
可以配置在 /etc/unbound/unbound.conf.d/root-auto-trust-anchor-file.conf
文件中。内容如下:
forward-zone:
name: "."
forward-addr: 8.8.8.8
forward-addr: 114.114.114.114
2、配置server相关信息
和上一步一样,也可以配置在 /etc/unbound/unbound.conf.d/root-auto-trust-anchor-file.conf
文件中,下边的示例在最后一行增加了 本地域配置文件。
server:
# The following line will configure unbound to perform cryptographic
# DNSSEC validation using the root trust anchor.
auto-trust-anchor-file: "/var/lib/unbound/root.key"
interface: 0.0.0.0
interface: ::0
access-control: 127.0.0.0/8 allow
access-control: 192.168.0.0/16 allow
num-threads: 2
msg-cache-size: 128m
msg-cache-slabs: 8
rrset-cache-size: 64m
rrset-cache-slabs: 8
cache-max-negative-ttl: 600
verbosity: 3
use-syslog: yes
include: /etc/unbound/unbound.conf.d/zone.cf
具体配置项含义看名称也差不多能理解,具体可以参看官方文档:https://unbound.docs.nlnetlabs.nl/en/latest/manpages/unbound.conf.html
这两步就是本次示例中 /etc/unbound/unbound.conf.d/root-auto-trust-anchor-file.conf
配置文件的所有内容。合在一起即可。
3、添加本地域相关信息
由于上一步添加了 include: /etc/unbound/unbound.conf.d/zone.cf
,我们就可以直接在 /etc/unbound/unbound.conf.d/zone.cf
文件里添加DNS记录的配置了。内容示例如下:
local-zone: "hhjjkkll.com." static
local-data: "hhjjkkll.com. 86400 IN A 192.168.1.57"
local-data: "mail.hhjjkkll.com. 86400 IN A 192.168.1.57"
local-data: "tt.hhjjkkll.com. 86400 IN A 192.168.1.57"
local-data: "smtp.hhjjkkll.com. 86400 IN CNAME mail.hhjjkkll.com"
local-data: "imap.hhjjkkll.com. 86400 IN CNAME mail.hhjjkkll.com"
local-data: "pop3.hhjjkkll.com. 86400 IN CNAME mail.hhjjkkll.com"
local-data: "hhjjkkll.com. 86400 IN MX 10 mail.hhjjkkll.com"
local-data: "hhjjkkll.com. 86400 IN TXT v=spf1 a:mail.hhjjkkll.com -all"
4、修改本地DNS指向,并测试
直接修改 /etc/resolv.conf
文件。如果这个文件是其他程序生成的,请按照其程序手册进行修改。最终/etc/resolv.conf
内容如下:
nameserver 127.0.0.1
nameserver 8.8.8.8
nameserver 114.114.114.114
接下来就可以重启,并进行测试了:

5、远程管理工具
unbound 提供了一个远程管理工具 unbound-control,可以远程管理 unbound服务,做一些启动、停止、重新加载配置文件、查看缓存、查看状态等等工作,具体可以查看 unbound-control 的文档。
手册地址:https://unbound.docs.nlnetlabs.nl/en/latest/manpages/unbound-control.html
如果只管理本地 unbound 不需要任何配置,默认给出的配置是,使用本地域套接字通讯。如果远端管理走网络需要加密和认证以保证安全,就需要下面的步骤。只需要本地管理不需要远端加密通讯管理的,可以跳过这一步。具体方法:
第 5.1 步、生成服务端和客户端的私钥和证书,用于 TLS 加密和验证。
使用 unbound-control-setup 生成四个文件:unbound_control.key、unbound_control.pem、unbound_server.key、unbound_server.pem

这四个文件说明如下:
unbound_control.key
:这是私钥文件,用于签名从unbound-control
工具发送到unbound服务器的命令。这个文件应该保持严格保密,只有授权的管理员才能访问。unbound_control.pem
:这是与unbound_control.key
对应的公钥证书。unbound服务器使用这个公钥来验证收到的控制命令确实是由持有匹配私钥的人签名的。unbound_server.key
:这是unbound服务器的私钥,它用于签署对unbound-control
发出的查询的响应。同样地,这个私钥也需要严格保护,防止未授权访问。unbound_server.pem
:这是与unbound_server.key
对应的公钥证书。当unbound-control
向unbound服务器发送请求时,它会使用这个公钥来验证服务器的响应确实是来自持有匹配私钥的合法服务器。
还那么这四个问题什么关系呢?unbound_control.key
和 unbound_server.key
很好理解,客户端和服务端的私钥嘛。关键是 unbound_control.pem
和 unbound_server.pem
的关系。使用 openssl 查看一下主题和签名CA,如下图:

这下就很明了了。
unbound_server.pem
主题和签名CA一样,那么他是自签名证书。
unbound_control.pem
主题是自己的,签名CA是 unbound,也就是用服务端的证书和私钥做的签名。
第 5.2 步、在服务端开启远端管理功能
修改 /etc/unbound/unbound.conf.d/remote-control.conf 配置文件,添加 服务端 和 客户端 TLS 加密通讯和身份验证需要的这四个文件的路径,并打开远端管理功能,设置绑定 IP 和 端口。内容如下:
remote-control:
control-enable: yes
control-interface: 0.0.0.0
control-port: 8953
server-key-file: "/etc/unbound/unbound_server.key"
server-cert-file: "/etc/unbound/unbound_server.pem"
control-key-file: "/etc/unbound/unbound_control.key"
control-cert-file: "/etc/unbound/unbound_control.pem"
其中,control-interface 和 control-port 是远程管理功能需要绑定的 IP 和 端口。
实际上在服务端(即 unbound 服务测)的配置并不需要最后两行配置( control-key-file、control-cert-file),这是给本地的 unbound-control 使用的。
以上配置完成后,就可以使用本地的 unbound-control 管理 unbound了。测试如下图:

但是如果是跨主机的,就需要下一步的部署。
第 5.3 步、远端客户端配置
如果想在远端使用 unbound-control 管理这台设备的 unbound 服务,就需要把 以服务端做为CA给客户端颁发证书,具体过程可以参看往期的两篇文章:
自签名证书:https://www.madbull.site/?p=601
openssl颁发包含主题替代名的证书–SAN:https://www.madbull.site/?p=1111
也可以直接把生成的这两个文件 unbound_control.key、unbound_control.pem 拿过来给客户端使用。另外需要服务端证书文件 unbound_server.pem 作为信任的CA机构证书,也要拿过来。
下面是直接拿另外一个远端的 unbound 服务里生成的这三个文件,给出的示例,省去了重新颁发证书的过程。
在客户端测(也就是 unbound-control 所在的主机上)创建一个配置文件,我这里命名为:ctrl.cf,配置证书、私钥、信任CA的路径,内容如下:
remote-control:
control-enable: yes
server-cert-file: "/root/tunbound/unbound_server.pem"
control-key-file: "/root/tunbound/unbound_control.key"
control-cert-file: "/root/tunbound/unbound_control.pem"
目录结构如下:

在管理远端的时候,指定配置文件地址和远端的IP:PORT。
指令:unbound-control -c ctrl.cf -s xx.xx.xx.xx@8953 list_forwards

最终配置文件目录
如下图:

以上就是本文章所有内容,欢迎讨论。
发表回复