1写在前面

理解不足小伙伴帮忙指正

突然发现,拍一拍设置成烟花,每次拍出的烟花都不一样…….就像缘分一样

简单介绍

DNS(DNS-Domain Name System) ,中文名即域名系统,简单理解,即将域名和 IP 地址相互映射的一个分布式数据库,用于 域名解析IP地址,IP地址反向解析域名 ,能够使人更方便地访问互联网。DNS 使用 TCP 和 UDP 端口 53,系统内存储了 网络主机地址和资源目录 的一个分层命名系统。分层类似树一样。

这里的 资源目录 指将 域名 映射到不同 资源记录。并保存在称为 资源记录 的逻辑条目中。

DNS 层次结构从顶部的 根域(.) 开始,向下分支到多个下一级域。DNS 层次结构的每一层都由域名中的 . 描述,. 是最顶层。域名如.com、.Net和.org 占据层次结构的第二层,例如example.com,占据在第三层, liruilongs.github.io占据第四层。

在全球互联网中,部署 DNS 服务中存放最高级别的域名的服务器,称之为 根服务器。负责返回顶级域名的权威域名服务器的地址,按照解析 IP 来分,有 IPV4 和 IPV6 两种,按照服务器类型分,分为 主根服务器 和 辅根服务器,或者可在加一个 镜像服务器

IPV4

最早是 IPV4,全球只有 13 台(这 13 台 IPv4 根域名服务器名字分别为“A”至“M”),1 个为主根服务器在美国,由美国互联网机构 Network Solutions 运作。其余 12 个均为辅根服务器,其中 9 个在美国刷新本地dns, 2 个在欧洲(位于英国和瑞典), 1 个在亚洲(位于日本)。

实际上 DNS 根域名服务器并不真的只有 13 台,而是 13 个 IP,对应了 A-M 13 个编号,借由任播(Anycast)技术,编号相同的根服务器使用同一个 IP(类似一个集群)。截至 2014 年 10 月,全球有 504 台根服务器,被编号为 A 到 M 共 13 个标号。504 台根服务器大部分借由任播(Anycast)技术,编号相同的根服务器使用同一个 IP,504 台根服务器总共只使用 13 个 IP,因此可以抵抗针对其所进行的分布式拒绝服务攻击(DDoS)。

中国的镜像服务器:

为什么根服务器只有 13 台 ?

DNS 协议的最初定义要从 20 世纪 80 年代未期开始算起,它使用了 UDP 和 TCP 协议。UDP 通常用于 DNS 解析查询和响应,TCP 用于 DNS 主服务器和从服务器之间的区域数据传送。

遗憾的是,在所有 UDP 实现中能保证正常工作的最大包是 512 字节,对于在每个包中必须含有数字签名的一些 DNS 新特性(例如,DNSSEC)来说实在是太小了。

512 字节的限制还影响了根服务器的数量和名字。

要让所有的根服务器数据能包含在一个 512 字节的 UDP 包中,根服务器只能限制在 13 个,而每个服务器要使用字母表中的单个字母命名。

以太网数据的长度必须在 46-1500 字节之间,这是由以太网的物理特性决定的。事实上,这个 1500 字节就是网络层 IP 数据包的长度限制,理论上,IP 数据包最大长度是 65535 字节。

在 Internet 数据传输中,UDP 数据长度控制在 576 字节(Internet 标准 MTU 值),而在许多 UDP 应用程序设计中数据包被限制成 512 字节或更小。这样可以防止数据包的丢失。

许多解析器首先发送一条 UDP 查询,如果它们接收到一条被截断的响应,则会用 TCP 重新发送该查询。这个过程绕过了 512 字节的限制,但是效率不高。

您或许认为 DNS 应该避开 UDP,总是使用 TCP,但是 TCP 连接的开销大得多。

IPV6

IPV4 受长度的限制,担忧多年的 IPv4 地址耗尽时刻还是到了。负责英国、欧洲、中东和部分中亚地区互联网资源分配的欧洲网络协调中心通过邮件确认,其最后的 IPv4 地址储备池已于 2019 年 11 月 25 日完全耗尽。

IPv6 是 IP 协议 的最新版本,用它来取代 IPv4 ,主要是为了解决 IPv4 地址枯竭问题,同时它也在其他方面对于 IPv4 有许多改进。

然而长期以来 IPv4 在互联网流量中仍占据主要地位,同时 NAT 的出现 ,使得 IPv6 的使用增长缓慢。在 2022 年 4 月,通过 IPv6 使用 Google 服务的用户百分率首次超过 40%。

在与现有 IPv4 根服务器体系架构充分兼容基础上,雪人计划 于 2016 年在全球 16 个国家完成 25 台 IPv6 根服务器架设,事实上形成了 13 台原有根加 25 台 IPv6 根的新格局.

为建立多边、民主、透明的国际互联网治理体系打下坚实基础。中国部署了其中的 4 台,由 1 台主根服务器和 3 台辅根服务器组成,打破了中国过去没有根服务器的困境。

DNS 解析顺序

粗粒度的看,当我们在浏览器中输入域名的时候,或者应用程序处理域名解析时,一般首先会基于编程语言调用系统的 Socket 库来进行 DNS 解析,获取到对应的 IP,然后封装 网络层的相关数据包,添加首部,依次到链路层发出请求。

如果细粒度看,实际发生了好多细节,以 Linux 为例,首先会通过名称解析服务 etc/nsswitch.conf 读取 DNS 解析规则,通过文件中定义的 解析顺序发生解析。

linux dns刷新_刷新本地dns_刷新dns缓存

$ cat /etc/nsswitch.conf  | grep host
#     hosts: files dns
#     hosts: files dns  # from user file
hosts:      files dns myhostname
$

当解析发生时,首先通过 files 本地文件 /etc/hosts 发生解析,在 /etc/hosts 文件配置中,我们可以配置一些当前环境的自定义映射

$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.25.254.254  classroom.example.com classroom
172.25.254.254  content.example.com content
172.25.254.254  materials.example.com materials
### rht-vm-hosts file listing the entries to be appended to /etc/hosts

172.25.250.254  bastion.lab.example.com bastion
172.25.250.9    workstation.lab.example.com workstation
172.25.250.10   servera.lab.example.com servera
172.25.250.11   serverb.lab.example.com serverb
172.25.250.12   serverc.lab.example.com serverc
172.25.250.13   serverd.lab.example.com serverd
$

如果没有则通过 dns 解析,当需要从 DNS 获取信息时,如果对应的集群存在 DNS 缓存,可能会重缓存中获取,如果缓存中没有,会由存根解析器(stub resolver)向 /etc/resolv.conf 文件中第一个 nameserver记录查询 DNS 信息。如果该服务器没有响应,它将依次尝试其他服务器,直到获得答案或服务器用完为止。

$ cat /etc/resolv.conf
# Generated by NetworkManager
search lab.example.com example.com
nameserver 172.25.250.254

如果还是没有,则通过 myhostname 即当前主机名对应的DNS进行解析。

调用 DNS 服务器发送解析过程

客户端联系的 DNS 服务器通常是递归或者缓存 DNS服务器。通过会通过下面的方式检索客户端的答案:

DNS 的一些基本概念

关于 DNS 的一些基本概念:域、子域和区域。

Domain 域,是 resource records 的集合,以通用名结尾刷新本地dns,表示 DNS 命名空间的整个子树,如 example.com.。

Subdomain 子域:是另一个域的完整子树的域。在讨论两个域之间的关系时使用此术语。例如,lab.example.com 是 example.com 的子域,而 example.com 是 .com 的子域。您也可以将 example.com 称为第二级域,并将 lab.example.com 称为第三级域。

Zone 区域:是特定 DNS 服务器直接负责的域。它可能是整个域,也可能只是域的一部分。Zone 可以将部分或全部子域都委派给另一个 DNS 服务器或多个 DNS 服务器。

例如,root DNS 服务器对 root zone 具有权威性,但它们将 .com 域的职责委派给其他 DNS 服务器,这些 DNS 服务器为 .com 区域提供权威性应答。这些服务器还可以继续将责任委派给其他 DNS 服务器。

再例如,redhat.fun DNS 服务器对redhat.tun zone 具有权威性,但他将 lab.redhat.fun zone 委派给lab.redhat.fun DNS 服务器。

DNS 资源记录表

DNS 区域中的DNS resource record(RR-DNS资源记录)条目指定有关区域中特定名称或对象的信息。资源记录格式如下:

DNS 记录,不管任何类型的资源目录都使用下面的格式

owner-name        TTL     class type data
www.example.com.  300     IN    A    192.168.1.10

资源类型A

A 资源记录将主机名映射到 IPv4 地址。

host.example.com. 86400 IN A 172.25.254.254

AAAA

AAAA 资源记录(4A 记录)将主机名映射到 IPv6 地址。

a.root-servers.net. 604800 IN AAAA 2001:503:ba3e::2:30

CNAME:别名

CNAME 资源记录将一个名称映射为规范名称,规范名称具有 A 或 AAAA 记录。CNAME 记录的数据字段可以指向任意名称,无论该区域是内部的还是外部的:

www-dev.example.com.  30 IN CNAME lab.example.com.
www.example.com.      30 IN CNAME www.redhat.com.

PTR:IP 到域名反向解析

PTR 或 pointer 资源记录将 lPv4 或 IPv6 地址映射到主机名。它们用于反向 DNS 解析。PTR 记录以一种类似于主机名的特殊格式对 IP 地址进行编码。

4.0.41.198.in-addr.arpa.                          785 IN PTR a.root-servers.net.
0.3.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.3.a.b.3.0.5.0.1.0.0.2.ip6.arpa.  86400 IN PTR a.root-servers.net.

该语法可能看起来很奇怪,但是它简化了将地址范围的责任委托给其他 DNS 管理员的情况。

NS:指定区域的权威服务器

NS 或 DNS 服务器资源记录,将 域名映射到对其 DNS区域 具有 权威性的DNS 服务器,该区域的每个权威 DNS 服务器都必须其有 NS 记录。

example.com.                      86400 IN NS classroom.example.com.
168.192.ip-addr.arpa.             86400 IN NS classroom.example.com.
9.0.e.1.4.8.4.6.2.e.d.f.ip6.arpa. 86400 IN NS classroom.example.com.

说明:

SOA:指定 DNS 运行信息

SOA 资源记录,也叫做起始授权机构记录,提供有关 DNS 区域如何运行的信息。每个区域必须有一个 SOA 记录。

example.com.  86400 IN SOA classroom.example.com. root.classroom.example.com.  2015071700  3600  300  604800  60

MX

MX 资源记录将域名映射到接受该域的电子邮件的邮件交换(mail exchange)。该记录类型的数据是用于确定在多个 MX 记录之间选择邮件服务器(值越小,优先级越高),提供负载平衡和冗余的邮件服务器。

example.com.86400 IN MX 10  classroom.example.com.
example.com.86400 IN MX 10  mail.example.com.
example.com.86400 IN MX 100 mailbackup.example.com.

TXT

TXT 资源记录将名称映射到编码为可打印 ASCl 字符的任意文本。它们通常用于提供用于各种电子邮件身份验证方案(例如 SPF,DKIM 和 DMARC)的数据,以验证域所有权(例如,用于 Google 和 Facebook),以及用于其他目的。

lwn.net. 27272 IN TXT  "google-site-verification:sVlx-S z1es5DfNSUNXrqr3n9Y4F7tOr7HNVMKUGs"
lwn.net. 27272 IN TXT  "v=spf1 a:mail.lwn.net a:prod.lwn.net a:git.lwn.neta:ms.lwn.net-all"

SRV 特定服务主机

SRV 资源记录可帮助客户端找到域中支特定服务的主机。

ldap.tcp.example.com.86400 IN SRV 0 100 389 server0.example.com.

有特定的格式要求

含义:表明存在一个可以使用 TCP 传输协议(tcp)与 LDAP 连接的 LDAP 服务器(ldap),该主机属于域 example.com。LDAP 服务器是 server0.example.com,正在侦听端口 389,优先级为 0,权重为 100(如果客户端接收到多个 SRV 记录,则控制选择哪个服务器)。

主机和资源记录:

无论是客户端还是服务器,都具有以下 DNS 资源记录:

DNS zone 还具有以下资源记录:

DNS 安全

DNS 对于 Internet 的运行至关重要,基本的 DNS 协议非常容易受到欺骗和篡改攻击。

DNS 的原始设计没有提供用于缓存 DNS 服务器以验证来自权威服务器的响应的真实性的方法。攻击者可能伪造对 DNS 查找的响应,伪装成权威服务器,然后将流量重定向到恶意主机。缓存 DNS 服务器将坏数据存储在其缓存中,并在看起来有效的情况下将其提供给其他客户端,该技术通常称为缓存中毒。

为了解决这个问题,许多区域使用域名系统安全扩展(DNSSEC-Domain Name System Security Extensions)。每个使用 DNSSEC 的区域都经过数字签名,并向解析器提供包含这些签名的特殊资源记录。

2博文部分内容参考

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击网站首页每天更新
站 长 微 信: aiwo51889