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

DNSmasq可以用于为Linux发行版缓存DNS请求。然而,这可能有点具有挑战性。

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

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

DNS缓存是什么?

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

每当您请求搜索引擎显示一个网页时,背后实际发生的情况如下。

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

在将请求发送到网络之前,DNS缓存处理最近和频繁访问的域名的身份解析,以便更加快速地完成该过程。

每当需要将IP地址解析为域名时,都会访问DNS服务器。这可能会对DNS服务器产生额外负载,特别是当网站同时接收大量请求时。

为了减少DNS请求和响应时间,使用DNS缓存。解析后的IP地址以及主机详细信息被本地保存。下次需要解析IP或域名时,不再发起新的DNS查询,而是从DNS缓存中检索结果。

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

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

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

Amazon EC2实例连接到Amazon VPC时,在启动过程中使用DHCP协议请求DNS服务器地址。

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

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

许多用户在访问AWS时通常使用Amazon的Route 53服务进行DNS解析。它非常易于使用,并且几乎免费。但有很多原因可能影响用户决定使用本地DNS服务器。

即使bind9仍然是设置本地DNS缓存服务器的很好选择,但在EC2实例和本地机器上安装和配置dnsmasq更加简单。

什么是dnsmasq?

DNSmasq是一个与Linux相关的工具,支持DNS、DHCP、TFTP和DNS缓存。它被设计为紧凑和轻量级,非常适合资源受限的网络和防火墙。

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

可以为每个服务器或基础控制器设置这些由DHCP分配的标识符和相关指令。dnsmasq支持动态和静态DHCP选项。它是可移植的,并且具有管理至少1000个客户端的DNS和DHCP的能力。

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

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

dnsmasq的特点

  • 通过配置dnsmasq,可以简单地集成内部DNS服务器,将特定的域名解析查询发送到特定的权威服务器。
  • 使用配置的本地DNS服务器可以减轻服务器的工作负载并增强可靠性。
  • 针对启用防火墙的终端的DNS配置非常简单,并且与ISP使用的DNS无关。
  • 如果在计算机上执行DNS检查时,与互联网连接的端口无法访问,则查找操作将被立即暂停。
  • 通过PPP(点对点协议)或DHCP查询,可以配置dnsmasq定期直接从底层域解析服务器收集数据。

安装

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

systemctl stop systemd-resolved

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

systemctl mask systemd-resolved

在关闭systemd-resolved之后,需要执行的初始操作是安装dnsmasq。dnsmasq几乎在所有Linux发行版中预安装。如果没有,可以手动安装。打开命令终端,然后键入以下命令进行安装。

sudo apt-get install dnsmasq

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

sudo yum install -y dnsmasq

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

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

systemctl status dnsmasq

如果显示状态为“active (running)”,表示安装完成并配置为端口53。如果显示状态为“inactive (dead)”,则需要重新启动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

让我简要描述每个参数的含义。

  • Port – 指定或绑定Dnsmasq用于接收DNS请求的端口。
  • domain-needed – 仅将域名传递给上游DNS服务器。
  • bogus-priv – 阻止域名和端口转发
  • listen-address – 定义名称服务器地址。通常,默认情况下使用本地主机来设置本地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 yaoweibin.com                                                                                     1 ⚙

; <> DiG 9.18.0-2-Debian <> yaoweibin.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:
;yaoweibin.com.                 IN      A

;; ANSWER SECTION:
yaoweibin.com.          227     IN      A       172.66.43.163
yaoweibin.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 yaoweibin.com                                                                                     1 ⚙

; <> DiG 9.18.0-2-Debian <> yaoweibin.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:
;yaoweibin.com.                 IN      A

;; ANSWER SECTION:
yaoweibin.com.          281     IN      A       172.66.40.93
yaoweibin.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。

总结

在本文中,我们看到了如何设置和配置dnsmasq作为本地DNS服务器的功能。您可能还有兴趣了解如何在不同的操作系统中进行链接设置。

类似文章