图解DNS

DNS报文结构

在这里插入图片描述

  1. 基础结构部分

DNS报文基础部分为DNS首部。其中包含了事务ID,标志,问题计数,回答资源计数,回答计数,权威名称服务器计数和附加资源记录数。

  • 事务ID:报文标识,用来区分DNS应答报文是对哪个请求进行响应。

  • 标志:DNS报文中标志字段。

  • 问题计数:DNS查询请求了多少次。

  • 回答资源记录数:DNS响应了多少次。

  • 权威名称服务器计数: 权威名称服务器数目。

  • 附加资源记录数: 权威名称服务器对应IP地址的数目。

基础结构中的标志字段细分如下:
在这里插入图片描述

  • QR(Response):查询请求,值为0;响应为1。

  • Opcode:操作码。0表示标准查询;1表示反向查询;2服务器状态请求。

  • AA(Authoritative):授权应答,该字段在响应报文中有效。通过0,1区分是否为权威服务器。如果值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。

  • TC(Truncated):表示是否被截断。当值为1的时候时,说明响应超过了 512字节并已被截断,此时只返回前512个字节。

  • RD(Recursion Desired):期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为 0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。

  • RA(Recursion Available):可用递归。该字段只出现在响应报文中。当值为 1 时,表示服务器支持递归查询。

  • Z:保留字段,在所有的请求和应答报文中,它的值必须为 0。

  • rcode(Reply code):通过返回值判断相应的状态。

当值为0时,表示没有错误;
当值为1时,表示报文格式错误(Format error),服务器不能理解请求的报文;
当值为2时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;
当值为3时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;
当值为4时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;
当值为5时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。

  1. 问题部分

该部分是用来显示DNS查询请求的问题,其中包含正在进行的查询信息,包含查询名(被查询主机名字)、查询类型、查询类。

  • 查询名:一般为查询的域名,也可能是通过IP地址进行反向查询。

  • 查询类型:查询请求的资源类型。常见的如果为A类型,表示通过域名获取IP。具体如下图所示。

在这里插入图片描述

  • 查询类:地址类型,通常为互联网地址为1。
  1. 资源记录部分

资源记录部分包含回答问题区域,权威名称服务器区域字段、附加信息区域字段,格式如下:

在这里插入图片描述

  • 域名:所请求的域名。

  • 类型:与问题部分查询类型值一直。

  • 类:地址类型,和问题部分查询类值一样。

  • 生存时间:以秒为单位,表示资源记录的生命周期。

  • 资源数据长度:资源数据的长度。

  • 资源数据:按照查询要求返回的相关资源数据。

DNS解析详解

知道了DNS大概是什么,它的域名结构和报文结构,是时候看看到底怎么解析的以及如何保证域名的解析比较稳定和可靠。

  1. DNS核心系统
  • 根域名服务器(Root DNS Server),大哥,管理顶级域名服务并放回顶级域名服务器IP,比如"com",“cn”。

  • 顶级域名服务器(Top-level DNS Server),每个顶级域名服务器管理各自下属,比如com可以返回baidu.com域名服务器的IP。

  • 权威域名服务器(Authoritative DNS Server),管理当前域名下的IP地址,比如Tencent.com可以返回www.tencent.com的IP地址。

在这里插入图片描述
举个例子,假设我们访问"www.google.com":

  • 访问根域名服务器,这样我们就会知道"com"顶级域名的地址。

  • 访问"com"顶级域名服务器,可知道"google.com"域名服务器的地址。

  • 最后方位"google.com"域名服务器,就可知道"www.google.com"的IP地址。

嘿嘿,目前全世界13组根域名服务器还有上百台镜像,但是为了让它能力更强,处理任务效率更高,尽量减少域名解析的压力,通常会加一层"缓存",意思是如果访问过了,就缓存,下一次再访问就直接取出,也就是咱么经常配置的"8.8.8.8"等。

操作系统中同样也对DND解析做缓存,比如说曾访问过"www.google.com"。

其次,还有我们熟知的hosts文件,当在操作系统中没有命中则会在hosts中寻找。

这样依赖,相当于有了DNS服务器,操作系统的缓存和hosts文件,能就近(缓存)完成解析就好,不用每次都跑到很远的地方去解析,这样大大减轻的DNS服务器的压力。画了一个图,加深印象:

在这里插入图片描述
嗯?想必应该知道这个过程了,我们再举个例子,假设我们访问www.qq.com:

  • 客户端发送一个DNS请求,请问qq你的IP的什么啊,同时会在本地域名服务器(一般是网络服务是临近机房)打声招呼。

  • 本地收到请求以后,服务器会有个域名与IP的映射表。如果存在,则会告诉你,如果想访问qq,那么你就访问XX地址。不存在则会去问上级(根域服务器):"老铁,你能告诉我www.qq.com"的IP么。

  • 根DNS收到本地DNS请求后,发现是.com,“www.qq.com哟,这个由.com大哥管理,我马上给你它的顶级域名地址,你去问问它就好了”。

  • 这个时候,本地DNS跑去问顶级域名服务器,“老哥,能告诉下www.qq.com"的ip地址码”,这些顶级域名负责二级域名比如qq.com。

  • 顶级域名回复:“小本本记好,我给你www.qq.com区域的权威DNS服务器地址”,它会告诉你。

  • 本地DNS问权威DNS服务器:“兄弟,能不能告诉我www.qq.com对应IP是啥”。

  • 权威DNS服务器查询后将响应的IP地址告诉了本地DNS,本地服务器将IP地址返回给客户端,从而建立连接。

DNS进阶之新玩法

这里主要分享DNS(GSLB)的全局负载均衡。不是所有的互联网服务都适用于GSLB。

全局负载均衡采用的主要技术是智能DNS,它综合多种不同的策略(比如根据地理位置或者根据繁忙程度的权重)将客户访问的域名解析到不同的线路上。开启介绍之前,再一次复习下DNS中A记录和NS记录。

  • A记录
    A记录是名称解析的重要记录,它用于将特定的主机名映射到对应主机的IP地址上。你可以在DNS服务器中手动创建或通过DNS客户端动态更新来创建。

  • NS记录
    NS记录此记录指定负责此DNS区域的权威名称服务器。

  • 两者区别
    A记录直接给出目的IP,NS记录将DNS解析任务交给特定的服务器,NS记录中记录的IP即为该特定服务器的IP地址。

在全局负载均衡解决方案中,NS记录指向具有智能DNS解析功能的GSLB设备,通过GSLB设备进行A记录解析。为了保证高可用,如果为多地部署GSLB,则均配置记录。另外,GSLB设备还会对所在的后端服务器公网IP进行健康检查,其结果通过自有协议在不同的的GLSB设备间同步。解析的步骤如下图:

在这里插入图片描述

  • 用户给本地DNS服务器发送查询请求,如果本地有缓存直接返回给用户,否则通过递归查询获得名服务商商处的授权DNS服务器。

  • 授权服务器返回NS记录给本地DNS服务器。其中NS记录指向一个GSLB设备接口地址。

  • GSLB设备决策最优解析结果并返回A记录给本地DNS服务器。

  • 本地服务器将查询结果通过一条A记录返回给用户,并缓存这条记录。

DNS实战(wireshark)

使用工具为wireshark,访问www.baidu.com。

在这里插入图片描述
分析DNS请求帧,如下图所示:
在这里插入图片描述
从上图我们可知道请求计数为1,请求的域名为dss0.bdstatic.com。

在这里插入图片描述
从响应头可以知道,问题计数为1,正好对应请求帧1个问题。回应了2个问题。分别为:

在这里插入图片描述

从上图可以得出当前共有13个权威域名服务器,当然每一个的服务器地址不同,其中类型为NS代表权威域名服务器。

DNS劫持

到这里我们至少知道了DNS可以将域名映射为IP,并且知道了使用了多种缓存方案来减少DNS访问的压力。那么DNS一旦出错,很可能将域名解析到其他IP地址,这样我们也就无法正确访问网页。(PS:是不是有的时候发现开启不了网页但是qq等可以使用,很可能就是DNS搞鬼了哟)

在这里插入图片描述

利用DNS服务器进行DDOS攻击

什么是DDOS,我们应该知道SYN Flood,是一种DoS(拒绝服务攻击)与DDOS(分布式拒绝服务攻击的方式),利用大量的伪造TCP请求让被攻击方资源榨干。

在这里插入图片描述

我们假设攻击者已经知道了攻击者IP(如果需要了解这一部分内容,可以去搜索主动被动信息搜集/sodan等关键字),此时攻击者使用此地址作为解析命令的源地址,当DNS请求的时候返回恰巧也是被攻击者。此时如果足够多的请求(群肉鸡)就很容易使网络崩溃。

  • 缓存感染
    我们已经知道了在DNS查询过程中,会经过操作系统的缓存,hosts文件等,如果将数据放入有漏洞的服务器缓存中,当进行DNS请求的时候,就会将缓存信息返回给用户,这样用户就会莫名访问入侵者所设置的陷阱页面中。

  • DNS信息劫持
    看到这里的小伙伴,先思考一个问题,在TCP/IP协议栈中,三次握手中的序列号到底什么意思?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值