如何在 Ubuntu 上使用 dnsmasq 设置 DNS 缓存

DNSmasq 可用于缓存 Linux 发行版的 DNS 请求。 但是,这可能有点挑战性。

DNS 缓存的作用是加快将网站域名转换为其关联 IP 地址的 DNS 查找过程。 当您网络上的多个用户访问同一个网站地址时,利用本地 DNS 缓存服务器可以减少 Web 加载所需的时间。

首先让我们看看什么是DNS缓存。

什么是 DNS 缓存?

互联网使用 DNS 来跟踪所有可公开访问的在线站点及其相关 IP 地址。 它可以比作电话簿。 使用 DNS 可以让我们不必记住每个站点的 IP,这是网络基础设施与 Internet 站点交互所必需的。

每当您请求搜索引擎显示网页时,这实际上是在幕后发生的。

尽管您的系统可以访问大量外部 DNS 服务器,但问题是拥有 DNS 的中央副本仍然可以加快传输和解析速度。 这是 DNS 缓存发挥作用的时候。

在将请求发送到 Web 之前,DNS 缓存会处理最近和经常访问的域的身份解析,以进一步加快该过程。

每当需要将 IP 地址解析为域名时,都会访问 DNS 服务器。 这会给 DNS 服务器带来额外的负载,尤其是在网站同时接收大量请求的情况下。

使用 DNS 缓存以减少 DNS 请求和响应时间。 解析的 IP 地址以及主机详细信息保存在本地。 与其启动新的 DNS 查询,不如在下次必须解析 IP 或域名时从 DNS 缓存中检索结果。

DNS 缓存如何帮助解决 Amazon EC2 实例上的间歇性 DNS 解决问题?

大多数 Linux 系统不使用本地 DNS 缓存。 这意味着所有 DNS 请求都直接发送到 Amazon 提供的权威 DNS 解析器,该解析器对一次可以处理的请求数量有限制。 当有大量请求时,就会出现 DNS 解析问题。

在系统中部署本地 DNS 缓存将帮助您降低 CPU 和网络利用率,同时防止 DNS 解析错误。 本地 DNS 缓存响应对外部 DNS 资源(如 Amazon RDS 和 S3)的查询。

连接到 Amazon VPC 的 Amazon EC2 实例在启动期间使用 DHCP 协议来请求 DNS 服务器地址。

  9 适用于中小型企业的最佳云 PBX 解决方案

当您使用 Amazon VPC 构建虚拟私有云时,Route 53 DNS 解析器有效地利用 VPC 上的解析器来响应在本地 Amazon VPC Web 地址和私有管理区域中的条目下运行的 EC2 实例的 DNS 请求。 Resolver 在公共 DNS 服务器上反复查找所有其他网址。

DNS 缓存用作先前 DNS 查询的临时记录,我们的系统可以在尝试访问在线网站时快速检查这些查询。 它维护每个现有和后续会话的日志。 此 DNS 缓存使域解析更容易,并防止 Amazon EC2 Linux 实例出错。

许多用户在访问 AWS 时通常使用 Amazon 的 Route 53 服务作为 DNS。 它真的很容易使用而且几乎是免费的。 但是有许多原因可能会影响用户使用本地 DNS 服务器的决定。

尽管 bind9 仍然是设置本地 DNS 缓存服务器的绝佳选择,但 dnsmasq 在 EC2 实例和本地计算机上的安装和配置要简单得多。

什么是dnsmasq?

DNSmasq 是一个 Linux 相关的工具,支持 DNS、DHCP、TFTP 和 DNS 缓存。 它结构紧凑、重量轻,非常适合资源限制较少的网络和防火墙。

安装和配置非常简单。 为了为子网设置 DNS 和 DHCP,dnsmasq 是一种灵活实用的解决方案。

可以为每个服务器或底层控制器设置这些 DHCP 分配的标识符和相关说明。 dnsmasq 都支持动态和静态 DHCP 选项。 它是可移植的,并且能够为至少 1,000 个客户端管理 DNS 和 DHCP。

当收到 DNS 查询时,dnsmasq 要么从本地缓存响应,要么将其传输到权威 DNS 服务器。 除了响应带有 DHCP 配置的地址的 DNS 请求外,它还检查 /etc/hosts 文件的内容以识别公共 DNS 中未列出的本地主机名。

使用 dnsmasq 工具代替浏览器的内置 DNS 缓存可大大提高互联网浏览性能。 它非常适合资源受限的集成环境,因为它的设置非常简单,并且只需要很少的磁盘空间。

dnsmasq 的特点

  • 使用 dnsmasq 集成内部 DNS 服务器很简单,方法是将其配置为将特定的域名解析查询传输到特定的权威服务器。
  • 使用配置的本地 DNS 服务器减少了服务器的工作量并增强了可靠性。
  • 启用防火墙的端点的 DNS 配置相当简单,并且独立于 ISP 使用的 DNS。
  • 如果在计算机上执行 DNS 检查时无法访问链接到 Internet 的端口,则查找操作将立即暂停。
  • 通过 PPP(点对点协议)或 DHCP 查询,dnsmasq 确实可以配置为直接从底层域解析服务器定期收集数据。

安装

在安装和配置 dnsmasq 实用程序之前,必须关闭 systemd-resolved 服务。

systemctl stop systemd-resolved

您也可以使用 mask 属性隐藏它,以便在您重新启动时它不会自动启动。

 systemctl mask systemd-resolved

安装 dnsmasq 是关闭 systemd-resolved 后需要执行的初始操作。 几乎所有 Linux 发行版都预装了 DNSmasq。 如果没有,您可以手动安装它。 启动命令终端,然后键入以下命令来执行此操作。

sudo apt-get install dnsmasq

如果您是 yum 用户,请使用以下命令:

sudo yum install -y dnsmasq

此命令会自动安装该工具并在后台启动 dnsmasq。

  如何使用 Cloudflare 加速和保护您的网站?

安装成功后,您可以使用以下命令检查 dnsmasq 的状态。

systemctl status dnsmasq

如果它显示其状态为“活动(运行)”,则表示安装完成并配置到端口 53。如果它显示其状态为“非活动(死)”,那么您需要重新启动 Ubuntu 机器和 dnsmasq。 这将修复错误。

配置

Dnsmasq 现在已准备好在您的计算机上设置为本地缓存 DNS 服务器。 默认配置文件位于 /etc/dnsmasq.conf。 必须修改此配置文件才能在系统中设置 dnsmasq 实用程序。

使用此命令打开和编辑配置文件。

nano /etc/dnsmasq.conf

配置文件只能使用 root 权限进行编辑。 只需清除文件中的所有内容,包括注释,然后简单地复制粘贴并保存此配置设置。

port=53
domain-needed
bogus-priv
listen-address=127.0.0.1
expand-hosts
domain=geek-demo.com
cache-size=1000

让我简要介绍一下每个参数的含义。

  • 端口 – 指定或绑定 Dnsmasq 将用于接收 DNS 请求的端口。
  • domain-needed – 仅将域名传输到上游 DNS 服务器。
  • bogus-priv – 防止域和端口转发
  • listen-address – 定义名称服务器地址。 通常,localhost 用作默认设置,用于设置本地 DNS 服务器。
  • domain – 配置 dnsmasq 附加到短标识符的域。
  • cache-size – 存储中允许的最大 DNS 缓存大小。

执行所有必要的更改后,保存并关闭配置文件。 下一步是编辑 /etc/resolv.conf 文件以添加本地主机解析地址。 使用以下命令使用 nano 编辑器打开。

nano /etc/resolv.conf

在这里,您可以找到系统用于地址解析的所有名称服务器。 在该列表中,还要添加环回地址。 添加“nameserver 127.0.0.1”并将其保留在第一行。

保存并退出配置文件。 为了使更新的设置生效,请重新启动 dnsmasq 实用程序。

systemctl restart dnsmasq

测试本地 DNS 缓存服务器

测试本地 DNS 服务器很容易。 打开命令行并使用 dig 命令检查 DNS 缓存。 第一次运行 dig 命令时,结果应该很常见。

┌──(root💀kali)-[/home/writer]
└─# dig techblik.com.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> techblik.com.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 623
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
techblik.com.com.          227     IN      A       172.66.43.163
techblik.com.com.          227     IN      A       172.66.40.93

;; Query time: 31 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:52:49 EDT 2022
;; MSG SIZE  rcvd: 74

这里请注意,从上游名称服务器查询详细信息的查询时间约为 31 毫秒。 再次执行相同的 dig 命令,您会发现查询时间显着减少。

┌──(root💀kali)-[/home/writer]
└─# dig techblik.com.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> techblik.com.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21942
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
techblik.com.com.          281     IN      A       172.66.40.93
techblik.com.com.          281     IN      A       172.66.43.163

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:58:10 EDT 2022
;; MSG SIZE  rcvd: 74

这里,查询时间为 0 毫秒。 这是因为在执行初始搜索之后,dnsmasq 存储了数据,并且由于使用了存储的缓存,所有后续执行的查找都是瞬时的。 如果要删除存储的 DNS 缓存,则需要重新启动 dnsmasq。

  关于 AWS Glue 你所不知道的事

包起来

在本文中,我们了解了如何设置和配置 dnsmasq 以充当本地 DNS 服务器。 您可能也有兴趣了解如何更改 DNS 服务器以在不同操作系统中进行更快的浏览。