如何在 Debian 上配置 DNS 服务器如何在 Debian 上配置 DNS 服务器如何在 Debian 上配置 DNS 服务器如何在 Debian 上配置 DNS 服务器
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Debian 上配置 DNS 服务器

什么是 DNS?

DNS 或域名系统是将域名称转换为其相应 IP 地址的系统。例如,当您在浏览器中输入 www.example.com 时,它会映射到互联网上特定 Web 服务器的 IP 地址。这使得人们可以轻松记住服务器、应用程序或连接到互联网的任何其他设备,而无需记住其 IP 地址。

DNS 是一个分层的分布式数据库系统。它具有树状结构,其中的节点按层排列,称为域。每个域都指向比自己低一级的节点。在 DNS 中,这些域被定义为子域,每个域都驻留在自己的 DNS 服务器(主 DNS 或主 DNS)上,其中包含其域区域内所有 IP 地址和主机名的记录。

可以有多个辅助 DNS 服务器,其中包含其相应主 DNS 服务器中包含的信息的最新副本。除了使用此镜像数据解析查询之外,辅助 DNS 服务器还可以在主主服务器出现故障时通过在等待主主服务器答复时自行回答查询来提供容错功能。

递归 DNS 服务器根据其缓存中的信息以及 /etc/resolv.conf 文件 中指定的递归名称服务器详细信息来处理查询。域名系统是互联网架构的关键要素,对于将计算机联网形成我们今天所说的“互联网”至关重要。

DNS配置参数可以使用“dig”工具编辑或直接编辑区域文件。不建议编辑区域文件,因为错误可能会导致网站无法访问,尽管这种情况很少发生。如果您不确定自己在做什么,请尽可能使用 dig 来代替。一些 BIND 或 Berkeley Internet Name Domain 软件包附带“dnsutils”和“host”,用于查询 DNS 服务器并打印结果。大多数 UNIX 系统中还提供 nslookup 实用程序,可用于类似目的。然而,“挖掘”通常比这两种工具更可靠。

DNS 是如何工作的?

DNS 作为一个分层系统工作,从域的根开始。例如,如果您在浏览器中输入 www.example.com,它会向您的本地 DNS 服务器询问此信息。当由于它对该域不具有权威性而没有该信息时,它会将查询转发到其上游递归 DNS 服务器之一。这些服务器将首先检查其缓存,然后再联系直接负责“示例”域的所有权威名称服务器,直到找到哪个 DNS 拥有此数据并将其发送回具有该域的 IP 地址的客户端计算机。

正如您所看到的,每个域或子域都有自己的权威名称服务器,它只负责解析该子域的查询。因此,DNS 服务器应该拥有回答有关特定域的任何查询的所有信息。因此,如果“example.com”不是本地 DNS 服务器的主域,那么如果不先将其转发到上游,它将无法解析对 www.example.com 的查询。

注意:只要有可能,请为每个子域配置不同的名称服务器,因为每个子域都需要单独的维护和管理过程。事实上,这就是 DNS 最初的设计方式,当时 TCP/IP 协议于 1983 年发布,当时域名系统还没有发明。这是在 1992 年 InterNIC 注册服务创建后进行的。子域是作为 DNS 协议的扩展引入的,仅用于管理目的。

每当 DNS 服务器收到来自客户端的查询时,它都会首先检查缓存以查看其中是否存在所有必要的记录。如果没有找到记录或者它们不够新鲜,那么它会执行以下递归查询:

如果它是 Internet (IN) 查询,那么它会从域的根开始解析主机名,并向下遍历每个父域,直到到达该区域的权威服务器。这称为“从顶部开始”,通常首先完成,因为负责 TLD(.com、.net 等)的域名服务器比负责第二个域名的域名服务器具有更快的连接速度和更大的带宽。级域名,例如“example”。执行此操作时,您的本地 DNS 服务器会考虑是否可以信任其上游 DNS 服务器的响应。如果您无权访问 /etc/hosts 或 /etc/resolv.conf 文件,并且您的 ISP 使用的 DNS 服务器正在缓存其响应,那么您的大部分网络流量很可能都会被记录。因此,这可能会造成安全威胁,如果没有,它将直接向递归服务器询问该数据。这称为“从底部开始”,因为负责二级域的名称服务器的连接速度比顶级域的名称服务器慢,带宽也较小。

迭代重复整个过程,直到:

  1. 非权威名称服务器响应 IN 查询,表示它不知道所请求的信息。

  2. 名称服务器找到它认为是查询的权威答案并将其发送回客户端计算机。

  3. 解析器名称缓存中预先配置的迭代次数到期。

本教程将引导您了解如何在 Debian 上设置您自己的内部 DNS 服务器。我们使用 BIND 名称服务器软件 (BIND9) 来完成此操作。

什么是 BIND9?

BIND(伯克利互联网域名)是DNS协议的实现。在 BIND 9 中,进行了多项重大增强,包括 IPv6 支持、更加灵活的配置和控制、改进的缓存性能、对更大 UDP 响应的 EDNS0 支持,以及更好地管理动态分配的 IP 地址。

BIND 是 Internet 上使用最广泛的名称服务器软件。它支持多种不同的域名服务协议,包括通过两个单独的实现实现的BIND4(原始伯克利互联网名称域,版本 4)、BIND8(BIND4 的历史继承者)和 IPv6 的 DNS 服务 :一个基于守护进程,另一个称为 lwres(轻量级解析器)。

BIND 9.5 是 BIND 的当前稳定版本,可以从Internet Software Consortium 以源代码和二进制形式下载。

先决条件

在我们开始在 Debian 上安装 DNS 服务器之前,您必须问自己:“我真的需要 DNS 服务器吗?”

本文仅关注 IPv4,因此如果您有兴趣使用 DNS for IPv6,则还需要做更多工作。本指南将不再为您提供手动添加 AAAA 记录等主题。

测试本指南中的步骤需要全新的 Debian 服务器安装。此处使用的某些命令可能与您的情况有所不同,我们将在适当的地方指出这些差异。

本指南假设您拥有有效的 IPv4 网络,并且具备在客户端计算机上正确配置静态 IP 地址的知识。

您的系统上应该已经配置了 sudo 用户和防火墙。

入门

更新您的系统

安装过程非常简单,让我们详细看看。首先,您需要使用以下命令确保您的系统已安装所有必需的软件包并且是最新的:

sudo apt-get update && sudo apt-get upgrade -y

-y 标志将自动对可能询问的所有确认回答“是”。

apt-get update 命令将更新服务器的软件包列表。通过使用 apt-get Upgrade 命令,安装在其上的所有软件包都将被升级。

这将需要一些时间,具体取决于您的网络连接速度和要安装的更新量。

示例输出:

安装BIND9

现在您的系统已是最新的,您可以继续安装 DNS 服务器 – BIND。这将通过安装几个新软件包来完成:

sudo apt install bind9 bind9utils bind9-doc

上面的命令将安装 BIND9 和两个辅助包,其中包含 DNS 服务器正常运行所需的文件。

BIND9是DNS服务器软件。

bind9utils 是用于管理 BIND 配置的实用程序,被命名为用于从命令行控制 BIND 的命令。

注意:bind9-doc是BIND软件的文档包。

示例输出:

安装DNS服务器

安装完成后,您可以通过运行以下命令来检查以确保所有软件包均已成功安装:

named -v

上面的命令将显示 BIND 的安装版本及其依赖项。

示例输出:

BIND 在安装时会自动启动。您可以使用 systemctl 命令检查其状态,如下所示:

sudo systemctl status bind9

上面的命令将为您提供服务器上 BIND 功能的更详细视图,例如活动时间、区域数量等。

您将得到类似于以下输出的内容:

示例输出:

如果您想启动、停止或重新启动 BIND,只需运行以下命令:

sudo service bind9 start

sudo service bind9 stop

sudo service bind9 restart

默认情况下,BIND 服务器将以绑定用户和组的身份运行。这使得它相当安全,因为仅允许该用户对区域文件进行任何更改。 BIND 服务器默认在端口 53 上侦听 DNS 查询。如果您愿意,可以在 named.conf 文件中更改此端口。运行以下命令查看 BIND 服务器正在侦听哪个端口:

sudo netstat -lnptu | grep named

示例输出:

上面的命令显示指定的守护进程当前已启动并侦听端口 53 UDP。使用此信息来验证您是否使用正确的端口号。

如果您的服务器未使用端口 53,您可以通过编辑 /etc/bind/named.conf.local 并将端口号更改为您想要的端口号来解决此问题。您还可以通过编辑 /etc/bind/named.conf.default-zones 并在 options 指令下添加日志记录语句来更改服务器日志文件的名称。

配置 BIND9

现在您已经在服务器上安装了BIND9,是时候开始配置它了。

BIND 的配置目录位于/etc/bind 下。该目录下有一些重要的文件:

名为“named.conf”的文件是主要配置文件,其中有很多注释来阐明每个部分。

我们将编辑的下一个配置文件位于/etc/bind/named.conf.local。该文件包含有关您想要本地解析(来自名称服务器)的服务器和区域的所有网络信息。

named.conf.default-zones 位于 /etc/bind/named.conf.default-zones。当未明确告知使用不同区域时,此文件包含 BIND 使用的区域的服务器信息。换句话说,已启用的区域。

那么,让我们继续从一些基本配置开始。

示例输出:

默认情况下,BIND 配置为仅服务于本地主机。这意味着来自服务器外部的任何请求都将被 BIND 本身拒绝,除非您正确配置了它。

例如,如果您尝试访问托管在“154.54.55.56”IP 地址上的网站,会发生什么情况?答案很简单:所有请求都不会得到答复,因为在 BIND9 中没有为“154.54.55.56”IP 地址指定配置,并且“named”守护进程拒绝为来自其网络接口外部的任何 DNS 请求提供服务。

首先,我们将 DNS 服务器设置为侦听所有 IP 地址,以从各个位置向 DNS 服务器发送请求:从服务器、从不同的网络或当您使用 Internet 时。

让我们通过编辑named.conf.options配置文件来做到这一点:

cd /etc/bind

sudo nano named.conf.options

Let's replace listen-on {127.0.0.1;};

by

listen-on {any;};

listen-on-v6 { any; }

完成后保存并关闭文件。然后使用以下命令重新启动 BIND9 守护进程:

sudo service bind9 restart

现在,我们已经启用了 BIND9 来监听所有接口。

示例输出:

创建正向查找区域(域 -> IP)

正向查找区域是最常见的区域文件类型。它们将域名映射到 IP 地址,并用于将域名解析为电子邮件、网页等的 IP 地址。下一步是创建正向查找区域文件。

我们将编辑“/etc/bind/named.conf.local”文件来声明转发区域。出于本教程的唯一目的,我们将声明一个名为“linux教程”的域,并将其指向服务器的公共 IP 地址,该地址明确用于在 linux教程 上托管面向外部的网站领域。

注意:如果您计划从网络内解析外部域,则必须在您的服务器上设置有效的可访问 Internet 的 IP 地址。

现在,我们将编辑“/etc/bind/named.conf.local”文件来声明正向查找区域:

sudo nano named.conf.local

将以下内容添加到文件末尾:

zone "linux教程" {

  type master;

  file "/etc/bind/db.linux教程";

  //allow-transfer {xxx.xxx.xxx.xxx;}; // Secondary DNS server of the hoster

};

在这种情况下:

输入“master”。这是一个主域区域文件。如果您托管的是仅权威的正向或反向区域并且不希望允许动态更新,则可以将类型参数设置为“slave”。

“/etc/bind/db.domaine.com”是一个文件,其中包含域“linux教程”的记录以及完整路径。

允许传输{xxx.xxx.xxx.xxx;}。需要允许区域传输到主机的辅助 DNS 服务器,因为如果您的主机提供商不允许您这样做,您将无法在本地主机上使用命令“rndc reload”在线更新它。 xxx.xxx.xxx.xxx;由您的托管提供商托管的辅助 DNS 服务器(名称服务器)的 IP 地址。

完成后保存并关闭文件。

示例输出:

现在,我们将为上面声明的每个区域创建一个文件:

sudo nano db.linux教程

使用以下内容填充该文件:

;

; BIND data file for local loopback interface

;

$TTL    604800

@       IN      SOA     ns1.linux.local. root.linux.local. (

                              2         ; Serial

                         604800         ; Refresh

                          86400         ; Retry

                        2419200         ; Expire

                         604800 )       ; Negative Cache TTL

;

; Commentout below three lines

;@      IN      NS      localhost.

;@      IN      A       127.0.0.1

;@      IN      AAAA    ::1

;Name Server Information

@       IN      NS      ns1.linux.local.

;IP address of Name Server

ns1     IN      A       192.168.0.10

;Mail Exchanger

linux.local.   IN     MX   10   mail.linux.local.

;A – Record HostName To IP Address

www     IN       A      192.168.0.100

mail    IN       A      192.168.0.150

;CNAME record

ftp     IN      CNAME   <a href="http://www.linux.local">www.linux.local</a>.

在此文件中,将 linux 值替换为您的域名,后跟一个点 (.)。这是必需的,并且这不是错误。

将“192.168.0”替换为您的公共 IP 地址,后跟一个点 (.),这是从互联网访问服务器所必需的。

完成后请记住保存并关闭文件。

创建反向查找区域(IP -> 域)

反向查找区域用于将 IP 地址映射到域名,并且通常在发送电子邮件时需要。下一步是创建反向区域文件。

反向区域名称由网络 ID(反向)后跟“.in-addr.arpa”组成。

例如:

如果服务器的 IP 地址为“20.30.40.50”,则其网络 ID 将为“20.30.40”,反向区域名称将为“40.30” .20.in-addr.arpa“。

如果服务器的 IP 地址为“191.169.10.50”,则其网络 ID 将为“191.169.10”,反向区域名称将为“10.169” .191.in-addr.arpa“。

现在,我们将编辑“/etc/bind/named.conf.local”文件来声明反向区域:

sudo nano /etc/bind/named.conf.local

然后,将以下内容添加到文件中:

zone "40.30.20.in-addr.arpa" {

    type master;

    notify no;

    file "/etc/bind/db.10";

};

然后,我们将为上面声明的区域创建一个文件:

sudo nano db.10

然后使用以下内容填充该文件:

;

; BIND reverse data file for local loopback interface

;

$TTL  604800

@    IN   SOA   linux.local. root.linux.local. (

               2     ; Serial

             604800     ; Refresh

             86400     ; Retry

            2419200     ; Expire

             604800 )    ; Negative Cache TTL

;

;@   IN   NS   localhost.

;1.0.0 IN   PTR   localhost.

;Name Server Information

@    IN   NS   ns1.linux.local.

;Reverse lookup for Name Server

10   IN   PTR  ns1.linux.local.

;PTR Record IP address to HostName

100   IN   PTR  www.linux.local.

150   IN   PTR  mail.linux.local.

# End of file

检查 BIND 配置语法

现在,我们将检查每个文件中的配置语法是否有错误。为此,我们将有一个使用以下命令命名的查询:

sudo named-checkconf

如果没有错误,此命令将返回到空白 shell:

示例输出:

结论

DNS 是服务器上最重要的服务之一。每个人都使用它。每个人都需要它,并且最终,您不希望您的机器因为无法找到彼此而在网络中迷失。本文提供了有关使用 BIND 名称服务器软件 (BIND9) 在 Debian 上设置内部 DNS 服务器的指南。有关更多信息,请查看 LinuxHint.com 上的其他文章。

©2015-2025 艾丽卡 support@alaica.com