DNS 基础知识及 Linux DNS 服务器操作知识_linuxdns设计中用到的知识点有哪些

服务器 0

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

因特网上的域名结构呈树状分布,因此DNS服务器也是对应的树形结构,每一个DNS服务器能够提供部分域名(它管辖的域名)到IP地址的解析。

4、DNS查询

查询方式

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

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

主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。

下图给出了这两种查询的差别
在这里插入图片描述

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 服务器的存在,并且会向他们推送更新。

缓存 DNS 服务器

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

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

1、搭建 Linux DNS 服务器

Linux 下有很多实现了 DNS 功能的包,不过我们只关注 BIND DNS 服务器。它用于世界上大多数 DNS 服务器。

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

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

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

$ systemctl start named

$ systemctl enable named

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” {

type master;

file likegeeks.com.db

};

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

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

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

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

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

zone “likegeeks.com” {

type slave;

masters IP Address list; ;

file likegeeks.com.db

};

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

5、定义一个缓存服务器

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

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

zone “.” IN {type hint;file “root.hint”;};

zone “.” IN {type hint;file “root.hint”;};

zone “.” IN {type hint;file “root.hint”;};

zone “localhost” IN {type master;file “localhost.db”;};

定义第三个区域是为了反向查找到本地主机。这种反向查找是把本地的 IP 地址指向本地主机。

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

type master;

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)。

mail.host.com. 是域管理员的邮箱地址。你会发现这个邮箱地址没有 “@” 标志,而是被句号所取代,并且末尾还有一个句号。

第 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 记录,但是通常偏好有备份名称服务器。

A 和 AAAA: Address Records(地址记录)

A 记录用于提供从主机名到 IP 地址的映射 support IN A 192.168.1.5。

如果你在地址为 192.168.1.5 上的 support.example.com 上有一个主机,你可以像上面的例子那样输入。

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

PTR: Pointer Records(指针记录)

PTR 记录用于执行反向名称解析,允许某人指定 IP 地址然后找出对应的主机名。

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

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

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

MX 记录告诉其他站点关于你所在域的邮件服务器地址:example.com. IN MX 10 mail.

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

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

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

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
0 是邮件服务器的重要性标志,如果你拥有多个邮件服务器,其中较小的数字不太重要。

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

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

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-sl7U2Qti-1713124149159)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

也许您对下面的内容还感兴趣: