unbound–DNS服务器搭建

unbound–DNS服务器搭建

简介

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.keyunbound_server.key 很好理解,客户端和服务端的私钥嘛。关键是 unbound_control.pemunbound_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

最终配置文件目录

如下图:

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注