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 服务器非常简单。我希望您觉得这篇文章有用且简单。
谢谢。