dns怎么查看命令(dns查看命令的方法讲解)

阅读本文大概需要 15 分钟。

本文包括理解 DNS 所需的基础知识及 Linux DNS 服务器的安装、配置和维护具体操作相关知识。

1、域名结构

在了解DNS服务器之前,需要先了解因特网上的域名空间结构,具体如下图所示:

dns怎么查看命令(dns查看命令的方法讲解)

顶级域名是域名的最后一个部分,即是域名最后一点之后的字母,例如在http://example.com 这个域名中,顶级域是.com(或.COM),大小写视为相同。

二级域名是域名的倒数第二个部分,例如在http://example.com 这个域名中,二级域名是example。以此类推。

2、域名服务器

因特网上的DNS服务器按照层次安排,根据不同层次的域名服务器所起的作用,可以把域名服务器分为4种不同的类型。

根域名服务器顶级域名服务器权威域名服务器本地域名服务器

【根域名服务器】

最高层次的域名服务器(就好像国家总理一样),也是最重要的域名服务器。全球有13个根域名服务器名称,分别是(它们是按照字母排列命名的):

a.root-servers.net.b.root-servers.net.c.root-servers.net.d.root-servers.net.e.root-servers.net.f.root-servers.net.g.root-servers.net.h.root-servers.net.i.root-servers.net.j.root-servers.net.k.root-servers.net.l.root-servers.net.m.root-servers.net.

【顶级域名服务器】

【 权威域名服务器】

负责一个区的域名服务器,就好像省长以下的那些市长、镇长、乡长等行政官。顶级域名服务器也可以算作是权威域名服务器,只不过由于其特殊性,我们专门把它划分为一类。因此权威域名服务器通常是指顶级域名以下的管理二级、三级、四级等域名的服务器。

上面三种服务器的关系可以用这张图表示:

【本地域名服务器】

这类服务器不属于上面的层次结构,当一个主机(个人电脑)发出DNS请求时,查询请求就被发送到本地域名服务器,本地域名服务器负责回答这个查询,或者代替主机向域名空间中不同层次的权威域名服务器查询,再把查询的结果返回给主机。

下面的图示表示了一个域名的解析过程以及各个类型的域名服务器所处的位置。

3、为什么要使用DNS服务器

一个服务器所负责管辖的范围叫做区(zone),如果我们把域名空间结构中的根比作国家,顶级域名比作省级行政单位,二级域名看作是市级单位、三级、四级看作是镇和乡,那么自然地,我们会想到管辖国家的是总理,管辖省级单位的是省长,下面还有市长、镇长等等。

假设一个域http://abc.com 的层次结构如图分布。

如果采用(a)的方式,那么整个从abc这个节点以下的子树成为一个区,它们由一个(通常是1组)域名服务器管理,就好像http://abc.com是一个北京市,下面所有事务都有北京市长说了算;

如果采用(b)的方式,那么abc节点以下的字数分成了两个区:x节点以下的部分的子树和y节点以下的子树,这两棵子树分别有x和y对应的域名服务器管理,就好像http://abc.com 是一个福建省,x是福州市,y是厦门市,福建省的省长只管理福州市和厦门市的市长,但不会直接管理福州市和厦门市以下的单位。福州市和厦门市以下的单位分别给福州市市长和厦门市市长来管辖。

像这种把一个域中的一部分子树分给另一个域名服务器管辖,叫做“授权委托”,做了“授权委托”以后的域名服务器很显然管理的范围就小了,它的子节点由被委任的下一级域名服务器管理了。

4、DNS查询

查询方式

递归查询:客户机向自己的DNS服务器请求解析的方式

迭代查询:服务器向服务器查询的方式

下图给出了这两种查询的差别

DNS解析的顺序:(由/etc/nsswitch.conf决定)

1. 本机缓存

2. 本机/etc/hosts文件

a) 格式:IP FQDN Alais

3. 指定的DNS服务器缓存

a) 清空缓存:rhdc flush

4. 指定的DNS服务器(/etc/resolv.conf)

a) 格式:

# search example.com

# nameserver 202.103.24.68

# nameserver 202.103.149.50

DNS查询命令

1. gethostip

a)是syslinux包的组成部分

b)通过hosts文件和DNS解析主机名到IP

c)把IP计算成8位的16进制在PXE中有特殊用途

2. host

a)仅通过DNS查询

b)查询主机名到IP的解析

3. nslookup

a)windows的解析工具,linux中通用,目前较少使用

b)提供简单的正反和反向解析查询

4. dig

a)linux中功能强大的查询工具,可以查询更加详细的信息,使用最广泛

b)可以追踪到非权威的DNS

5、DNS 服务器的类型

一共有三种 DNS 服务器。

主 DNS 服务器

辅助 DNS 服务器

这些服务器作为主 DNS 服务器的备份,也承担一定负载。主服务器知道辅助 DNS 服务器的存在,并且会向他们推送更新。

缓存 DNS 服务器

这些服务器上不存放特定域名的配置文件。当客户端请求缓存服务器来解析域名时,该服务器将首先检查其本地缓存。如果找不到匹配项便会询问主服务器。接着这条响应将被缓存起来。您也可以轻松地将自己的系统用作缓存服务器。

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

1、搭建 Linux DNS 服务器

如果你在使用基于 Red Hat 发行版的 Linux,比如 CentOS,可以像这样安装:$ dnf -y install bind

如果你使用基于 Debian 的操作系统,比如 Ubuntu:$ apt-get install bind9

安装完成之后就可以启动它并让它在计算机启动的时候一并启动起来。

$systemctlstartnamed

$systemctlenablenamed

2、配置 BIND

这个服务使用/etc/named.conf 作为配置文件。

BIND 在那个文件中使用像下面这样的一些语句:

options:用于全局 BIND 配置。

logging:配置哪些需要记录,哪些需要忽略。我推荐你看看 Linux syslog server。

zone:定义 DNS 区域。

include:在 named.conf 中包含另一个文件。

在 options 语句中可以看到 BIND 的工作目录在/var/named。

zone 语句可用于定义 DNS 区域,比如域名 google.com,它包含子域名 mail.google.com 和 analytics.google.com。

上述三个域名 (主域名和子域名) 都有一个由 zone 语句定义的区域。

3、定义一个主域服务器

我们知道 DNS 服务器类型有主域名服务器、辅助域名服务器和缓存域名服务器。不同于缓存域名服务器,主域名服务器和辅助域名服务器在应答过程中是处于同等地位的。

在/etc/named.conf 的配置文件中,你可以使用如下语法定义一个主域服务器:

zone”likegeeks.com”{

typemaster;

filelikegeeks.com.db

};

包含主要区域信息的文件存放在/var/named 目录下,从 options 可知,这是一个工作目录。

注意:软件服务器或者托管面板会根据你的域名自动为你创建主域服务器信息的文件名,因此如果你的域名是 example.org,那么你主域服务器信息的文件就为/var/named/example.org.db。

类型为 master,也就是说这是一个主域服务器。

4、定义一个辅助域服务器

同定义一个主域服务器一样,辅助域服务器的定义稍微有些变化:

zone”likegeeks.com”{

typeslave;

mastersIPAddresslist;;

filelikegeeks.com.db

};

对于辅助域服务器来说,它的域名和主域服务器是一样的。上述语法里的的 slave 类型表示这是一个辅助域服务器,“masters IP Address list” 表示辅助域服务器中区域文件内的信息都是通过主域服务器中区域文件内的信息复制过来的。

5、定义一个缓存服务器

即使你已经配置了主域或者辅助域服务器,你仍有必要(不是必须)定义一个缓存服务器,因为这样你可以减少 DNS 服务器的查询次数。

在定义缓存服务器之前,你需要先定义三个区域选择器,第一个:

zone”.”IN{typehint;file”root.hint”;};

zone”.”IN{typehint;file”root.hint”;};

zone”.”IN{typehint;file”root.hint”;};

zone”localhost”IN{typemaster;file”localhost.db”;};

zone”0.0.127.in-addr.arpa”IN{

typemaster;

file”127.0.0.rev”;

};

把这三个区域信息放到 / etc/named.conf 文件里,你的系统就可以以缓存服务器来工作了。但是如何引用类似 likegeeks.com.db, localhost.db, 和 127.0.0.rev 这些文件中的内容呢?

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

6、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 告诉域名服务器:这是一条网络记录。

SOA 告诉域名服务器:这是一条起始授权机构记录。

ns1.example.com. 是该文件所在域的域名服务器的完全合格域名(FQDN: Fully Qualified Domain Name)。

第 2 行是一个序列码,它被用来告诉域名服务器文件是什么时候升级的。因此,如果你对区域码做了变更,你必须对这个序列码进行递增。这个序列码的格式是 YYYYMMDDxx ,其中的 xx 是从 00 开始的。

第 3 行是每秒刷新率。这个值被用来告诉第二个域名服务器查询主服务器中的记录是否已经被更新的频率。

第 4 行是每秒重试的频率。如果第二个服务器多次尝试连接主域名服务器来进行更新检测,但无法连接上的时候,第二个服务器就会在每秒内重试指定的数值次数。

第 5 行是超时指示。其目的是为了第二个服务器能将区域数据缓存下来。这个值告诉这些服务器如果它们不能连接到主服务器来进行更新,那么它们就会在这个指定数值秒数之后抛弃这个值。

第 6 行告诉缓存服务器,如果它们不能连接到主域名服务器时,它们应该在超时前等待多久。

NS:Name Server Records(名称服务器记录)

NS 记录用于指定哪个名称服务器维护该域的记录。

你可以这样编写的 NS 记录:

IN NS ns1.example.com.

IN NS ns2.example.com.

并不需要有 2 个 NS 记录,但是通常偏好有备份名称服务器。

请注意,我们所写的主机并没有句号。

PTR: Pointer Records(指针记录)

这与 A 记录的功能相反:192.168.1.5 IN PTR support.example.com.

在这里,我们键入具有点号的完整主机名。

MX:Mail Exchange Records(邮件交换记录)

当然这个域以句号结束。数字 10 是邮件服务器的重要性标志,如果你拥有多个邮件服务器,其中较小的数字不太重要。

CNAME:Canonical Name Records(权威名称记录)

CNAME 记录允许你为主机名创建别名。当你想提供一个易于记住的名称时,这很有用。

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

你可以创建名为 www.example.com 的域名创建 CNAME 记录:

whatever-bignameis IN A 192.168.1.5

www IN CNAME whatever-bignameis

第一行通知 DNS 服务器关于别名的位置。第二行创建一个指向 www 的别名。

TXT 记录

你可以这样保存 TXT 记录:example.com. IN TXT ” YOUR INFO GOES HERE”.

此外,RP 记录被创建为对 host 联系信息的显式容器:example.com. IN RP mail.example.com. example.com。

7、DNS TTL 值

在 / etc/named.conf 文件的顶部,这里有一个 $TTL 条目。

该条目告诉 BIND 每个单独记录的 TTL 值(time to live,生存时间值)。

它是以秒为单位的数值,比如 14,400 秒(4 个小时),因此 DNS 服务器最多缓存你的域文件 4 个小时,之后就会向你的 DNS 服务器重新查询。

你可以降低这个值,但是默认值通常是合理的。除非你知道你正在做什么。

8、捕获配置错误

当您写入域文件时,也许您忘记了一个句号或空格或其他任意错误。

你可以从日志诊断 Linux DNS 服务器错误。BIND 服务通过 / var/log/messages 上的错误,可以使用 tail 命令来查看实时错误日志,须使用 – f 选项:$ tail -f /var /log/messages。

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

9、Host 命令

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

此外,你可以执行反向查找:$ host 192.168.1.5。

你可以 this 在此篇文章 https://likegeeks.com/linux-network-commands/中查看更多关于 host 和 dig 命令的信息。

10、Whois 命令

11、Rndc 命令

rndc 工具可用于安全地管理名称服务器,因为与服务器的所有通信均通过数字签名进行身份验证。

此工具用于控制名称服务器和调试问题。你可以通过以下方式检查 Linux DNS 服务器的状态:$ rndc status。

此外,如果你更改任何域 (zone) 文件,您可以重新加载服务,而无须重启命名服务:$ rndc reload example.com。

在这里,我们重新加载 example.com 域文件。你可以重新加载所有域:$ rndc reload。

或者你可以添加新的域或更改服务的配置。你可以重新加载配置,如下所示:$ rndc reconfig。

12、Linux DNS 解析器

在 Linux 上,解析器位于 DNS 的客户端。要配置解析器,可以检查 / etc/resolv.conf 这个配置文件。

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

名称服务器行告诉解析器哪个名称服务器可使用。只要你的 BIND 服务正在运行,你就可以使用自己的 DNS 服务器。

后台回复“加群”,带你进入高手如云交流群

推荐阅读:

学习k8s,这些负载均衡知识点得知道!

杀死进程的N种姿势你知道吗

了解云计算底层技术虚拟化,看这一篇

12306 的技术扒光在你面前

Linux iperf 网络传输性能测试工具

漫话:什么是云计算?

运维墨菲定律,值得每天读一遍

容器监控系统如何做,看看这篇就够了

发表评论

登录后才能评论