DNS的各种进阶新玩法

news2024/9/20 1:06:49

你们好,我的网工朋友,今天和你聊聊DNS。

01 什么是DNS?

mac地址诞生,可是太不容易记忆了,出现了简化了IP形式,它被直接暴露给外网不说,还让人类还是觉得比较麻烦,干脆用几个字母算了,也就是域名了。

域名不仅仅能够代替IP,还有很多其他的用途比如在web应用中用来标识虚拟主机。

02 DNS报文结构

说了这么多,协议头部,到底有哪些字段,其含义是什么都还不知道,那怎么去分析报文,下面我们一起再看看报文什么样子:

01 基础结构部分

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

  • 事务ID:报文标识,用来区分DNS应答报文是对哪个请求进行响应
  • 标志:DNS报文中标志字段
  • 问题计数:DNS查询请求了多少次
  • 回答资源记录数:DNS响应了多少次
  • 权威名称服务器计数: 权威名称服务器数目
  • 附加资源记录数: 权威名称服务器对应IP地址的数目

基础结构中的标志字段细分如下:

02 标志字段

  • 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),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。

03 问题部分

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

  • 查询名:一般为查询的域名,也可能是通过IP地址进行反向查询
  • 查询类型:查询请求的资源类型。常见的如果为A类型,表示通过域名获取IP。具体如下图所示

  • 查询类:地址类型,通常为互联网地址为1

04 资源记录部分

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

  • 域名:所请求的域名
  • 类型:与问题部分查询类型值一直
  • 类:地址类型,和问题部分查询类值一样
  • 生存时间:以秒为单位,表示资源记录的生命周期
  • 资源数据长度:资源数据的长度
  • 资源数据:按照查询要求返回的相关资源数据

03 DNS解析详解

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

  • 根域名服务器(Root DNS Server),大哥,管理顶级域名服务并放回顶级域名服务器IP,比如"com","cn"
  • 顶级域名服务器(Top-level DNS Server),每个顶级域名服务器管理各自下属,比如com可以返回http://baidu.com域名服务器的IP
  • 权威域名服务器(Authoritative DNS Server),管理当前域名下的IP地址,比如http://Tencent.com可以返回http://www.tencent.com的IP地址

举个例子,假设我们访问"http://www.google.com"

  • 访问根域名服务器,这样我们就会知道"com"顶级域名的地址
  • 访问"com"顶级域名服务器,可知道"http://google.com"域名服务器的地址
  • 最后方位"http://google.com"域名服务器,就可知道"http://www.google.com"的IP地址

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

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

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

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

画了一个图,加深印象。

嗯?想必应该知道这个过程了,我们再举个例子,假设我们访问http://www.qq.com

  • 客户端发送一个DNS请求,请问qq你的IP的什么啊,同时会在本地域名服务器(一般是网络服务是临近机房)打声招呼
  • 本地收到请求以后,服务器会有个域名与IP的映射表。如果存在,则会告诉你,如果想访问qq,那么你就访问XX地址。不存在则会去问上级(根域服务器):"老铁,你能告诉我http://www.qq.com"的IP么
  • 根DNS收到本地DNS请求后,发现是.com,"http://www.qq.com哟,这个由.com大哥管理,我马上给你它的顶级域名地址,你去问问它就好了"
  • 这个时候,本地DNS跑去问顶级域名服务器,"老哥,能告诉下http://www.qq.com"的ip地址码",这些顶级域名负责二级域名比如http://qq.com
  • 顶级域名回复:"小本本记好,我给你http://www.qq.com区域的权威DNS服务器地址",它会告诉你
  • 本地DNS问权威DNS服务器:"兄弟,能不能告诉我http://www.qq.com对应IP是啥"
  • 权威DNS服务器查询后将响应的IP地址告诉了本地DNS,本地服务器将IP地址返回给客户端,从而建立连接。

04 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服务器发送查询请求,如果本地有缓存直接返回给用户,否则通过递归查询获得名服务商商处的授权DNS服务器
  • 授权服务器返回NS记录给本地DNS服务器。其中NS记录指向一个GSLB设备接口地址
  • GSLB设备决策最优解析结果并返回A记录给本地DNS服务器。
  • 本地服务器将查询结果通过一条A记录返回给用户,并缓存这条记录。

05 DNS实战(wireshark)

使用工具为wireshark,访问http://www.baidu.com:

分析DNS请求帧,如下图所示:

从上图我们可知道请求计数为1,请求的域名为http://dss0.bdstatic.com

分析DNS响应帧:

从响应头可以知道,问题计数为1,正好对应请求帧1个问题。回应了2个问题。分别为:

answers:

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

06 使用IP地址访问浏览器的原理

  • 打开chrome浏览器,输入IP
  • 三次握手建立连接
  • 建立连接以后HTTP开始工作,通过TCP发送一个"GET / HTTP/1.1",服务端给予回应
  • 解析请求,根据HTTP协议规定解析,看看那浏览器想干啥
  • 哦,原来你想获取我的视频呀,那我读出来拼接为HTTP格式给你,回复"HTTP/1.1 200 OK"
  • 作为浏览器回复一个TCP的ACK表示确认
  • 浏览器收到响应数据后,需要使用相应的引擎进行渲染,将更好的页面展现给用户

07 使用域名访问浏览器的原理

这一次从浏览器角度回答,相信大家已经了解一部分浏览器知识了,我们先看看URL到网页展示的完整流程是什么样子:

  • 用户输入

在地址栏输入相应的内容,如果为关键字,如果直接输入搜索内容,浏览器默认引擎会合成为URL,如果符合URL规则,加上协议合成完整URL,回车就会出现加载页面,也就是等待提交文档的阶段

  • URL请求过程

此时浏览器进程将URL通过进程间通信的方式发送给网络进程,开启真正的请求流程。注意了,网络进程这里也有缓存,它会现在本地缓存查看是否缓存了资源,如果有则直接返回。如果没有,那就需要DNS解析获取服务器IP地址(HTTPS还少不了TLS连接)。

此时使用IP和服务器建立三次握手。连接成功开始构造请求头等信息。

服务器收到请求信,根据请求信息生成响应信息给网络进程。然后开始解析响应头内容。

如果返回值为302/301,说明需要跳转到其他URL,如果为200则继续处理该请求。

URL的请求数据类型多种,对于浏览器而言是怎么区分的呢这个时候就必须强调下Content-type了,因为他明确服务器返回响应体数据属于什么类型,此时的浏览器也会根据Content-type对决定响应体是什么内容。

  • 进入渲染阶段

通常情况下,当前多进程架构的浏览器对于每一个页面都有一个渲染进程,前提是如果从X页面打开Y页面,x和y属于同一个"站点"(使用相同的协议和根域名),此时y页面会复用x页面,否则y页面会单独对应一个渲染进程。

  • 提交阶段

渲染进程收到浏览器进程的"提交文档"后,通过和网络进程使用"管道"的方式通信。一旦这些文档数据传输完成,渲染进程就会告诉浏览器进程"确认提交",此时浏览器进程收到"确认提交"就会更新地址栏的URL,历史状态等,这就是为什么当我们在地址栏输入地址信息后需要加载一小会儿到另一个页面。

  • 渲染阶段

文档提交以后,此时就需要使用js,css等美化页面,并通过构建DOM树等让用户有更好的使用体验。

08 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协议栈中,三次握手中的序列号到底什么意思?

其功能之一就是避免伪装数据的插入。

我们知道,如果我们知道DNS报文中的ID,我们就可以知道这个ID请球员位置。作为攻击者,会通过旁路监听客户端和服务端的会话,拿到DNS中的ID,此时相当于在DNS服务器之前拿到ID,伪装DNS服务器回复客户端,引导客户端访问恶意的网站。

电脑小故障:

比如qq可用但是浏览器就是不好使:

  • 输入:http://192.168.1.1(可能是http://192.168.0.1),输入路由器用户名密码
  • DHCP服务器-----DHCP服务-,修改DNS为更加可靠的DNS服务器IP.保存即可

方法2:修改路由器password

  • 地址栏输入"http://192.168.1.1",登录并进入路由器页面
  • 系统工具--修改登录口令页面

保护域名/尽量避免攻击

  • 备份策略。一般至少会使用两个域名,一旦其中一个被攻击,用户可以通过另一个访问
  • 随时留意域名注册中的电子邮件
  • 保存好所有权信息(比如账单记录,注册信息等)
  • 随时关注安全补丁

09 本文涉及高频面试题(自行测试)

  • 讲讲DNS原理
  • 进程与线程
  • 递归查询和递归查询区别
  • DNS解析流程
  • chrome架构演变
  • ELF是什么,数据段,代码段,全局变量等分别存放在哪儿
  • DNS劫持
  • 描述下DDOS与DOS攻击
  • 使用IP地址访问web服务器
  • 使用域名访问web服务器过程
  • 可重定位什么意思?
  • 静态库与动态库的区别
  • 进程与线程间共享数据


整理:老杨丨10年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1246001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ARM CoreLink 系列 3.2 -- CCI-400,CCI-500, CCI-550 差异】

文章目录 CCI-400 和 CCI-500 差异ARM CCI-400ARM CCI-500ARM CCI-550CCI-400 和 CCI-500 差异 ARM的 CCI(Cache Coherent Interconnect)系列产品是用于多核处理器之间的高性能缓存一致性互连。CCI-400 和 CCI-500 是该系列中的两种设计,它们旨在允许多个处理器核心和其他资…

项目中如何配置数据可视化展现

在现今数据驱动的时代,可视化已逐渐成为数据分析的主要途径,可视化大屏的广泛使用便应运而生。很多公司及政务机构,常利用大屏的手段展现其实力或演示业务,可视化的效果能让观者更快速的理解结果并直观的看到数据展现。因此&#…

党建信息管理系统源码 支持在线交党费 附带完整的搭建教程

传统的党建管理模式通常采用手工方式,不仅效率低下,而且容易出错。随着组织规模的扩大和党员数量的增加,这种管理方式已经无法满足现实需求。此外,传统的党建管理模式缺乏在线交党费功能,给党员带来不便。因此&#xf…

图片转换成pdf格式的软件ABBYY16

ABBYY PDF这款提供多种图像处理选项,可提高源图像的质量,便于准确地识别光学字符。我们扫描纸质文档或从图像文件创建 PDF 时,务必选择合适的图像处理选项。而在ABBYY PDF 中包含下列图像处理选项。 识别文本 — 选择此选项会将文本层放在图…

关于JS stack trace解决办法

问题描述 npm run serve启动前端项目时&#xff0c;控制台输出下图一堆的文字&#xff0c;JS stack trace , 问题现象&#xff1a; JS stack trace Security context: 0000017B93ACFB61 <JS Object>1: init_scope_vars [0000017B93A04381 <undefined>:~3382] [p…

shopee数据分析软件丨探索Shopee数据分析软件——知虾

随着电子商务的快速发展&#xff0c;越来越多的商家和企业开始关注数据分析的重要性。在这个竞争激烈的市场中&#xff0c;了解消费者行为、市场趋势和竞争对手的策略是取得成功的关键。而Shopee数据分析软件——知虾&#xff0c;成为了许多商家和企业的首选工具。本文将深入探…

c++/windows软件绑定网卡加密,实现一机一码

&#x1f482; 个人主页:pp不会算法v &#x1f91f; 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 奇思妙想系列文章 一、c\c windows自动打开cmd并进入mysql 二、c\wind…

OpenMLDB v0.8.4 诊断工具全面升级

新的v0.8.4版本中&#xff0c;我们对于诊断工具进行了全面系统化的升级&#xff0c;以提供更加完整和智能化的诊断报告&#xff0c;有助于高效排查 OpenMLDB 集群问题&#xff0c;大幅提升运维效率。 相比于之前的版本&#xff0c;新的诊断工具增添一键诊断功能&#xff0c;使…

nodejs 如何将 Buffer 数据转为 String

问题说明 使用webSocket的时候出现了一个问题&#xff0c;前端小程序和nodejs后端建立websocket连接后&#xff0c;使用send方法发送到后端为buffer格式&#xff0c;以下为我前后端代码 1、前端小程序代码 //创建webSocket连接 const socket uni.connectSocket({url: wss…

中西部各省市翻译协会、公关协会会长金秋圆桌会议圆满结束

中西部翻译协会共同体、中西部公共关系协会共同体共同体创建8年来&#xff0c;已成功举办了八届翻译大赛。时值第九届中西部翻译大赛将拉开序幕&#xff0c;中西部翻译协会共同体、中西部公共关系协会共同体举办的2023年度中西部各省市翻译协会、公关协会会长金秋圆桌会议&…

linux安装zsh、oh-my-zsh及常用插件

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com&#xff0c;github地址为https://github.com/xjintong。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家访问。 一、安装zsh 这个不用多说了&#xff0…

【力扣:421,2935】数组内最大异或对问题

思路&#xff1a;从最高位向低位构造&#xff0c;对每一位利用哈希表寻找是否存在可使此位为1的数 第一轮找1&#xff1a;清空哈希表&#xff0c;1&#xff0c;2存1&#xff0c;到3发现1^01&#xff0c;res|1<<3 第二轮找11&#xff1a;清空哈希表&#xff0c;1存10&…

实现外卖配送的智能化:外卖配送可视化技术解析

随着互联网技术的不断发展&#xff0c;外卖配送行业也迎来了快速发展的时代。而随之而来的是越来越多的用户对于外卖配送的质量和效率提出了更高的要求。如何让外卖配送更加可视化&#xff0c;成为了外卖配送行业亟需解决的问题。 外卖配送可视化是指通过技术手段&#xff0c;将…

MDK AC5和AC6是什么?在KEIL5中添加和选择ARMCC版本

前言 看视频有UP主提到“AC5”“AC6”这样的词&#xff0c;一开始有些不理解&#xff0c;原来他说的是ARMCC版本。 keil自带的是ARMCC5&#xff0c;由于ARMCC5已经停止维护了&#xff0c;很多开发者会选择ARMCC6。 在维护公司“成年往事”项目可能就会遇到新KEIL旧版本编译器…

基于C#实现并查集

一、场景 有时候我们会遇到这样的场景&#xff0c;比如:M{1,4,6,8},N{2,4,5,7}&#xff0c;我的需求就是判断{1,2}是否属于同一个集合&#xff0c;当然实现方法有很多&#xff0c;一般情况下&#xff0c;普通青年会做出 O(MN)的复杂度&#xff0c;那么有没有更轻量级的复杂度呢…

Spring Boot 3.2发布:大量Java 21的支持上线,改进可观测性

就在今天凌晨&#xff0c;Spring Boot 3.2正式发布了&#xff01;该版本是在Java 21正式发布之后的重要支持版本&#xff0c;所以在该版本中包含大量对Java 21支持的优化。 下面&#xff0c;我们分别通过Spring官方发布的博文和Josh Long长达80分钟的介绍视频&#xff0c;一起…

中国信息通信研究院发布《全球数字治理白皮书》调”转变

加gzh“大数据食铁兽”&#xff0c;回复“20231123”&#xff0c;获取材料完整版 导读 中国信息通信研究院连续第三年发布《全球数字治理白皮书》本年度报告在延续以往对全球数字治理核心议题和重要机制进展评估展望的基础上&#xff0c;首次尝试提出全球数字治理的定义和体…

易点易动固定资产管理系统:实现全面的固定资产采购管理

在现代企业中&#xff0c;固定资产采购管理是一项关键的任务。为了确保企业的正常运营和发展&#xff0c;有效管理和控制固定资产采购过程至关重要。易点易动固定资产管理系统为企业提供了一种全面的解决方案&#xff0c;整合了从采购需求、采购计划、询比价、采购合同到采购执…

Linux系统编程 day04 文件和目录操作

Linux系统编程 day04 文件和目录操作 1. 文件IO1.1 open 函数1.2 close函数1.3 read函数1.4 write函数1.5 lseek函数1.6 errno变量1.7 文件示例1 读写文件1.8 文件示例2 文件大小的计算1.9 文件示例3 扩展文件大小1.10 文件示例4 perror函数的使用1.11 阻塞与非阻塞的测试 2. 文…

绽放独特魅力,点亮美好生活

2023年10月至11月&#xff0c;由益田社区党委主办、深圳市罗湖区懿米阳光公益发展中心承办&#xff0c;深圳市温馨社工服务中心协办的“2023年益田社区益田佳人--女性成长课堂”项目顺利完成&#xff0c;此项目分为四个主题&#xff0c;分别是瑜伽、健身操、收纳、花艺技能&…