如何在 Rocky Linux 上使用 Dnsmasq 安装本地 DNS 解析器如何在 Rocky Linux 上使用 Dnsmasq 安装本地 DNS 解析器如何在 Rocky Linux 上使用 Dnsmasq 安装本地 DNS 解析器如何在 Rocky Linux 上使用 Dnsmasq 安装本地 DNS 解析器
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何在 Rocky Linux 上使用 Dnsmasq 安装本地 DNS 解析器

发表 admin at 2025年2月28日
类别
  • 未分类
标签
月額480円〜の高速レンタルサーバー ColorfulBox

Dnsmasq 是一个适合您本地环境的小型轻量级 DNS 服务器。它可用于提供 DNS 服务器、DHCP 服务器和 TFTP 服务器。至于DNS服务器,Dnsmasq可以用作转发器、递归DNS服务器和DNS缓存系统。它还从 /etc/hosts 文件加载 DNS 内容,该文件允许您为本地主机名设置域名。

Dnsmasq 设计为轻量级且占用空间小,适用于路由器和防火墙等资源匮乏的设备。 Dnsmasq对系统要求低,消耗资源少。它可以在 Linux、BSD、Android 和 macOS 上运行。

本教程将介绍在 Rocky Linux 9 服务器上使用 Dnsmasq 安装和设置本地 DNS 服务器。您将安装 Dnsmasq 并设置具有一些附加功能的本地 DNS 服务器,例如启用本地域名、通过 /etc/hosts 文件设置子域以及启用 DNS 缓存以加快访问速度。最后,您将通过 Dnsmasq 启用 DHCP 服务器。

您还将了解如何设置客户端计算机以使用本地 DNS 服务器作为主 DNS 解析器。

先决条件

在开始之前,您必须满足几个先决条件。以下是先决条件列表:

  • Rocky Linux 9 服务器 - 此示例使用主机名“dnsmasq-rocky”和 IP 地址“192.168.5.50 ”的 Rocky Linux '。
  • 具有 sudo/root 管理员权限的非 root 用户。
  • SELinux 正在以“宽容”模式运行。

对于客户端计算机,您可以使用任何 Linux 发行版。对于客户端计算机,您可以使用基于 Debian 或基于 RHEL 的发行版。

准备系统

在基于 RHEL 的操作系统上,默认 DNS 解析器'/etc/resolv.conf'由 NetworkManager 服务生成。在安装 Dnsmasq 之前,您将通过 /etc/resolv.conf 文件设置静态 DNS 解析器,并从 NetworkManager 服务禁用 DNS 解析器。

首先,使用以下 nano 编辑器命令打开 NetworkManager 配置文件 /etc/NetworkManager/NetworkManager.conf。

sudo nano /etc/NetworkManager/NetworkManager.conf

在“[section]”部分中添加行“dns=none”。

[main]
dns=none

完成后保存文件并退出编辑器。

接下来,使用下面的 nano 编辑器命令打开 DNS 解析器配置文件 '/etc/resolv.conf'。

sudo nano /etc/resolv.conf

删除所有可用行并将其替换为以下行。这样,您将使用 Cloudflare 和 Google 公共 DNS 作为主 DNS 服务器。

nameserver 1.1.1.1
nameserver 8.8.8.8

保存文件并在完成后退出。

最后,运行以下 systemctl 命令重新启动 NetworkManager 并应用更改。

sudo systemctl restart NetworkManager

完成这些设置后,NetworkManager 服务将不会更改您的 DNS 解析器,您可以随时添加或更改 DNS 解析器。

在接下来的步骤中,您将开始在 Rocky Linux 上安装和配置 Dnsmasq。

在 Rocky Linux 上安装 Dnsmasq

在此步骤中,您将在 Rocky Linux 服务器上安装 Dnsmasq 软件包。然后,您将启动并启用 Dnsmasq 服务以在系统启动时运行。

默认情况下,Rocky Linux AppStream 存储库上提供“dnsmasq”软件包。运行以下 dnf 命令以获取有关“dnsmasq”包的信息。

sudo dnf info dnsmasq

截至撰写本文时,Dnsmasq v2.85 已在 Rocky Linux 9 上可用。

现在运行以下命令来安装 Dnsmasq。当提示确认时输入 y,然后按 ENTER 继续。

sudo dnf install dnsmasq dnsmasq-utils

现在应该开始安装 Dnsmasq。

安装 Dnsmasq 后,运行以下 systemctl 命令来启动并启用“dnsmasq”服务。执行以下命令后,“dnsmasq”服务现在应该正在运行并启用,该服务将在启动时自动启动。

sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq

通过下面的 systemctl 命令实用程序验证“dnsmasq”服务。

sudo systemctl status dnsmasq

您将收到如下输出 - 'dnsmasq' 服务当前正在运行、已启用,并将在启动时自动运行。

安装并运行 Dnsmasq 后,接下来您将开始配置 Dnsmasq 以作为本地 DNS 服务器运行。

配置 Dnsmasq

在此步骤中,您将设置 Dnsmasq 作为本地 DNS 服务器,并启用一些启用的功能(例如缓存 DNS 和 DHCP 服务器),并为本地应用程序配置域名和子域。这允许通过本地域名/子域访问您的应用程序,例如“db1.hwdomain.io”、“app.hwdomain” .io',等等。

首先,运行以下命令将默认的 Dnsmasq 配置文件复制到'/etc/dnsmasq.conf.orig',然后打开原始 Dnsmasq 配置文件'/etc/dnsmasq.conf ' 使用下面的 nano 编辑器命令。

sudo cp /etc/dnsmasq.conf{,.orig}
sudo nano /etc/dnsmasq.conf

将以下行添加到文件中。

# dnsmasq run on UDP port 53
# with IP address localhost and 192.168.5.50
# and network interface eth1
port=53
listen-address=127.0.0.1,192.168.5.50
interface=eth1
# disable forwarding of non-routed address
# disable forwarding names without the main domain.com
# automatically append the domain part to simple names
# disable dnsmasq to read /etc/resolv.conf file
domain-needed
bogus-priv
expand-hosts
no-resolv
# upstream DNS server for non-local domains
# using Cloudflare and google public DNS
server=1.1.1.1
server=8.8.8.8
# define the domain for dnsmasq
domain=hwdomain.io
address=/hwdomain.io/192.168.5.50
# enable DNS Cache and adjust cache-size
cache-size=10000
# enable dhcp via dnsmasq
# define lease db file
# make the dhcp server as an authoritative
dhcp-range=192.168.5.100,192.168.5.150,12h
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
dhcp-authoritative

完成后保存文件并退出编辑器。

以下是您将用于 Dnsmasq 安装的详细选项:

  • 端口:您将使用哪个端口来运行 Dnsmasq。
  • listen-address:您将使用哪个 IP 地址来运行 Dnsmasq。您可以使用多个 IP 地址。
  • 接口:Dnsmasq 将绑定并运行哪个接口。
  • 需要域名:禁用转发没有主域名地址的名称。您可以像“mysql1”主机一样访问,除非您提供完整的本地域,例如“mysql1.hwdomain.io”。
  • bogus-priv:禁用非路由地址的转发。
  • expand-hosts:自动将本地域部分附加到简单名称中。
  • no-resolv:忽略服务器上的“/etc/resolv.conf”文件。
  • 服务器:定义您将用于非本地地址或域的上游 DNS 服务器。此示例使用 Cloudflare 和 Google 的公共 DNS 服务器。
  • 域名:定义Dnsmasq服务器的域名。在此示例中,Dnsmasq 服务器将获取本地域 hwdomain.io。
  • 地址:定义Dnsmasq上域名的IP地址。在此示例中,域 hwdomain.io 将解析为 IP 地址 192.168.5.50。
  • 缓存大小:在 Dnsmasq 上启用 DNS 缓存。请务必调整大小,这会提高性能和速度。
  • dhcp-range:通过 Dnsmasq 启用 DHCP 服务器。调整您的网络的 IP 地址池和租用时间。
  • dhcp-leasefile:定义用于存储 DHCP 租约的文件。
  • dhcp-authoritative:使DHCP服务器具有权威性。

接下来,使用以下 nano 编辑器命令打开“/etc/hosts”文件。您现在将为本地环境中的应用程序定义一些子域。

sudo nano /etc/hosts

将以下行添加到文件中。在此示例中,您将创建三个子域 wiki、mysql 和 文件。每个子域将遵循 Dnsmasq 服务器“hwdomain.io”的主域,并指向特定的 IP 地址。

子域 wiki.hwdomain.io 将指向 IP 地址“192.168.5.10”,子域域“mysql.hwdomain.io”指向 IP 地址“192.168.5.25”,并且“ files.hwdomain.io' 将指向 IP 地址“192.168.5.30”。

192.168.5.10 wiki
192.168.5.25 mysql
192.168.5.30 files 

完成后保存文件并退出编辑器。

现在使用以下 nano 编辑器命令打开 DNS 解析器配置文件“/etc/resolv.conf”。

sudo nano /etc/resolv.conf

将以下行添加到文件顶部。请务必将 IP 地址更改为 Dnsmasq 服务器 IP 地址。

nameserver 127.0.0.1
nameserver 192.168.5.50

完成后保存文件并退出编辑器。

现在运行以下命令来验证 Dnsmasq 配置并确保您拥有正确的配置。您将收到诸如“dnsmasq:语法检查正常”之类的输出。

sudo dnsmasq --test

最后,运行以下 systemctl 命令实用程序以重新启动“dnsmasq”服务并应用更改。

sudo systemctl restart dnsmasq

至此,您已经完成了在 Rocky Linux 系统上将 Dnsmasq 作为本地 DNS 服务器的配置。您还通过“/etc/hosts”文件配置了 Dnsmasq 服务器的域名和一些子域。最后,您通过 Dnsmasq 启用了缓存 DNS 和 DHCP 服务器。

在接下来的步骤中,您将验证 Dnsmsq 服务器的安装和配置。

验证 Dnsmasq 安装

Dnsmasq 配置完成后,您现在将验证 Dnsmasq 服务本身。您将验证 Dnsmasq 以确保它在默认端口 50 上运行并且服务正在运行。然后,您将验证通过“dns-utils”包创建的本地域名和子域。

运行以下命令来验证系统上的开放端口。然后通过 systemctl 命令实用程序验证“dnsmasq”服务。

ss -tulpn | grep 53
sudo systemctl status dnsmasq

您将收到如下输出 - Dnsmasq 正在默认端口 53 上运行,并且服务状态当前正在运行。此外,它已启用,它将在启动时自动启动。

接下来,运行以下 dnf 命令将“bind-utils”包安装到您的 Rocky Linux 服务器。该软件包提供了多个命令行工具,用于测试 DNS 服务器并对其进行故障排除。

sudo dnf install bind-utils

出现提示时输入 y,然后按 ENTER 继续。

现在运行以下 dig 命令来验证 Dnsmasq 服务器“hwdomain.io”的域名。您应该看到“hwdomain.io”指向服务器 IP 地址“192.168.5.50” 。

dig hwdomain.io

最后,运行以下命令来验证您通过“/etc/hosts”文件定义的子域。

dig wiki.hwdomain.io +short
dig mysql.hwdomain.io +short
dig files.hwdomain.io +short

您将收到与此类似的输出 - 子域 wiki.hwdomain.io 指向 IP 地址 192.168.5.10,子域mysql.hwdomain.io指向IP地址192.168.5.25,最后子域 files.hwdomain.io指向服务器IP地址192.168.5.30 。

有了这些结果,您就完成了 Dnsmasq 作为本地 DNS 服务器的配置。在接下来的步骤中,您将通过 Firewalld 保护 DNS 端口。

设置Firewalld

在此步骤中,您将设置firewalld以打开DNS服务端口,并将内部网络IP地址添加到firewalld作为允许访问DNS服务端口的主要来源。

运行以下firewall-cmd命令将DNS服务添加到firewalld。然后,添加内部网络IP地址作为源。

sudo firewall-cmd --add-service=dns
sudo firewall-cmd --add-source=192.168.5.0/24

接下来,运行以下命令保存您创建的临时规则并重新加载firewalld以应用更改。

sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload

通过以下命令验证firewalld。您应该看到 DNS 服务已添加到防火墙中,并且网络的源 IP 地址也已添加到防火墙中。

sudo firewall-cmd --list-all

输出 :

设置客户端(基于 Debian 或基于 RHEL)

在此步骤中,您将了解如何设置基于 Debian 和基于 RHEL 的发行版以使用您通过 Dnsmasq 创建的本地 DNS 服务器。

对于基于 RHEL 的发行版

使用以下 nano 编辑器命令为 NetworkManager 添加新的配置文件“/etc/NetworkManager/conf.d/dns-servers.conf”。

sudo nano /etc/NetworkManager/conf.d/dns-servers.conf

将以下行添加到文件中,并确保将 IP 地址更改为 Dnsmasq 服务 IP 地址。通过此配置,您将使用 Dnsmasq 服务器 IP 地址为客户端设置默认 DNS 解析器。这将自动写入 DNS 解析器配置“/etc/resolv.conf”。

[global-dns-domain-*]
servers=192.168.5.50

完成后保存文件并退出编辑器。

接下来,运行以下 systemctl 命令以重新启动 NetworkManager 服务并应用更改。

sudo systemctl restart NetworkManager

您可以显示“/etc/resolv.conf”文件来验证设置。您应该看到默认名称服务器是本地 Dnsmasq 服务器 IP 地址192.168.5.50。

cat /etc/resolv.conf

接下来,运行以下 dnf 命令将'bind-utils' 软件包安装到您的系统。

sudo dnf install bind-utils

对于基于 Debian 的发行版

如果您使用基于 Debian 的操作系统,则可以手动设置 DNS 解析器并禁用系统上的“systemd-resolved”服务 - 特别是对于 Ubuntu 系统。

运行以下命令来停止并禁用 systemd-resolved 服务。

sudo systemctl disable --now systemd-resolved

现在运行以下命令来删除 DNS 解析器配置的符号链接文件'/etc/resolv.conf'。然后,通过下面的 nano 编辑器命令创建一个新的解析器配置文件“/etc/resolv.conf”。

unlink /etc/resolv.conf
sudo nano /etc/resolv.conf

将以下行添加到文件中,并将 IP 地址更改为您的 Dnsmasq 服务器 IP 地址。

nameserver 192.168.5.50

完成后保存文件并退出编辑器。

接下来,运行以下 apt 命令将“dnsutils”软件包安装到您的系统中。

sudo apt install dnsutils

安装'bind-utils'或'dns-utils'后,您可以通过 dig 命令验证 Dnsmasq 的配置。

通过下面的 dig 命令验证 Dnsmasq 服务器“hwdomain.io”的域名。您应该看到域“hwdomain.io”指向 Dnsmasq 服务器 IP 地址192.168.5.50 。

dig hwdomain.io

接下来,使用以下命令验证您通过“/etc/hosts”文件配置的子域。您应该看到每个子域都指向您在“/etc/hosts”文件中配置的特定 IP 地址。

dig wiki.hwdomain.io +short
dig mysql.hwdomain.io +short
dig files.hwdomain.io +short

您将收到如下输出 - 子域 wiki.hwdomain.io 指向 IP 地址 192.168.5.10,子域mysql.hwdomain.io指向IP地址192.168.5.25,最后,子域files.hwdomain.io指向服务器IP地址192.168.5.30 。

至此,本地域名和子域配置成功。现在,公共域名(例如 Github.com 等)怎么样?

运行以下命令以验证客户端计算机上的互联网域名。这将确保您可以连接到互联网,即使本地 DNS 在 Dnsmasq 服务器上解析也是如此。

dig github.com

您将收到与此类似的输出 - 对 github.com 的 dig 查询通过在 IP 地址 192.168.5.50 上运行的本地 DNS 服务器连接,默认端口 53。

最后,通过下面的 dig 命令验证 DNS 缓存设置。这将向您显示已执行查询的统计信息,包括目标域名的“查询时间”。

dig +noall +stats duckduckgo.com
dig +noall +stats duckduckgo.com

然后,您将收到与此类似的输出 - 您获得的第一个查询是“查询时间”,时间为 63 毫秒。但对于第二次和第三次查询,查询时间为 2 毫秒,这意味着您对同一域名的查询是通过 Dnsmasq 本地 DNS 服务器缓存的。

结论

在本教程中,您已使用 Dnsmasq 创建了自己的本地 DNS 服务器。您已使用 Rocky Linux 9 服务器上的 Dnmasq 为本地环境设置了自己的 DNS 服务器。此外,这还包括使用本地域名和子域配置 Dnsmasq,使 DNS 缓存变得更快,并通过 Dnsmasq 启用 DHCP 服务器。

最后,您还添加并配置了客户端计算机(基于 Debian 和基于 RHEL 的发行版)以使用您创建的本地 DNS 服务器。在本文中,您还了解了如何使用 dig 命令对 DNS 服务器进行故障排除以及如何在 Linux 系统上设置 DNS 解析器。

©2015-2025 Norria support@alaica.com