顶级域名 (TLD)
我们看到了顶级域组件,例如 com 域。
顶级域 (TLD) 根据地理或者功能方面进行分类。
在撰写本文时,网络上有 800 多个顶级域。
顶级域类别是:
- 通用顶级域,如(.org、.com、.net、.gov、.edu 等)。
- 国家代码顶级域,如(.us、.ca 等)分别对应于美国和加拿大的国家代码。
- 新的品牌顶级域,如(.linux、.microsoft、.companyname 等)。
- 基础结构顶级域,如 .arpa 域。
/etc/hosts 文件
每个系统都必须保留其主机名及其 IP 地址表的副本。
该文件负责 IP 地址。
在 Linux 系统上,此表是 /etc/hosts 文件。
因此,即使我们没有 DNS 服务器或者 DNS 服务器不可用,此文件也可以使用 /etc/hosts 文件将 IP 地址转换为名称。
这意味着系统在去 DNS 服务器之前首先查询这个文件,如果它找到了域,它会在不去任何 DNS 服务器的情况下转换它。
尝试编辑 /etc/hosts 并键入以下内容:
127.0.0.1 google.com
然后转到浏览器并输入 google.com 并查看结果。
如果系统上安装了 Apache 服务器并且本地主机正在运行,它将显示本地主机的索引页面而不是谷歌页面。
我们可以将 google.com 转换为任何站点的任何其他 IP 地址并查看结果以确保这一点。
所以这个文件正在做的是将 IP 地址转换为名称,但这是针对同一个连接的网络。
那么外部网络如何以及如何维护所有系统的所有这些记录呢?
每个人都会管理自己的 /etc/hosts 文件并自己更新吗?
当然不是。
子域
当我们访问像 mail.google.com 这样的网站时,这里的邮件是 google.com 的子域。
只有 mail.google.com 的名称服务器知道其下存在的所有主机,因此 google 会回答是否存在邮件子域,而根名称服务器对此一无所知。
捕获配置错误
当我们编写区域文件时,我们可能忘记了句点或者空格或者任何其他错误。
我们可以从日志中诊断 Linux DNS 服务器错误。
BIND 服务通过/var/log/messages 中的错误,可以使用tail 命令使用-f 选项查看实时错误日志。
$tail -f /var/log/messages
因此,当我们编写区域文件或者修改 /etc/named.config 并重新启动服务并显示错误时,我们可以轻松地从日志中识别错误。
定义主要区域
我们从 DNS 服务器类型中知道有主要、次要和缓存 DNS 服务器。
与缓存服务器不同,主要和次要的答案具有同等的权威性。
要定义主要区域,我们可以使用以下语法:
/etc/named.conf
zone "onitroad.com" { type master; file onitroad.com.db };
包含区域信息的文件位于 /var/named 目录中,因为这是我们从选项中知道的工作目录。
请注意,我们使用的服务器软件或者托管面板会自动为我们创建此名称的文件,因此如果域是 example.org,则该文件将是 /var/named/example.org.db 。
类型是 master,这意味着这是一个主要区域。
Whois 命令
我们可以使用 whois 命令来获取域所有者的详细信息。
此外,所有者的电子邮件地址和联系电话号码。
$ whois example.com
设置 Linux DNS 服务器
Linux 上有许多实现 DNS 功能的软件包,但我们将重点介绍 BIND DNS 服务器。
世界各地的许多服务器都使用它。
如果你使用的是基于 Red Hat 的发行版,比如 CentOS,你可以像这样安装它:
$ dnf -y install bind
或者在像 Ubuntu 这样的基于 Debian 的系统上:
$ apt-get install bind9
安装完成后,我们可以启动它并使其在引导时运行。
$ systemctl start named $ systemctl enable named
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 配置文件非常挑剔。
IN 单词的意思是互联网记录(Internet record)。
SOA 词的意思是权限开始记录(Start of Authority record)。
ns1.example.com. 是域的名称服务器。
mail.host.com. 是域管理员电子邮件。
我们可能会注意到没有@ 符号,我们将其替换为句点,并且有一个尾随句点。
第 2 行是序列号,我们用它来告诉名称服务器文件更新时间,因此如果对区域数据进行更改,则必须增加此数字。
序列号的格式为 YYYYMMDDxx,其中 xx 从 00 开始。
第 3 行是以秒为单位的刷新率。
辅助 DNS 服务器应多久查询一次主服务器以检查更新。
第 4 行是以秒为单位的重试率。
这是辅助 DNS 服务器在尝试连接到主 DNS 服务器后等待而无法访问的时间。
指定的重试秒数。
第 5 行是 expire 指令。
如果辅助服务器无法连接到主服务器进行更新,它应该在指定的秒数后丢弃该值。
第 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.
域名
当我们访问一个网站时,我们输入 FQDN(完全限定域名)或者像这样的域名:onitroad.com 或者 www.google.com
每个域由域组件组成;点分隔这些组件。
text com为顶级域组件,google为二级域组件,www为三级域组件
当我们访问任何网站时,浏览器会默默地在末尾添加一个点,但我们看不到,因此域将类似于 www.google.com。
注意 .com 后面的点;这个点称为根域。
但是为什么我们要添加这个根域或者点呢?
因为这个点是由根域名服务器服务的,所以在发这篇文章的时候,世界上有 13 个根域名服务器,你可以把它们想象成互联网的大脑,如果它们关闭,世界将没有互联网。
为什么是13?
因为也许世界上某个地方发生地震或者自然灾害可能会破坏根服务器,所以其他人会一直服务,直到损坏的服务器重新上线。
这些根名称服务器的名称如下:a.root-server.net、b.root-server.net 等等。
DNS TTL 值
在顶部的 /etc/named.conf 中有 $TTL 条目。
此条目通知 BIND 有关每个单独记录的生存时间值。
它需要一个以秒为单位的值,例如 14400 秒(4 小时),因此 DNS 服务器会将区域缓存长达四个小时,然后再次查询 DNS 服务器。
我们可以降低该值,但默认值是公平的,除非我们知道自己在做什么。
定义缓存区
有一个缓存区是必要的,因此我们可以减少对 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 服务器。
现在,我们应该键入所引用文件的内容,例如 onitroad.com.db、localhost.db 和 127.0.0.rev。
这些文件包含每个区域的 DNS 记录类型和一些选项。
那么这些 DNS 记录类型是什么以及如何编写它们呢?
DNS(域名系统)是计算机的命名系统,执行此操作的服务是将 IP 地址转换为人类可读地址的 DNS 服务器。
在本教程中,们将讨论 DNS 服务器或者特别是 Linux DNS 服务器以及如何安装、配置和维护它。
host命令
成功添加或者修改记录后,我们可以使用 host 命令查看主机是否正确解析。
如果你给它一个主机名,它会用相应的 IP 地址回答。
$ host example.com
此外,我们可以执行反向查找。
$ host 192.168.1.5
我们可以检查 host 和 dig 命令。
Linux DNS 解析器
我们已经了解了 Linux DNS 服务器的工作原理以及如何配置它。
另一部分是联系DNS服务器的客户端。
客户端是解析器;你可以查看配置文件/etc/resolv.conf
在基于 Debian 的发行版上,我们可以查看 /etc/resolvconf/resolv.conf.d/ 目录。
/etc/resolv.conf 文件包含系统使用的本地 DNS 服务器。
第一行是默认搜索域,第二行是名称服务器的IP地址。
一旦 BIND 服务运行,我们就可以使用自己的 DNS 服务器,只需在 resolver.conf 文件中输入它们地址即可。
DNS 服务器的类型
DNS 服务器分为三种类型:
- 主 DNS 服务器:它们包含域的配置文件,并响应 DNS 查询。
- 辅助 DNS 服务器:它们用作备份和负载分配。主服务器知道辅助名称服务器的存在并向它们发送更新。
- 缓存 DNS 服务器:它们所做的只是缓存 DNS 响应,因此我们无需再次询问主要或者辅助 DNS 服务器。我们可以轻松地将系统用作缓存服务器,我们将在本文后面看到。
定义次要区域
与主区域定义相同,几乎没有变化。
zone "onitroad.com" { type slave; masters Primary Nameserver IP Address Here; ; file onitroad.com.db };
在secondary zone中,域与primary zone相同,这里的类型slave表示这是secondary zone,masters选项列出了primary nameserver的IP地址,最后,file是主要的区域文件。
rndc 命令
我们可以使用 rndc 工具安全地管理名称服务器。
我们可以像这样检查 Linux DNS 服务器的状态:
$ rndc status
此外,如果我们对任何区域文件进行了更改,则无需重新启动指定服务即可重新加载该服务。
$ rndc reload example.com
在这里,我们重新加载 example.com 区域文件。
我们可以像这样重新加载所有区域:
$ rndc reload
或者我们可能添加新区域或者更改服务配置;我们可以像这样重新加载配置:
$ rndc reconfig
配置BIND
服务配置是/etc/named.conf 文件。
BIND 在该文件中使用了一些语句,例如:
选项 | 用于全局绑定配置。 |
---|---|
logging | 可以记录什么,可以忽略什么。我建议我们查看Linux Syslog服务器。 |
zone | 定义DNS区域。 |
include | 在名为named.conf中包含另一个文件。 |
从选项语句中,我们可以看到 BIND 的工作目录是 /var/named 目录。
zone 语句使我们能够定义 DNS 区域。
就像域 google.com 一样,它也有子域,如 mail.google.com 和 analytics.google.com 以及其他子域。
这三个(域和子域)中的每一个都有一个由 zone 语句定义的区域。