DNS解析过程中不得不知道的那些事

0x01 定义

DNS( Domain Name System)是“域名系统”的英文缩写,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

简单的讲就是讲域名解析为数字IP的过程。


0x02 域名结构

参考自: https://www.cnblogs.com/alummox/p/11173449.html

DNS系统采用分布式的解决方案,整个DNS架构是一共层次树状结构,这个树状结构成为DNS域名空间,如图:
在这里插入图片描述
树状结构最顶成成为根域,用"."表示,相应服务器成为根服务器,整个域名空间解析全都归根服务器所有,但根服务器无法承担庞大的负载,采用“委派”机制,在根域下设置一些顶级域,然后将不同的顶级域解析权分别委派给相应的顶级域服务器,如将com域的解析权委派给com域名服务器,以后但凡根服务器收到以com结尾的域名解析请求,都会转发给com域服务器,同理,为了减轻顶级域的压力,又下设若干二级域,二级域下又下设若干三级域或主机。
在这里插入图片描述

解释
根域位于域名空间最顶层,一般用一个 “.” 表示
顶级域一般代表一种类型的组织机构或国家地区,如 net、com、org、edu、gov、mil、cn、jp、hk
二级域用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理,如 .cn 顶级域名下面设置的二级域名:.com.cn、.net.cn、.edu.cn …
子域二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名
主机主机位于域名空间最下层,就是一台具体的计算机,如 www、mail、都是具体的计算机名字,可用www.sina.com.cn.、mail.sina.com.cn. 来表示,这种表示方式称为 FQDN (完全合格域名),也是这台主机在域名中的全名

0x03 DNS查询方式

1、从查询方式分类

递归查询:
客户端得到的结果只能是成功或失败

迭代查询:
DNS服务器如有客户机请求数据则返回正确地址;
DNS服务器没有请求数据则返回一个指针。

在这里插入图片描述

2、从查询内容:

正向查询:由域名查找IP地址
反向查询:由IP地址查找域名


0x04 常见的DNS资源记录

常见的DNS记录包括:A/AAAA、CNAME、MX、NS、TXT、SPF、SOA、PTR


1、A/AAAA记录

A记录:WEB服务器的IP指向指定

A:IPv4

示例:ns1.exmaple.com. IN A 198.51.100.2
解释:【domain】 IN A 【IP地址】

AAAA:IPv6

示例:ns1.exmaple.com. IN AAAA 8fe0::8f61:ac8:30cd:a16e
解释:【domain】 IN AAAA 【IP地址】

※IN的意思是「Internet」,不是IN/OUT的「IN」。

作用:主机名(或域名)对应的IP地址记录。通过A记录可以将不同的域名转到不同的IP上去。


2、CNAME记录

CNAME (Canonical Name)记录:(alias from one domain name to another)别名记录也被称为规范名字

示例:sub.example.com. IN CNAME hoge.example.com.
解释:【別名】 IN CNAME 【原名】

作用:给一个域名起多个别名。将一个域名作为A记录绑定服务器IP,同时设置几个不同的CNAME指向A记录,这样当服务器IP更改时,只需要更改A记录绑定的IP地址即可。

例如 jd.com,jd360.com,jingdong.com虽然是不同名字的域名,但是可以指向同一个原名jd.com。可以让企业的对外展示更加灵活。

举例:
jd360.com IN CNAME jd.com
jingdong.com IN CNAME jd.com
jd.com IN A 123.123.123.123 (这条是A记录例子)

3、MX记录

MX记录(Mail Exchange):邮件路由记录

在DNS上设定,用于将邮箱地址@符号后的域名指向邮件服务器。

示例:example.com. IN MX 10 mail.example.com.
解释:【domain】 IN MX 【优先度】 【邮件服务器】

作用:当发信侧服务器给受信侧发邮件时,首先会要求DNS服务器解析受信侧邮箱地址中@后面部分的域名对应的MX记录(DNS的写法可以理解成example.com 的A记录下面,有一行上面示例的MX记录,当然邮箱服务器也有对应的A记录)。这样,邮件就直接发到对应的MX记录的A记录里的IP了。

例子:给test@exmaple.com发邮件的话,
DNS会返回给发信侧198.51.100.3这个IP
===============================
exmaple.com. IN A 198.51.100.2
example.com. IN MX 10 mail.example.com.
mail.example.com. IN A 198.51.100.3

※如果是普通用户通过【exmaple.com】浏览主页,那么DNS继续返回 198.51.100.2 。这个其实也需要DNS判断请求服务器是邮件服务器还是普通的访问。


4、NS记录

***NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。***

指定域名解析服务器。
示例:example.com. IN NS ns1.example.com.
解释:【domain】 IN NS 【DNS服务器】

作用:指定该域名由哪个DNS服务器来进行解析。


5、TXT记录

TXT 记录,一般指为某个主机名或域名设置的说明

示例:ns1.exmaple.com. IN TXT "联系电话:XXXX"
解释:【domain】 IN TXT 【任意字符串】

作用:一般指某个主机名或域名的说明,或者联系方式,或者标注提醒等等。


6、SPF记录

***SPF记录是TXT记录的一个运用。后面的备注需要按照指定的格式才能有效。***

示例:exmaple.com. IN TXT "v=spf1 ip4:198.51.100.1 ~all"
解释:【domain】 IN TXT 【送信侧邮件服务器确认规则】

作用:MX:我是收件服务器,你找我时,请参考我设定到DNS服务器上的MX记录。
SPF:我是发信服务器,你接受邮件时,请参考我设定到DNS服务器上SPF规则。如果不是我发的信,你可以删掉或者接收。

SPF记录规则
(1)格式:

版本 空格 定义 空格 定义 (空格 定义的循环)
跟着例子看的话,比较好理解。
example.com. IN SPF "v=spf1 ip4:192.0.2.1 -all"

					v=spf1 是版本。只出现一次。
					ip4:192.0.2.1 第一个定义
					-all 第二个定义

(2)定义的格式

种类
| all | ip4 | ip6 | a | mx | ptr | exists | include|
前缀
"+" Pass(通过)
"-" Fail(拒绝)
"~" Soft Fail(软拒绝)
"?" Neutral(中立)

(3)定义测试

测试时,将从前往后依次测试每个定义。
如果一个定义命中了要查询的 IP 地址,则由相应定义的前缀决定怎么处理。默认的前缀为+。
如果测试完所有的 定义也没有命中,则结果为 Neutral。
结果及处理方法一览
结果说明服务器处理办法
Pass发件IP是合法的接受来信
Fail发件 IP 是非法的退信
Soft Fail发件 IP 非法,但是不采取强硬措施接受来信,但是做标记
NeutralSPF 记录中没有关于发件 IP 是否合法的信息接受来信
None服务器没有设定 SPF 记录接受来信
PermError发生了严重错误(例如 SPF 记录语法错误)没有规定
TempError发生了临时错误(例如 DNS 查询失败)接受或拒绝

7、SOA记录

SOA名叫起始授权机构记录,SOA记录说明了在众多NS记录里那一台才是主要的服务器。NS记录说明了有多台服务器在进行解析,但哪一个才是主服务器呢,NS并没有说明,这个就要看SOA记录了。
在任何 DNS 记录文件(Domain Name System (DNS) Zone file)中, 都是以 SOA(Start of Authority)记录开始。SOA 资源记录表明此 DNS 名称服务器是为该 DNS 域中的数据的信息的最佳来源。SOA 记录与 NS 记录的区别:简单讲,NS 记录表示域名服务器记录,用来指定该域名由哪个 DNS 服务器来进行解析;SOA 记录设置一些数据版本和更新以及过期时间的信息。

示例:
@   IN  SOA     nameserver.place.dom.  postmaster.place.dom. ( 
1            ; serial number 
3600         ; refresh   [1h] 
600          ; retry     [10m] 
86400        ; expire    [1d] 
3600 )       ; min TTL   [1h]
================================================================

serial number(序列号):是域名记录的版本,每更改一次域名的任何DNS记录,版本号就会自动加一,这时secondary dns就会知道DNS记录发生更改,以便重新同步。

refresh(刷新时间):告诉secondary dns多久应该查询primary dns,看看DNS记录是否有更新。每次查询时,secondary dns会向primary dns请求SOA记录。如果记录中的serial number跟secondary dns已有的序列号不一样,则会向primary dns请求传送域名的当前的DNS记录。

retry(重试时间):如果想primary dns请求传送域名当前的DNS记录失败后,间隔重试时间后再次重试请求。一般来说,retry小于refresh。

expire(过期时间):在过期时间之前,secondary dns会继续请求传送DNS记录,并且在此时间里,secondary dns会根据已有的记录应答相关的DNS查询。如果到了过期时间后,secondary dns会停止应答该域名的DNS查询。

min TTL(最小TTL):域名所有记录的最小生存时间值。当用户DNS查询到记录后,将存在缓存中,直到至少过了这个时间才将缓存刷新重新查询。

有的DNS服务器还会有Negative caching TTL,就是当用户DNS查询到无此域名记录(NXDOMAIN)时,将把这个“没有此域名的记录”的声明保存在缓存中的时间。


8、PTR记录

PTR (Pointer Record),指针记录,是电子邮件系统中的一种数据类型,被互联网标准文件RFC1035所定义。与其相对应的是A记录、地址记录。二者组成邮件交换记录

A记录解析名字到地址,而PTR记录解析地址到名字。

用途:PTR记录被用于电子邮件发送过程中的反向地址解析。

反向域名解析系统(Reverse DNS的功能确保适当的邮件交换记录是生效的。反向域名解析与通常的正向域名解析相反,提供IP地址到域名的对应。IP反向解析主要应用到邮件服务器中来阻拦垃圾邮件,特别是在国外。多数垃圾邮件发送者使用动态分配或者没有注册域名的IP地址来发送垃圾邮件,以逃避追踪,使用了域名反向解析后,就可以大大降低垃圾邮件的数量。

比如你用 xxx@name.com 这个邮箱给我的邮箱 123@163.com 发了一封信。163邮件服务器接到这封信会查看这封信的信头文件,这封信的信头文件会显示这封信是由哪个IP地址发出来的。然后根据这个IP地址进行反向解析,如果反向解析到这个IP所对应的域名是name.com 那么就接受这封邮件,如果反向解析发现这个IP没有对应到name.com,那么就拒绝这封邮件。

由于在域名系统中,一个IP地址可以对应多个域名,因此从IP出发去找域名,理论上应该遍历整个域名树,但这在Internet上是不现实的。为了完成逆向域名解析,系统提供一个特别域,该特别域称为逆向解析域in-addr.arpa。这样欲解析的IP地址就会被表达成一种像域名一样的可显示串形式,后缀以逆向解析域域名"in-addr.arpa"结尾。

例如一个IP地址:222.211.233.244,其逆向域名表达方式为:244.233.221.222.in-addr.arpa

两种表达方式中IP地址部分顺序恰好相反,因为域名结构是自底向上(从子域到域),而IP地址结构是自顶向下(从网络到主机)的实质上逆向域名解析是将IP地址表达成一个域名,以地址做为索引的域名空间,这样逆向解析的很大部分可以纳入正向解析中

0x05 DNS资源记录(Resource Record)

参考自:https://www.cnblogs.com/sddai/p/5703394.html

DNS server内的每一个网域名称都有自己的档案,这个档案一般会称为区域档案(zone file),例如之前所提到的”named.ca”或”named.local” 档案…等等。 区域档案是由多个记录组成的,每一个记录称为资源记录(Resource Record,简称RR)。 当在设定DNS名称解析、反向解析及其他的管理目的时,您需要使用不同类型的RR,底下将介绍常用的RR类型及表示法。

代码号码定义的 RFC描述功能
A1RFC 1035IP 地址记录传回一个 32 比特的 IPv4 地址,最常用于映射主机名称到 IP地址,但也用于DNSBL(RFC 1101)等。
AAAA28RFC 3596IPv6 IP 地址记录传回一个 128 比特的 IPv6 地址,最常用于映射主机名称到 IP 地址。
AFSDB18RFC 1183AFS文件系统(Andrew File System)数据库核心的位置,于域名以外的 AFS 客户端常用来联系 AFS 核心。这个记录的子类型是被过时的的 DCE/DFS(DCE Distributed File System)所使用。
APL42RFC 3123地址前缀列表指定地址列表的范围,例如:CIDR 格式为各个类型的地址(试验性)。
CERT37RFC 4398证书记录存储 PKIX、SPKI、PGP等。
CNAME5RFC 1035规范名称记录一个主机名字的别名:域名系统将会继续尝试查找新的名字。
DHCID49RFC 4701DHCP(动态主机设置协议)识别码用于将 FQDN 选项结合至 DHCP。
DLV32769RFC 4431DNSSEC(域名系统安全扩展)来源验证记录为不在DNS委托者内发布DNSSEC的信任锚点,与 DS 记录使用相同的格式,RFC 5074 介绍了如何使用这些记录。
DNAME39RFC 2672代表名称DNAME 会为名称和其子名称产生别名,与 CNAME 不同,在其标签别名不会重复。但与 CNAME 记录相同的是,DNS将会继续尝试查找新的名字。
DNSKEY48RFC 4034DNS 关键记录于DNSSEC内使用的关键记录,与 KEY 使用相同格式。
DS43RFC 4034委托签发者此记录用于鉴定DNSSEC已授权区域的签名密钥。
HIP55RFC 5205主机鉴定协议将端点标识符及IP 地址定位的分开的方法。
IPSECKEY45RFC 4025IPSEC 密钥与 IPSEC 同时使用的密钥记录。
KEY25 RFC 2535[1]RFC 2930[2]关键记录只用于 SIG(0)(RFC 2931)及 TKEY(RFC 2930)。RFC 3455 否定其作为应用程序键及限制DNSSEC的使用。[4]RFC 3755 指定了 DNSKEY 作为DNSSEC的代替。
LOC记录(LOC record)29RFC 1876位置记录将一个域名指定地理位置。
MX记录(MX record)15RFC 1035电邮交互记录引导域名到该域名的邮件传输代理(MTA, Message Transfer Agents)列表。
NAPTR记录(NAPTR record)35RFC 3403命名管理指针允许基于正则表达式的域名重写使其能够作为 URI、进一步域名查找等。
NS2RFC 1035名称服务器记录委托DNS区域(DNS zone)使用已提供的权威域名服务器。
NSEC47RFC 4034下一代安全记录DNSSEC 的一部分 — 用来验证一个未存在的服务器,使用与 NXT(已过时)记录的格式。
NSEC350RFC 5155NSEC 记录第三版用作允许未经允许的区域行走以证明名称不存在性的 DNSSEC 扩展。
NSEC3PARAM51RFC 5155NSEC3 参数与 NSEC3 同时使用的参数记录。
PTR12RFC 1035指针记录引导至一个规范名称(Canonical Name)。与 CNAME 记录不同,DNS“不会”进行进程,只会传回名称。最常用来运行反向 DNS 查找,其他用途包括引作 DNS-SD。
RRSIG46RFC 4034DNSSEC 证书DNSSEC 安全记录集证书,与 SIG 记录使用相同的格式。
RP17RFC 1183负责人有关域名负责人的信息,电邮地址的 @ 通常写为 a。
SIG24RFC 2535证书SIG(0)(RFC 2931)及 TKEY(RFC 2930)使用的证书。[5]RFC 3755 designated RRSIG as the replacement for SIG for use within DNSSEC.
SOA6RFC 1035权威记录的起始指定有关DNS区域的权威性信息,包含主要名称服务器、域名管理员的电邮地址、域名的流水式编号、和几个有关刷新区域的定时器。
SPF99RFC 4408SPF 记录作为 SPF 协议的一部分,优先作为先前在 TXT 存储 SPF 数据的临时做法,使用与先前在 TXT 存储的格式。
SRV记录(SRV record)33RFC 2782服务定位器广义为服务定位记录,被新式协议使用而避免产生特定协议的记录,例如:MX 记录。
SSHFP44RFC 4255SSH 公共密钥指纹DNS 系统用来发布 SSH 公共密钥指纹的资源记录,以用作辅助验证服务器的真实性。
TA32768DNSSEC 信任当局DNSSEC 一部分无签订 DNS 根目录的部署提案,,使用与 DS 记录相同的格式[6][7]。
TKEY记录(TKEY record)249RFC 2930秘密密钥记录为TSIG提供密钥材料的其中一类方法,that is 在公共密钥下加密的 accompanying KEY RR。
TSIG250RFC 2845交易证书用以认证动态更新(Dynamic DNS)是来自合法的客户端,或与 DNSSEC 一样是验证回应是否来自合法的递归名称服务器。
TXT16RFC 1035文本记录最初是为任意可读的文本 DNS 记录。自1990年起,些记录更经常地带有机读数据,以 RFC 1464 指定:opportunistic encryption、Sender Policy Framework(虽然这个临时使用的 TXT 记录在 SPF 记录推出后不被推荐)、DomainKeys、DNS-SD等。

其他类型及伪资源记录
其他类型的资源记录简单地提供一些类型的消息(如:HINFO 记录提供电脑或操作系统的类型),或传回实验中之功能的数据。“type”字段也使用于其他协议作各种操作。

代码号码定义的 RFC描述功能
*255RFC 1035所有缓存的记录传回所有服务器已知类型的记录。如果服务器未有任何关于名称的记录,该请求将被转发。而传回的记录未必完全完成,例如:当一个名称有 A 及 MX 类型的记录时,但服务器已缓存了 A 记录,就只有 A 记录会被传回。
AXFR252RFC 1035全域转移由主域名服务器转移整个区域文件至二级域名服务器。
IXFR251RFC 1995增量区域转移请求只有与先前流水式编号不同的特定区域的区域转移。此请求有机会被拒绝,如果权威服务器由于配置或缺乏必要的数据而无法履行请求,一个完整的(AXFR)会被发送以作回应。
OPT41RFC 2671选项这是一个“伪 DNS记录类型”以支持 EDNS。

0x06 DNS服务器类型

因特网上的域名服务器用来存储域名的分布式数据库,并为DNS客户提供域名解析。它们也是按照域名层次来安排的,每一个域名服务器都只对域名体系中的一部分进行管辖。根据它们的用途,域名服务器有以下几种不同类型。

(1)主域名服务器:负责维护这个区域的所有域名信息,是特定的所有信息的权威信息源。也是说,主域名服务器内所存储的是该区域的正本数据,系统管理员可以对它进行修改。从DNS域名空间可以看出,根域是最大的,但因为他的工作方式是委派,委派给顶级域进行解析,所以其实主域名服务器就是顶级域服务器
(2)辅助域名服务器:当主域名服务器出现故障、关闭或负载过重时,辅助域名服务器作为备份服务提供域名解析服务。辅助域名服务器中的区域文件内的数据是从另外一台域名服务器复制过来的,并不是直接输入的,也是说这个区域文件只是一份副本,这里的数据是无法修改的
(3)缓存域名服务器:可运行域名服务器软件但没有域名数据库。它从某个远程服务器取得每次域名服务器查询的回答,一旦获取一个答案,将它放在高速缓存中,以后查询相同的信息时用它予以回答。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息
(4)转发域名服务器负责所有非本地域名的本地查询。转发域名服务器接到查询请求时,在其缓存中查找,如找不到把请求依次转发到指定的域名服务器,直到查询到结果为止,否则返回无法映射的结果。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值