Ubuntu 20.04 设置未绑定的 DNS 解析器

Unbound 是一个免费、开源、递归和验证的 DNS 缓存服务器。 它使用 DNS-over-TLS 和 DNS-over-HTTPS 来加密客户端之间的连接。 与 Bind9 相比,Unbound 轻量级且速度极快。 缓存服务器将通过将缓存数据库保存在未绑定服务器上来帮助我们减少网站的加载时间。 它还能够进行 DNSSEC 验证,并可用作信任锚。

在这篇文章中,我们将向我们展示 Ubuntu 20.04 上设置 Unbound DNS Resolver。

先决条件

  • 云平台上的全新 Ubuntu 20.04 服务器
  • 在我们的服务器上配置的 root 密码

第 1 步 – 创建 云服务器

首先,登录到我们的 云服务器。 创建一个新服务器,选择 Ubuntu 20.04 作为至少 2GB RAM 的操作系统。 通过 SSH 连接到我们的云服务器并使用页面顶部突出显示的凭据登录。

登录到 Ubuntu 20.04 服务器后,运行以下命令以使用最新的可用软件包更新基本系统。

apt-get update -y

第 2 步 – 安装所需的依赖项

在开始之前,我们需要在系统中安装一些基本的 DNS 工具。 我们可以使用以下命令安装所有这些:

apt-get install bind9-utils dnsutils net-tools -y

安装完所有软件包后,我们可以继续下一步。

第 3 步 – 安装和配置未绑定 DNS

默认情况下,Unbound 包包含在 Ubuntu 默认存储库中。 我们可以使用以下命令安装它:

apt-get install unbound -y

安装 Unbound DNS 后,我们需要对其进行配置。 默认情况下,Unbound 主配置文件位于 /etc/unbound/unbound.conf。 但是,建议创建一个单独的配置文件:

nano /etc/unbound/unbound.conf.d/myunbound.conf

添加以下行:

server:
port: 53
verbosity: 0
num-threads: 2
outgoing-range: 512
num-queries-per-thread: 1024
msg-cache-size: 32m
interface: 0.0.0.0
rrset-cache-size: 64m
cache-max-ttl: 86400
infra-host-ttl: 60
infra-lame-ttl: 120
access-control: 127.0.0.0/8 allow
access-control: 0.0.0.0/0 allow
username: unbound
directory: "/etc/unbound"
logfile: "/var/log/unbound.log"
use-syslog: no
hide-version: yes
so-rcvbuf: 4m
so-sndbuf: 4m
do-ip4: yes
do-ip6: no
do-udp: yes
do-tcp: yes
remote-control:
control-enable: yes
control-port: 953
control-interface: 0.0.0.0

保存并关闭文件,然后使用以下命令验证配置文件:

unbound-checkconf /etc/unbound/unbound.conf.d/myunbound.conf

我们应该得到以下输出:

unbound-checkconf: no errors in /etc/unbound/unbound.conf.d/myunbound.conf

接下来,为 Unbound 创建一个日志文件并设置适当的权限:

touch /var/log/unbound.log
chown unbound:unbound /var/log/unbound.log

第 4 步 – 启动未绑定的 DNS 服务

至此,Unbound DNS 已安装并配置完毕。 现在,重新启动 Unbound 服务并使其在系统重新启动时启动:

systemctl restart unbound
systemctl enable unbound

我们还可以使用以下命令验证 Unbound 的状态:

systemctl status unbound

样本输出:

● unbound.service - Unbound DNS server
     Loaded: loaded (/lib/systemd/system/unbound.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-08-15 06:30:33 UTC; 7s ago
       Docs: man:unbound(8)
    Process: 2788 ExecStartPre=/usr/lib/unbound/package-helper chroot_setup (code=exited, status=0/SUCCESS)
    Process: 2791 ExecStartPre=/usr/lib/unbound/package-helper root_trust_anchor_update (code=exited, status=0/SUCCESS)
   Main PID: 2804 (unbound)
      Tasks: 2 (limit: 2353)
     Memory: 4.8M
     CGroup: /system.slice/unbound.service
             └─2804 /usr/sbin/unbound -d

Aug 15 06:30:32 ubuntu2004 systemd[1]: Starting Unbound DNS server...
Aug 15 06:30:33 ubuntu2004 package-helper[2796]: /var/lib/unbound/root.key has content
Aug 15 06:30:33 ubuntu2004 package-helper[2796]: success: the anchor is ok
Aug 15 06:30:33 ubuntu2004 systemd[1]: Started Unbound DNS server.

此时,Unbound 服务启动并监听 53 端口。我们可以使用以下命令检查它:

ss -antpl | grep 53

样本输出:

LISTEN    0         256                0.0.0.0:53               0.0.0.0:*        users:(("unbound",pid=3407,fd=6))                                              
LISTEN    0         256                0.0.0.0:53               0.0.0.0:*        users:(("unbound",pid=3407,fd=4))                                              
LISTEN    0         4096         127.0.0.53%lo:53               0.0.0.0:*        users:(("systemd-resolve",pid=356,fd=13))                                      
LISTEN    0         256                0.0.0.0:953              0.0.0.0:*        users:(("unbound",pid=3407,fd=7))                                              

第 5 步 – 测试未绑定的 DNS

现在,我们将需要使用 dig 命令并执行一些 DNS 查询来测试 Unbound DNS 服务器。

我们将使用 ubuntu.com 进行测试。

dig ubuntu.com @localhost

样本输出:

; <<>> DiG 9.16.1-Ubuntu <<>> ubuntu.com @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6037
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ubuntu.com.			IN	A

;; ANSWER SECTION:
ubuntu.com.		60	IN	A	91.189.88.181
ubuntu.com.		60	IN	A	91.189.88.180

;; Query time: 307 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Aug 15 06:32:18 UTC 2021
;; MSG SIZE  rcvd: 71

如我们所见,第一次查询的查询时间为 307 毫秒。 我们的查询现在已缓存。

接下来,让我们再次运行相同的查询:

dig ubuntu.com @localhost

样本输出:

; <<>> DiG 9.16.1-Ubuntu <<>> ubuntu.com @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37832
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ubuntu.com.			IN	A

;; ANSWER SECTION:
ubuntu.com.		49	IN	A	91.189.88.180
ubuntu.com.		49	IN	A	91.189.88.181

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Aug 15 06:33:36 UTC 2021
;; MSG SIZE  rcvd: 71

如我们所见,查询时间为 0 毫秒。

我们还可以从客户端计算机测试 Unbound DNS 服务器。 在这种情况下,我们需要使用查询指定我们的未绑定 DNS 服务器 IP:

dig ubuntu.com @69.87.221.220

样本输出:

; <<>> DiG 9.9.5-3ubuntu0.4-Ubuntu <<>> ubuntu.com @69.87.221.220
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 28051
;; flags: qr rd ad; QUERY: 0, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; Query time: 365 msec
;; SERVER: 69.87.221.220#53(69.87.221.220)
;; WHEN: Sun Aug 15 12:04:37 IST 2021
;; MSG SIZE  rcvd: 12

第 6 步 - 未绑定故障排除

如果要检查 Unbound DNS 的状态,请运行以下命令:

unbound-control status

样本输出:

version: 1.9.4
verbosity: 0
threads: 2
modules: 3 [ subnet validator iterator ]
uptime: 65 seconds
options: reuseport control(ssl)
unbound (pid 3407) is running...

如果要将 DNS 缓存备份到文本文件,请运行以下命令:

unbound-control dump_cache > cache.txt

我们可以使用以下命令验证 cache.txt 文件:

cat cache.txt

样本输出:

START_RRSET_CACHE
END_RRSET_CACHE
START_MSG_CACHE
END_MSG_CACHE
EOF

在某些情况下,我们的 DNS 服务器无法回复我们的查询。 在这种情况下,我们可以使用以下命令刷新 DNS 缓存:

unbound-control flush ubuntu.com

在上面的指南中,我们解释了 Ubuntu 20.04 上安装和使用 Unbound DNS 缓存服务器。 我们还使用 dig 命令进行了一些测试,以查询 Unbound DNS 并获得响应。 今天就在 的 VPS 上试试吧!

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论