如何在 Debian 12 上使用 Dnsmasq 设置本地 DNS

您所在的位置:网站首页 Linux配置转发服务器dns 如何在 Debian 12 上使用 Dnsmasq 设置本地 DNS

如何在 Debian 12 上使用 Dnsmasq 设置本地 DNS

2024-06-15 09:01| 来源: 网络整理| 查看: 265

如何在 Debian 12 上使用 Dnsmasq 设置本地 DNS

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

Dnsmasq 设计为轻量级,内存占用小,适用于路由器和防火墙等资源匮乏的设备。 Dnsmasq 可以在 Linux、BSD、Android 和 macOS 上运行。

本教程将在 Debian 12 服务器上使用 Dnsmasq 安装和配置本地 DNS 服务器。我们将设置一个可用于您的本地网络的本地 DNS 服务器,添加本地域名,启用 DNS 缓存,并通过 Dnsmasq 启用 DHCP 服务器。您还将了解如何设置和添加客户端计算机以使用本地 DNS 服务器。完成本教程后,您将能够通过本地域名访问所有应用程序,并且您的 DNS 请求将会更快,因为您启用了缓存 DNS。

先决条件

在开始之前,您必须满足以下要求才能完成本教程:

Debian 12 服务器 - 本示例使用主机名为“dnsmasq-server”和 IP 地址192.168.5.20的 Debian 服务器。具有 sudo/root 管理员权限的非 root 用户。

对于客户端计算机,您可以使用任何 Linux 发行版,因为每个发行版的 DNS 配置都是相似的。

准备系统

在此步骤中,您将准备用作本地 DNS 服务器的 Debian 服务器。您将更新软件包索引,停止并禁用“systemd-resolved”服务,然后您将通过“/etc/resolv.conf”创建定义静态 DNS 解析器配置' 文件。

在 Debian 系统上,DNS 解析器由“systemd-resolved”服务管理,该服务通过 D-BUS 接口提供网络名称解析。要设置 DNS 服务器软件(例如 Dnsmasq),您必须禁用“systemd-resolved”服务。

在开始之前,请运行以下 apt 命令来更新和刷新您的 Debian 软件包索引。

sudo apt update

接下来,运行以下命令来停止并禁用“systemd-resolved”服务。在 Debian 系统上,DNS 配置由 NetworkManager 和 systemd-resolved 服务管理。

sudo systemctl disable --now systemd-resolved sudo systemctl stop systemd-resolved

通过以下命令删除 DNS 解析器配置的链接文件'/etc/resolv.conf'。

sudo unlink /etc/resolv.conf

之后,使用以下 nano 编辑器命令创建一个新的 DNS 解析器配置文件“/etc/resolv.conf”。

sudo nano /etc/resolv.conf

将以下行添加到文件中。这会将 Cloudflare 和 Google 公共 DNS 添加为 Debian 服务器的解析器。

nameserver 1.1.1.1 nameserver 8.8.8.8

完成后保存文件并退出编辑器。现在继续进行 Dnsmasq 安装和配置的后续步骤。

安装和配置 Dnsmasq

在此步骤中,您将使用 Dnsmasq 安装并设置本地 DNS 服务器。您将设置 Dnsmasq 在默认 DNS 端口 53 和内部 IP 地址“192.168.5.20”上运行。您还将定义 Dnsmasq 服务的域名、启用 DNS 缓存,最后通过 Dnsmasq 启用 DHCP 服务器。

默认的“dnsmasq”软件包可在 Debian 存储库中找到。运行以下 apt 命令来安装 Dnsmasq 软件包。

sudo apt install dnsmasq

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

安装 Dnsmasq 后,运行以下 systemctl 命令实用程序来验证“dnsmasq”服务并确保该服务已启用并正在运行。

sudo systemctl is-enabled dnsmasq sudo systemctl status dnsmasq

您将收到与此类似的输出 - dnsmasq 服务已启用并将在启动时自动运行。并且dnsmasq服务当前状态为运行中。

当 Dnsmasq 在 Debian 系统上运行时,接下来您将通过文件 '/etc/dnsmasq.conf' 启动 Dnsmasq 配置。

首先,运行以下命令来备份默认的 Dnsmasq 配置文件。

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

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

sudo nano /etc/dnsmasq.conf

将以下行添加到文件中。

# dnsmasq run on UDP port 53 # with IP address localhost and 192.168.5.20 # and network interface eth1 port=53 listen-address=127.0.0.1,192.168.5.20 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 domain names # 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.20 # enable DNS Cache and adjust cache-size cache-size=1000 # enable DHCP via dnsmasq # define lease db file # make the dhcp server as an authoritative dhcp-range=192.168.5.80,192.168.5.150,12h dhcp-leasefile=/var/lib/misc/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.20。缓存大小:在 Dnsmasq 上启用 DNS 缓存。请务必调整大小,这会提高性能和速度。dhcp-range:通过 Dnsmasq 启用 DHCP 服务器。调整您的网络的 IP 地址池和租用时间。dhcp-leasefile:定义用于存储 DHCP 租约的文件。dhcp-authoritative:使DHCP服务器具有权威性。

接下来,使用以下 nano 编辑器命令打开配置文件“/etc/hosts”。您可以为内部应用程序定义子域,系统将自动使用 Dnsmasq 域名“hwdomain.io”进行配置。

sudo nano /etc/hosts

将以下行添加到文件中。在此示例中,您将定义子域 app1、db1 和 files。这些子域的根域是 Dnsmasq 服务器本身“hwdomain.io”。

使用以下行,“app1.hwdomain.io”将解析为 IP 地址“192.168.5.10”,子域“db1.io”。 hwdomain.io'将指向服务器IP地址'192.168.5.25',子域'files.hwdomain.io'将指向指向 IP 地址'192.168.5.50'。

192.168.5.10 app1 192.168.5.25 db1 192.168.5.50 files

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

接下来,使用以下 nano 编辑器命令打开“/etc/resolv.conf”文件,并将 Dnsmasq 服务器 IP 地址添加为“名称服务器”。

sudo nano /etc/resolv.conf

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

nameserver 127.0.0.1 nameserver 192.168.5.20

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

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

sudo dnsmasq --test

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

sudo systemctl restart dnsmasq

至此,您已经在 Debian 系统上通过 Dnsmasq 完成了本地 DNS 服务器的配置。您还配置了本地域名和子域,启用了 DNS 缓存,并通过 Dnsmasq 启用了 DHCP 服务器。

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

验证 Dnsmasq 安装

在此步骤中,您将通过检查系统上的 Dnsmasq 服务和 LISTEN 端口来验证 Dnsmasq 安装。然后,您将验证通过“/etc/hosts”文件配置的本地域名和子域。

运行以下命令以确保 Dnsmasq 服务正在端口 53 上运行。然后,通过 systemctl 命令实用程序验证 Dnsmasq 服务的状态。

ss -tulpn | grep 53 sudo systemctl status dnsmasq

您将收到与此类似的输出 - Dnsmasq 服务正在默认端口 53 上运行,并且已启用并将在启动时自动运行。

接下来,您将通过“/etc/hosts”文件验证您在 Dnsmasq 上配置的域名和子域。但在此之前,请运行以下 apt 命令将“dnsutils”软件包安装到您的系统中。 “dnsutils”包提供了用于测试 DNS 服务器配置的命令行工具。

sudo apt install dnsutils

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

安装“dnsutils”后,运行以下 dig 命令来验证您已配置的域名和子域。

验证 Dnsmasq 主域“hwdomain.io”,它指向 Dnsmasq 服务器 IP 地址“192.168.5.20”。

dig hwdomain.io

通过下面的 dig 命令验证您通过'/etc/hosts' 文件定义的子域。

dig app1.hwdomain.io +short dig db1.hwdomain.io +short dig files.hwdomain.io +short

子域“app1.hwdomain.io”指向IP地址“192.168.5.10”,子域“db1.hwdomain.io”指向 IP 地址“192.168.5.25”,最后“files.hwdomain.io”指向 IP 地址“192.168” .5.50'。

以下是您将收到的类似输出。

现在,您已经配置并测试了 Dnsmasq 安装作为 Debian 服务器上的本地 DNS 服务器。在接下来的步骤中,您将使用 UFW 防火墙设置并保护 Dnsmasq。

设置 UFW 防火墙

现在您将在本地 DNS 服务器上设置防火墙。您将通过 UFW 防火墙限制对 DNS 服务器的访问来保护 Dnsmasq 安装的安全。

运行以下 apt 命令在 Debian 系统上安装 UFW 防火墙。

sudo apt install ufw -y

安装 UFW 后,运行以下命令将 OpenSSH 服务和 DNS 端口 53 添加到 UFW 防火墙。在此示例中,您将指定允许访问 Dnsmasq 服务器的网络源,即 IP 地址为 192.168.5.0/24' 的本地网络。

请务必将本地网络 IP 地址更改为您的内部网络子网。

sudo ufw allow OpenSSH sudo ufw allow from 192.168.5.0/24 to any port 53 proto udp

接下来,运行以下命令启动并启用 UFW 防火墙。

sudo ufw enable

当询问配置时,输入 y 进行确认,然后按 ENTER 继续。 UFW 防火墙现在应该正在运行并启用,并将在启动时自动启动。

最后,运行以下命令来验证 UFW 防火墙的状态。您应该看到 UFW 防火墙处于“活动”状态,并且 OpenSSH 服务和 DNS 端口 53 已添加到防火墙。

sudo ufw status

配置 UFW 防火墙后,您现在可以添加客户端以连接到本地 DNS 服务器。

设置客户端

在此步骤中,您将使用基于 Debian 的发行版和主机名“客户端”设置客户端计算机。您将本地 DNS 服务器 Dnsmasq 添加到客户端计算机。

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

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

将以下行输入到文件中。请务必将 IP 地址更改为您的 Dnsmasq 服务器 IP 地址。

nameserver 192.168.5.20

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

接下来,运行以下命令将“dnsutils”包安装到客户端计算机。

sudo apt install dnsutils

现在运行下面的 dig 命令来验证域名“hwdomain.io”,该域名将指向 Dnsmasq 服务器 IP 地址。

dig hwdomain.io

以下是您将收到的输出。

对于子域,请运行下面的 dig 命令。每个子域将指向 Dnsmasq 服务器上的“/etc/hosts”文件中定义的 IP 地址。

dig app1.hwdomain.io +short dig db1.hwdomain.io +short dig files.hwdomain.io +short

以下是您将在客户端计算机上收到的类似输出。

接下来,您还需要确保可以通过 Dnsmasq 本地 DNS 服务器访问公共域名。您可以通过检查公共域名(例如“github.com”)来验证这一点。

dig github.com

您将收到类似于此屏幕截图的输出 - 在输出的底部,您应该看到您的请求由在“192.168.5.20”上运行的 Dnsmasq 本地 DNS 服务器应答,默认设置为端口“53”。考虑到这一点,您已经通过 Dnsmasq 本地 DNS 服务器成功连接到公共域名。

最后,您将通过“drill”和“dig”命令验证 DNS 缓存。 “drill”命令是“ldnsutils”软件包的一部分,因此请运行以下 apt 命令来安装它。

sudo apt install ldnsutils

安装 ldnsutils 后,运行以下钻取命令来验证您在 Dnsmasq 服务器上配置的 DNS 缓存。

drill duckduckgo.com | grep "Query time" drill duckduckgo.com | grep "Query time"

您将收到如下屏幕截图所示的输出 - 第一次发出请求时,“查询时间”为 60 毫秒。但第二次请求同一个域时,查询时间减少到1毫秒,这是DNS请求缓存在本地DNS服务器Dnsmasq上。

您还可以通过带有选项“+stats”的 dig 命令验证 DNS 缓存。

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

您现在已经完成了客户端计算机配置,并验证了 Dnsmas 本地 DNS 服务器是否完全正常工作,从您通过“/etc/hosts”文件定义的本地域名和子域,到 DNS 缓存您已在 Dnsmasq 上启用。

结论

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

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3