DNS 原理及大规模高性能监测

专注IP定位
• 阅读 458

一、什么是DNS

DNS是Domain Name System的缩写,也就是“域名系统”。DNS是互联网中的一项核心服务,是用于实现域名和IP地址相互映射的一个分布式数据库系统。

域名的出现解决了互联网发展中两个大问题:

01

IP地址是互联网中所有主机的统一寻址方式,使用IP地址能够直接访问互联网上主机数据、资源,但由于IP地址只是一串数据,记忆十分困难。域名好理解方便记忆,方便上网及联网。

02

域名具有唯一性,在资源更改IP地址时,只需要进行新IP地址与恒定域名的转换,即可实现将资源移动到网络地址拓扑中的不同物理位置,方便互联网服务提供者进行维护更新而对用户无感知。

二、域名和DNS服务器结构

1.域名结构

这里以域名www.abc.example.com.作为示例,其实完整的域名,最后面都是有一个“.”的,通常都忽略掉了。一般有两种定义:

官方定义:

DNS 原理及大规模高性能监测

云服务商定义:

DNS 原理及大规模高性能监测

但不管域名如何分级,从后往前,从高层往下层都呈一个树状结构,最顶端就是常被忽略的"." ,代表根服务器。根的下一层就是由我们所熟知的.com、.net、.cn等通用域和.cn、.uk等国家域组成,称为顶级域 。然后我们在网上注册的域名基本都是二级域名 , 比 如baidu.com、ipplus360.com等等二级域名,它们基本上是归企业和运维人员管理。接下来便是三级域名,也就是www.baidu.com,www.ipplus360.com,就是我们平时常见的域名了。

把域名结构画成一个树型图来解释: DNS 原理及大规模高性能监测

2.DNS服务器结构

上面我们介绍了域名的结构是一个层级树形结构,那么对应的DNS服务器也是一个层级的树形结构,层级分类及功能如下:

根域名:英文:Root nameserver。根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。根域名服务器知道所有顶级域名服务器的域名和 IP地址。如果本地域名服务器无法对域名进行解析,就首先求助于根域名服务器。全球一共有13个根域名服务器名称,为 [a~m].root-servers.net

顶级域名服务器:英文:Tld nameserver。负责管理在该顶级域名服务器下面注册的二级域名,例如“www.example.com”,.com则是顶级域名服务器,在向它查询时,可以返回二级域名“example.com”所在的权威域名服务器地址。所有顶级域名服务器的名称和IP地址是在根服务器注册的,也就是说,根域名服务器知道所有的顶级域名服务器的名称和IP地址。

权威域名服务器:英文:authoritative nameserver。在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系,例如云解析DNS。

本地域名服务器:英文:DNS resolver或Local DNS。本地域名服务器是响应来自客户端的递归请求,并最终跟踪直到获取到解析结果的DNS服务器。例如用户本机自动分配的DNS、运营商ISP分配的DNS、谷歌/114公共DNS等。

DNS服务器的层级树状结构如下图: DNS 原理及大规模高性能监测

三、DNS解析

1.解析流程

以解析www.ipplus360.com这个域名为例,请求流程图如下:

具体步骤解释如下:

  1. 在浏览器中输入www.ipplus360.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

  2. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存, 如果有,直接返回,完成域名解析。

  3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

  4. 如果要查询的域名,不由本地DNS服务器区域解析,但该DNS服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

  5. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(没有设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。

  6. 本地DNS服务器收到IP信息后,将会联系负责 .com域的这台服务器。这台负责 .com域的服务器收到请求后,如果自己无法解析,它就会找一个管理 .com域的下一级DNS服务器地址(ipplus360.com)给本地DNS服务器。

  7. 当本地DNS服务器收到这个地址后,就会找ipplus360.com域服务器,重复上面的动作进行查询,直至找到www.ipplus360.com主机。

  8. 如果用的是转发模式(设置转发器),此DNS服务器就会把请求转发至上一级ISP DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转发请求转至上上级,以此循环。不管是本地DNS服务器用的是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

2.解析记录

以阿里云的域名解析为例,一条解析记录,主要有如下几个信息: DNS 原理及大规模高性能监测 ● 主机记录:也就是自定义的三级及以下域名,如www.ipplus360.com那么主机记录就是www ● 记录类型:就是这条记录的类型,一般指向IPV4地址,类型则为A记录,其他类型,下面细说。 ● 解析线路:这个一般由域名服务商提供,可以根据线路解析到不同的IP,比如,国内解析到广州的服务器,国外解析到香港的服务器。类似这样,不同的服务和提供商所支持的线路也不相同。 ● 记录值:也就是根据解析类型,填上对应的结果,比如A记录是解析到IPv4地址,则填入IPv4的IP地址。 ● TTL:解析记录在递归DNS服务器上缓存的保存时间,也是一个域名从修改到更新到全网的最长所需时间。因为缓存失效后,会重新从权威服务器获取最新记录。DNS记录,有很多不同类型的记录,主要有如下几种,下面列举说一下 ● A:将域名指向一个IPV4地址 ● CNAME:将域名指向另一个域名 ● AAAA:将域名指向一个IPV6地址 ● NS:将子域名指定其他DNS服务器解析 ● MX:将域名指向邮件服务器地址 ● SRV:记录提供特定的服务的服务器 ● TXT:文本记录 ● CAA:CA证书颁发机构授权校验 ● PTR:用于DNS反向记录查找DNS作为域名解析的基础,使用范围十分广泛,因此我们要对DNS做大量的监测分析,以此来保证DNS的正常响应及不被污染。

四、大规模高性能监测

在进行DNS安全监控探测里,经常需要对DNS做大量的监测分析,最重要的一部分就是需要快速获取大量探测结果。虽然有许多工具可以主动查询DNS,但很少提供DNS操作详细信息(例如,来自递归过程的每个步骤的响应)。我们利用golang的并发能力开发了一套DNS大规模高性能监测工具。

1.架构

主要由以下几部分组成:

(1) 一个DNS库。实现一个缓存递归解析器库,提供了递归查找、缓存、验证、交换数据包的公开转录本以及简单的DNS问题构建和答案解析。它还支持使用外部递归解析器和各种性能优化(例如,UDP套接字重用)

(2) 可扩展框架。核心框架负责促进命令行配置、生成查找例程、将控制委托给模块、编码、解码和将数据进出例程、与上游解析器进行负载平衡、聚合运行时统计数据,以及确保一致的输出。该框架重量较轻,没有大多数特定的dns的逻辑。

(3)各种DNS记录解析模块。模块负责提供特定的DNS查询的逻辑,包括特定于DNS查询或记录的逻辑、预期的查询响应、附加的命令行标志、全局和每个例程的初始化。通过实现一个Go接口来添加模块,该接口定义了一个DoLookup函数,它接受两个参数:一个要查询的名称和一个名称服务器。DoLookup返回一个带有JSON导出标记的接口(例如,一个带有标记的结构,提示我们的框架在将结构转换为JSON时如何标记字段)。通过轻量级例程协调并发,DoLookup函数可以很简单(例如,打开UDP套接字,创建和发送包,等待响应或套接字超时,关闭套接字,并从响应包中返回任何相关数据)。

主要实现了以下功能:

(1)内部递归。实现了一个DNS递归解析器,以便查看详细的解析过程并监测其解析状态是否有异常。

(2)高性能。利用GO的轻量级并发协程,可以快速监测上百万或上千万的域名状态,并及时返回探测的结果数据。

(3)安全。自动内存分配,垃圾回收,安全边界检查等特点,可以安全快速的实现一个监测模块。

(4)可扩展。可以动态添加扩展监测的记录类型,以便满足不同的业务需要,并支持模块化接口方便扩展接入。

2.高性能性能优化设计

在进行大批量DNS监测时,主要做了以下优化:

(1)并发处理。进行DNS查询所花费的大部分时钟时间都是花在等待响应上,而不是构造或解析DNS数据包。因此,有效地并行化足够多的并发查询对于实现我们所需的性能至关重要。利用GO的天生并发处理能力,使用轻量级例程有效地管理数千个并发查询。Go是内存安全和垃圾收集的,这有助于提供一个安全但可扩展的平台,同时保持高性能。

(2 )UDP包复用。为每次查找创建一个套接字都是非常昂贵的,因为每个套接字在被删除和重新创建之前只被用来发送和接收两个数据包。如果在每个轻量级例程中建立并维护一个长期的原始UDP套接字,作为程序执行的生命周期。原始UDP套接字绑定到静态源端口,并可用于将UDP数据包发送到任意目标IP/端口。这消除了每个连接套接字的开销,而不需要为每个请求手动构建IP和以太网报头。为了支持比操作系统临时端口范围更多的线程,可以支持绑定到多个IP地址。

(3)选择性缓存。缓存可以避免在迭代解析中重复初始查询(例如,重复查询.com名称服务器的根解析器仍然至关重要),但是缓存查询的名称的结果会导致不必要的抖动。因此,选择地只缓存NS和胶水记录,以帮助未来的递归,但不缓存被直接查询的叶名称的任何结果

(4)增加垃圾收集频率。减少垃圾收集的频率通常与提高性能有关。然而,对于该系统来说,情况则恰恰相反。将垃圾收集发生的频率增加四倍,会增加吞吐量,这可能是因为短的收集可以分散在其他请求处理之间,并且不会在等待垃圾收集完成时导致连接超时。

3.探测结果示例

这里利用该系统以监测 ipplus360.com 这个域名为例,对某次探测结果并分析展示如下: DNS 原理及大规模高性能监测

通过此工具,我们监测到一些DNS服务器对于域名没有响应,也就是没有解析成功;而在有正常响应的DNS服务器里,我们监测到有些响应时延较高,甚至有些DNS服务器的解析的结果与其他DNS服务器不一致,导致DNS污染等情况。

从监测结果可以看到,该工具及设计思想在我们的DNS监测和安全研究方面具有实际的应用价值和较高的性能体现。

点赞
收藏
评论区
推荐文章
3A网络 3A网络
2年前
DNS 系列(三):如何免受 DNS 欺骗的侵害
互联网上每一台设备都会有一个IP地址,我们在访问网站或发送信息时,其实都是通过IP地址达成准确请求的。但是这个IP地址由很长一串数字组成,记忆起来相当困难,所以我们创造了更实用的域名来代替IP地址。而如何将域名和IP地址联系起来,就是域名系统(DNS)发挥作用的地方。它由各种名称服务器(即DNS服务器)组成,负责域名解析,帮助客户端建
3A网络 3A网络
2年前
DNS 系列(二):DNS 记录及工作方式,你了解吗?
在上一篇《DNS系列(一):为什么更新了DNS记录不生效?》中,我们主要讲解了DNS和DNS传播,知道了网络通信主要通过IP地址来进行,而域名系统(DNS)则是保证用户在浏览器中输入域名之后,可以访问到对应的网站服务器。那这个过程到底是如何进行的呢?DNS记录DNS记录是位于权威DNS服务器中的指令,提供域和主机名相关的详细信息,
芝士年糕 芝士年糕
2年前
DNS域名详细解析过程
最近需要搭建一个网站,需要域名解析和备案了,租了一个很便宜的服务器,而且服务超级好,有兴趣私聊我。什么是DNS域名解析我们首先要了解域名和IP地址的区别。IP地址是互联网上计算机唯一的逻辑地址,通过IP地址实现不同计算机之间的相互通信,每台联网计算机都需要通过IP地址来互相联系和分别。但由于IP地址是由一串容易混淆的数字串构成,人们
鱼蛮子9527 鱼蛮子9527
2年前
DNS
DNS(DomainNameSystem),主要作用是将域名转成IP,本文主要讲解了DNS的一些基础知识,以及DNS转换域名的过程。DNS是什么绝大多数网络通信都是基于TCP/IP协议,而TCP/IP协议的基础是IP,所以网络中的计算机进行通信都是基于IP而不是我们在浏览器中输入的域名。DNS全程是DomainName
Stella981 Stella981
3年前
Linux查看DNS服务器及设置DNS服务器
DNS(DomainNameSystem,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。一台主机的dns服务器的好坏会直接影响我们上网的速度以及网站的访问,今天我们一起来看一下如何为Linux系统配置好用的公共DNS.1\.查看服务器的DNS方法一,查看
Wesley13 Wesley13
3年前
Ubuntu Linux 学习篇 配置DNS服务器
BIND9DNS(DomainNameServer,域名服务器)是进行域名(domainname)和与之相对应的IP地址(IPaddress)转换的服务器。DNS中保存了一张域名(domainname)和与之相对应的IP地址(IPaddress)的表,以解析消息的域名。域名是Internet上某一台计算机或计算机组的名称,用于在数据传输
Stella981 Stella981
3年前
Linux下DNS简单部署(主从域名服务器)
一、DNS简介DNS(DomainNameSystem),域名系统,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。DNS服务器的作用就是
Wesley13 Wesley13
3年前
CDN与智能DNS原理和应用
1.cdn概念,DNS概念CDN:CententDeliveryNetwork(内容分发网络)使用户可以就近取得所需内容,提高用户访问网站相应速度CDN更智能的镜像缓存流量导流;DNS:DomainNameSystem域名系统域名和ip地址相互映射的一个分布式数据库,不用去记住被机器读取的ip地址CDN是内容分发网络,
融云IM即时通讯 融云IM即时通讯
10个月前
内网部署,移动端如何使用,且保障电脑端安全
"A.在企业内网自建DNS服务,然后使用域名代替公网IP重新配置;B.在互联网区域,使用互联网DNS服务将域名解析到公网IP;C.在内网区域,使用自建DNS服务将域名解析到服务器内网IP,这样内网电脑不能联网也能正常使用,互联网手机也能正常收发消息;D.如
芝士年糕 芝士年糕
2年前
更改配置本地host地址
Hosts是一个没有扩展名的系统文件,主要作用是定义IP地址和主机名的映射关系,就是将一些常用的域名网址与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,如果找到,系统会立即打开对应网页,若没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析,若发现是被屏蔽