安装、配置和维护 Linux DNS 服务器

2023-10-26

DNS(域名系统)是计算机的命名系统,执行此操作的服务是 DNS 服务器,它将 IP 地址转换为人类可读的地址。

这个进程是互联网的支柱,也是服务器中非常重要的服务,因此从那时起,我们将讨论 DNS 服务器,特别是 Linux DNS 服务器,以及如何安装、配置和维护它。

 

 

/etc/hosts 文件

每个系统都必须保留其主机名及其 IP 地址表的副本。该文件负责 IP 地址。

在 Linux 系统上,该表是/etc/主机 file.

因此,即使您没有 DNS 服务器或 DNS 服务器不可用,此文件也可以使用 /etc/hosts 文件将 IP 地址转换为名称。

这意味着系统在访问 DNS 服务器之前首先查询该文件,如果找到该域,它将对其进行翻译,而无需访问任何 DNS 服务器。

尝试编辑 /etc/hosts 并输入以下内容:


127.0.0.1              google.com  

然后转到浏览器并输入 google.com 并查看结果。如果你有阿帕奇服务器安装在您的系统上并且您的本地主机正在运行,它将显示本地主机的索引页面而不是谷歌页面。

您可以将 google.com 转换为任何网站的任何其他 IP 地址并查看结果以确保这一点。

因此,该文件的作用是将 IP 地址转换为名称,但这适用于同一连接的网络。那么外部网络又如何呢?如何维护所有系统的所有这些记录呢?

每个人都会管理自己的 /etc/hosts 文件并自行更新吗?当然不是。

 

域名

当您访问网站时,您可以键入 FQDN(完全限定域名)或如下域名:likegeeks.com 或 www.google.com

每个域由域组件组成;点将这些组件分开。

文本com is the 顶级域组件, and google is the 二级域组件, and www is the 三级域组件

当您访问任何网站时,浏览器会默默地在末尾添加一个点,但您看不到,因此域名将类似于 www.google.com。注意 .com 后面的点;这dot被称为根域。

但为什么我们添加这个根域或点呢?

因为这个点是由根名称服务器,位于在这篇文章发表时,世界上有 13 个根名称服务器,你可以将它们视为互联网的大脑,如果它们关闭,世界将没有互联网。

为什么是13?

因为也许世界上某个地方发生地震或自然灾害可能会摧毁一台根服务器,所以其他服务器会继续服务,直到受损的服务器恢复上线。

这些根名称服务器的名称如下:a.root-server.net、b.root-server.net 等。

 

顶级域名 (TLD)

我们看到了顶级域组件,例如 com 域。

顶级域名 (TLD) 根据地理或功能方面进行分类。

在撰写本文时,网络上有超过 800 个顶级域名。

顶级域名类别有:

  • 通用顶级域名,如(.org、.com、.net、.gov、.edu 等)。
  • 国家/地区代码顶级域名(.us、.ca 等)分别对应于美国和加拿大的国家/地区代码。
  • 新品牌顶级域名,如(.linux、.microsoft、.companyname 等)。
  • 基础设施顶级域,例如 .arpa 域。

 

子域

当您访问 mail.google.com 等网站时,此处的邮件是 google.com 的子域。

只有 mail.google.com 的名称服务器知道其下存在的所有主机,因此 google 会回答是否存在 mail 子域,根名称服务器对此一无所知。

 

DNS 服务器的类型

DNS 服务器分为三种类型:

  • 主 DNS 服务器:它们包含域的配置文件,并响应 DNS 查询。
  • 辅助 DNS 服务器:它们用作备份和负载分配。主服务器知道辅助名称服务器的存在并向它们发送更新。
  • 缓存 DNS 服务器:它们所做的只是缓存 DNS 响应,因此您无需再次询问主 DNS 服务器或辅助 DNS 服务器。您可以轻松地使您的系统充当缓存服务器,正如我们将在本文后面看到的那样。

 

设置 Linux DNS 服务器

Linux 上有很多实现 DNS 功能的软件包,但我们将重点关注绑定DNS服务器。世界各地的许多服务器都使用它。

如果您使用基于 Red Hat 的发行版(例如 CentOS),您可以像这样安装:


$ dnf -y install bind  

或者在基于 Debian 的系统(如 Ubuntu)上:


$ apt-get install bind9  

安装完成后,您可以启动它并使其在引导时运行。


$ systemctl start named

$ systemctl enable named  

 

配置绑定

服务配置是/etc/named.conf file.

BIND 在该文件中使用了一些语句,例如:

options used for global BIND configuration.
logging what can be logged and what can be ignored. I recommend you review the Linux syslog server.
zone define DNS zone.
include to include another file in named.conf.

从选项语句中可以看到BIND的工作目录是/var/named目录。

zone 语句使您能够定义 DNS 区域。

就像域名 google.com 一样,它也有子域名,如 mail.google.com 和analytics.google.com 以及其他子域名。

这三个域(域和子域)中的每一个都有一个由 zone 语句定义的区域。

 

定义主要区域

从DNS服务器类型我们知道,有主DNS服务器、辅助DNS服务器和缓存DNS服务器。

与缓存服务器不同,主要和次要的答案具有同等权威性。

要定义主要区域,您可以使用以下语法:


/etc/named.conf  

zone      "likegeeks.com" {
type master;
file likegeeks.com.db
};  

包含区域信息的文件位于/var/命名目录,因为这是工作目录,正如我们从选项中知道的那样。

请注意,您使用的服务器软件或托管面板会自动为您创建具有此名称的文件,因此如果您的域名是 example.org,则该文件将为/var/named/example.org.db.

类型是master,这意味着这是一个主要区域。

 

定义次要区域

与主要区域定义相同,几乎没有变化。


zone      "likegeeks.com" {
type slave;
masters Primary Nameserver IP Address Here; ;
file likegeeks.com.db
};  

在辅助区域中,域与主区域相同,并且类型slave这里的意思是这是一个次要区域,以及用于列出主名称服务器的 IP 地址的 masters 选项,最后,该文件是主名称服务器的区域文件的路径。

 

定义缓存区域

有必要有一个缓存区域,这样可以减少 DNS 服务器上的查询。

要定义缓存区域,您需要定义三个区域部分(第一个区域):


zone      "." IN {
type hint;
file "root.hint";
};  

第一行包含一个点,它是根名称服务器。类型提示,表示缓存区域条目,以及文件“root.hints”; 指定包含根服务器(第 13 个根名称服务器)的文件。您可以从以下位置获取最新的根名称服务器http://www.internic.net/zones/named.root

第二个区域定义在/etc/named.rfc1912.zones文件并通过 include 指令包含在 /etc/named.conf 中,默认情况下已包含该指令。


zone      "localhost" IN {
type master;
file "localhost.db";
};  

第三个区域定义本地主机的反向查找。


zone      "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.rev";
};  

将这三个区域放在 /etc/named.conf 中将使您的系统充当缓存 DNS 服务器。现在您应该输入引用的文件的内容,例如 likegeeks.com.db、localhost.db 和 127.0.0.rev。

这些文件包含每个区域的 DNS 记录类型以及一些选项。那么这些 DNS 记录类型是什么以及如何编写它们呢?

 

DNS 记录类型

数据库文件由记录类型组成,例如SOA、NS、A、PTR、MX、CNAME 和 TXT.

因此,让我们从每种记录类型开始,看看如何配置它。

SOA:权限记录的开始

SOA 记录使用以下格式描述站点的 DNS 条目:


example.com.      86400      IN      SOA      ns1.example.com.      mail.example.com.      (
2017012604 ;serial
86400 ;refresh, seconds
7200 ;retry, seconds
3600000 ;expire, seconds
86400 ;minimum, seconds
)  

第一行以域 example.com 开头。并以句点结束。这与 /etc/named.conf 文件中的区域定义相同。

请记住,DNS 配置文件非常挑剔。

The IN这个词的意思是互联网记录。

The SOA单词表示授权记录的开始。

ns1. example.com. 是域名的名称服务器。

mail.host.com。是域管理员的电子邮件。您可能会注意到没有@符号,我们用句点替换了它,并且有一个尾随句点。

第 2 行是序列号,我们用它来告诉名称服务器有关文件更新时间的信息,因此如果您对区域数据进行更改,则必须增加此数字。序列号的格式为 YYYYMMDDxx,其中 xx 从 00 开始。

第 3 行是以秒为单位的刷新率。辅助 DNS 服务器应多久查询一次主服务器以检查更新。

第 4 行是以秒为单位的重试率。这是辅助 DNS 服务器在尝试连接主 DNS 服务器但无法到达后等待的时间。指定的重试秒数。

第 5 行是过期指令。如果辅助服务器无法连接到主服务器进行更新,则应在指定的秒数后丢弃该值。

第 6 行告诉缓存服务器无法连接到主 DNS 服务器;他们在条目过期之前等待,这一行定义了等待时间。

NS:名称服务器记录

您可以使用 NS 记录来指定区域的名称服务器。 NS记录是这样的:


IN           NS         ns1.example.com.
IN           NS         ns2.example.com.  

您不必创建两个 NS 记录,但我们更喜欢拥有备份名称服务器。

A 和 AAAA:地址记录

A 记录将主机名映射到 IP 地址:


support IN          A             192.168.1.5  

如果您在 support.example.com 上有一个地址为 192.168.1.5 的主机,则可以像上面的示例一样键入。

注意:我们写的主机没有句号。

PTR:指针记录

PTR 记录用于进行反向名称解析,您提供 IP 地址,它返回主机名。

这与 A 记录的作用相反。


192.168.1.5        IN            PTR        support.example.com.  

在这里,我们输入带有尾随句点的完整主机名。

MX:邮件交换记录

MX 记录讲述了邮件服务器记录。


example.com.   IN           MX         10           mail  

域以句点结尾;数字10是邮件服务器的重要性,如果您有多个邮件服务器,则数字越低越不重要。

CNAME:规范名称记录

CNAME 记录就像主机名的快捷方式。

假设您有一个主机名为whatever-bignameis.example.com 的站点,并且由于该系统是Web 服务器,因此可以为该主机创建www 或CNAME 记录的别名。

因此,您可以创建一条 CNAME 记录来命名 www.example.com:


whatever-bignameis      IN           A                    192.168.1.5
www                     IN           CNAME                whatever-bignameis  

第一行告诉 DNS 服务器有关别名的位置;第二行创建指向 www 的别名。

TXT记录

您可以在 TXT 记录上添加任何文本,例如您的联系信息或您希望人们在查询您的 DNS 服务器时知道的任何其他信息。

你可以这样写TXT记录:


example.com.   IN           TXT         " YOUR INFO GOES HERE"  

此外,您还可以使用RP记录放置联系信息。


example.com.   IN           RP           mail.example.com.         example.com.  

 

DNS TTL 值

In /etc/named.conf上面有$TTL entry.

此条目通知 BIND 有关每个单独记录的生存时间值的信息。

它需要一个以秒为单位的值,例如14400 秒(4 小时),因此 DNS 服务器将缓存您的区域长达四个小时,然后将再次查询您的 DNS 服务器。

您可以降低该值,但除非您知道自己在做什么,否则默认值是公平的。

 

捕获配置错误

当您编写区域文件时,您可能会忘记句点、空格或任何其他错误。

您可以从日志中诊断 Linux DNS 服务器错误。 BIND服务通过/var/log/messages中的错误,可以使用尾部命令使用 -f 选项查看实时错误日志。


$tail -f /var/log/messages  

因此,当您编写区域文件或修改 /etc/named.config 并重新启动服务并显示错误时,您可以轻松地从日志中识别错误。

 

主机命令

成功添加或修改记录后,您可以使用 host 命令查看您的主机是否已正确解析。

如果你给它一个主机名,它会用相应的 IP 地址进行应答。


$ host example.com  

此外,您还可以执行反向查找。


$ host 192.168.1.5  

您可以检查主机和挖掘命令.

 

Whois命令

您可以使用 whois 命令获取域名所有者的详细信息。

此外,还有所有者的电子邮件地址和联系电话号码。


$ whois example.com  

 

rndc 命令

您可以使用 rndc 工具安全地管理名称服务器。

您可以像这样检查 Linux DNS 服务器的状态:


$ rndc status  

此外,如果您对任何区域文件进行更改,则可以重新加载服务而无需重新启动指定服务。


$ rndc reload example.com  

这里我们重新加载 example.com 区域文件。

您可以像这样重新加载所有区域:


$ rndc reload  

或者您可能添加新区域或更改服务配置;您可以像这样重新加载配置:


$ rndc reconfig  

 

Linux DNS 解析器

我们已经了解了 Linux DNS 服务器的工作原理以及如何配置它。另一部分是联系 DNS 服务器的客户端。

客户端是解析者;你可以检查配置文件/etc/resolv.conf

在基于 Debian 的发行版上,您可以检查/etc/resolvconf/resolv.conf.d/目录。

The /etc/resolv.conf文件包含系统使用的本地 DNS 服务器。

第一行是默认搜索域,第二行表示名称服务器的 IP 地址。

一旦 BIND 服务运行,您就可以使用自己的 DNS 服务器,只需在resolver.conf 文件中键入它们即可。

使用 Linux DNS 服务器非常简单。我希望您觉得这篇文章有用且简单。

谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安装、配置和维护 Linux DNS 服务器 的相关文章

  • C# 中的空合并运算符 (??)

    在 C 领域 程序员使用许多运算符来执行各种操作 并且每个运算符都有其独特的功能 空合并运算符 就是这样一个运算符 通常被视为管理空值的重要实用程序 什么是空合并运算符 空合并运算符是一个二元运算符 可简化对空值的检查并在遇到空值时定义默认
  • Linux 中的 su 命令及有用示例

    The su 命令也称为切换用户 该命令用于在登录会话期间成为另一个用户 当没有用户名调用时 su 默认切换到超级用户 基本上 su 命令用于将当前登录的用户更改为另一个用户 而无需从系统注销 它是 Linux 终端用户经常使用的命令 本教

随机推荐

  • 如何在 Amazon Linux 2 上安装 Python 3.11

    Amazon Linux 2 是由 Amazon Web Services AWS 团队开发的操作系统 您可以使用此操作系统启动 Amazon ec2 实例 此外 磁盘映像可用于主要的虚拟机管理程序平台 Python 是一种功能强大的通用编
  • 如何在 Python 中读取文本文件

    使用 Python 应用程序时 您需要使用 Python 读取和写入文本文件 您可以参考我们的其他教程用Python编写文本文件 在 Python 中读取文本文件是一个简单的过程 可以使用几种不同的方法来完成 在本文中 我们将介绍以下在 P
  • 如何在 Ubuntu 18.04、16.04 和 LinuxMint 19/18 上安装和使用 Cordova

    阿帕奇科尔多瓦是一个开源移动开发框架 它允许您使用 HTML5 CSS3 和 JavaScript 等标准 Web 技术进行跨平台开发 避免每个移动平台的原生开发语言 Apache Cordova 命令行需要 Node js 才能在 NPM
  • 如何在 Ubuntu 22.04 上安装 Node.js

    Node正在成为开发者构建前端应用程序的首选 此外 许多开发人员正在使用它来构建 REST API 和 CRUD 该编程语言由 OpenJS 基金会开发 运行在 Chrome 的 v8 引擎上 Node js 适用于大多数现代操作系统 包括
  • 如何在 Ubuntu 18.04 和 16.04 LTS 上安装 Dovecot

    本教程将帮助您在 Ubuntu 系统上安装 Dovecot Dovecot 包为 POP IMAP 协议提供服务 通过这些协议 您可以从远程客户端访问电子邮件帐户 步骤 1 在 Ubuntu 上安装 Dovecot Dovecot 软件包可
  • 使用 Crontab 安排 Cron 作业

    Cron 是一个调度守护进程 按指定的时间间隔执行任务 这些任务称为 cron 作业 主要用于自动化系统维护或管理 例如 您可以设置 cron 作业来自动执行重复任务 例如备份数据库或数据 使用最新的安全补丁更新系统 检查磁盘空间使用情况
  • 如何列出 Debian 上已安装的软件包

    在本指南中 我们将解释如何列出和过滤 Debian 上已安装的软件包 我们还将向您展示如何检查是否安装了特定的软件包 计算已安装的软件包以及找出已安装软件包的版本 当您需要在另一台计算机上安装相同的软件包或想要重新安装系统时 了解如何列出基
  • 如何在 Ubuntu 18.04 上部署 Odoo 12

    Odoo 是世界上最受欢迎的一体化商业软件 它提供一系列业务应用程序 包括 CRM 网站 电子商务 计费 会计 制造 仓库 项目管理 库存等等 所有这些都无缝集成 Odoo可以通过多种不同的方式安装 安装 Odoo 最简单 最快的方法是使用
  • 如何从命令行管理 MySQL 数据库和用户

    MySQL 是最流行的开源关系数据库管理系统 MySQL服务器允许我们创建大量的用户和数据库 并授予适当的权限 以便用户可以访问和管理数据库 本教程介绍如何使用命令行创建和管理 MySQL 或 MariaDB 数据库和用户 在你开始之前 在
  • 如何在 CentOS 7 上安装和配置 Redis

    Redis 是一个开源的内存数据结构存储 它可以用作数据库 缓存和消息代理 并支持各种数据结构 如字符串 哈希 列表 集合等 Redis 通过 Redis Sentinel 提供高可用性 包括监控 通知 自动故障转移 它还通过 Redis
  • 列出(显示)MySQL 数据库中的表

    管理时MySQL对于数据库服务器 您将执行的最常见的任务之一就是熟悉环境 这包括列出数据库驻留在服务器上 显示数据库表 或获取有关的信息用户帐户及其权限 本文介绍如何通过命令行列出 MySQL 或 MariaDB 数据库中的表 显示 MyS
  • 野外仍发现心脏出血:您知道自己可能很脆弱吗?

    自 Heartbleed 首次被发现以来已经六年了 OpenSSL 漏洞仍然可以在互联网上被发现和利用 事实上 19 的全球攻击由于大量未修补的面向公众的服务器 我们针对 OpenSSL Heartbleed 漏洞进行了攻击 无论是由于扫描
  • 如何在 Ubuntu 22.04 上安装 Node.js 和 npm

    Node js 是一个基于 Chrome JavaScript 构建的跨平台 开源 JavaScript 运行时环境 旨在在 Web 浏览器之外执行 JavaScript 代码 它通常用于构建快速且可扩展的服务器端和网络应用程序 npm 是
  • 如何在 Linux 中列出用户

    您是否曾经想要列出 Linux 系统中的所有用户或统计系统中的用户数量 有创建用户 删除用户 列出登录用户的命令 但是在Linux中列出所有用户的命令是什么 本教程将向您展示如何列出 Linux 系统中的用户 使用以下命令获取所有用户的列表
  • 如何在 Ubuntu 18.04 上创建 Python 虚拟环境

    Python 虚拟环境是一个独立的目录树 其中包括 Python 安装和许多附加包 Python虚拟环境的主要目的是为不同的Python项目创建一个隔离的环境 这样您就可以在每个项目的基础上安装特定版本的模块 而不必担心它会影响您的其他 P
  • 如何在 Debian 10 Linux 上安装和配置 Redis

    Redis 是一个开源内存键值数据存储 它可以用作数据库 缓存和消息代理 并支持各种数据结构 例如字符串 哈希 列表 集合等 Redis 通过 Redis Sentinel 提供高可用性 并通过 Redis Cluster 跨多个 Redi
  • 如何在 CentOS 8 上安装 Yarn

    Yarn 是一个与 npm 兼容的 JavaScript 包管理器 可帮助您自动执行安装 更新 配置和删除 npm 包的过程 它的创建是为了解决 npm 的一系列问题 例如通过并行操作加快软件包安装过程并减少与网络连接相关的错误 本教程将指
  • 使用 Python Pandas read_json 读取 JSON 文件

    Pandas read json 函数允许您读取 JSON 文件并将其转换为Pandas数据框 在本教程中 您将学习如何使用 Python 的 Pandas 加载 JSON 文件 处理各种 JSON 格式 自定义列标签 推断数据类型 解析日
  • Seaborn 热图教程(Python 数据可视化)

    在本教程中 我们将使用名为 seaborn 的 Python 库以热图形式表示数据 该库用于基于以下内容可视化数据Matplotlib 您将了解什么是热图 如何创建它 如何更改其颜色 调整其字体大小等等 所以让我们开始吧 目录 hide 1
  • 安装、配置和维护 Linux DNS 服务器

    DNS 域名系统 是计算机的命名系统 执行此操作的服务是 DNS 服务器 它将 IP 地址转换为人类可读的地址 这个进程是互联网的支柱 也是服务器中非常重要的服务 因此从那时起 我们将讨论 DNS 服务器 特别是 Linux DNS 服务器