看懂DNS到HttpDNS

看懂DNS到HttpDNS

DNS

什么是DNS以及DNS的作用

  • DNS(Domain Name System)域名系统,作为域名与IP的映射的一个分布式数据库系统。
  • 能够使得用户更加方便去访问对应的服务,而不用去记住那一串毫无规律的IP串。

为何需要DNS解析域名成IP

首先计算机在网络上通讯时只能识别IP地址(网络通讯大部分是基于TCP/IP协议,而TCP/IP是基于IP地址的),比如我要在浏览器中访问百度的地址,我可以在地址栏直接输入14.215.177.39就能访问到百度的首页。但是我们无法记住更多的IP地址。那么域名就出现了,域名是由一串用”.”分隔的唯一名字。所以现在我们访问网站的时候,就可以在浏览器地址栏中输入域名(www. baidu.com),那么DNS就会把域名翻译成IP,然后访问IP。

在这里插入图片描述

简单域名知识

域名按照从右到左的顺序来划分优先等级,最右边的是最高级的根域,根域就是所谓的”.”,其实我们的域名www.baidu.com在配置当中应该是www.baidu.com.(最后有一个点),一般我们在浏览器里输入时会省略后面的点。接下来就是顶级域又称一级域,一级域之后还有二级三级域。如何区分当前域名是几级域,可以参考域名中有几个点来判断(除了根域外),比如baidu.com就是个一级域,而www.baidu.com就是个二级域(它是在baidu.com这个域里面有一个叫做www的主机)

在这里插入图片描述

每一层域都会有一堆域名(DNS)服务器,DNS服务器是能提供域名解析的服务器,记录类型可以是A(address)记录,NS(name server)记录,MX(mail),CNAME等,这些记录类型后续会一一介绍到。

这里有个知识点,百科中说全世界只有13台根DNS服务器,但其实这是错误的观点,根DNS服务器只有具体的13个IP地址,但机器的数量不止13台。

DNS服务器一般分三种,根DNS服务器,顶级DNS服务器,权威DNS服务器

在这里插入图片描述

DNS解析流程

本地DNS

即上网时手动指定或者自动分配的DNS的地址。

情况一般如下:

  • 如果你的电脑是直连运营商(ISP)网络,一般默认设置情况下DNS为ISP的服务器地址。
  • 如果你的电脑和ISP之间还加了无线或者有线路由(一般的路由器本身还会内置DNS转发器),它的作用是将发往它所有的DNS请求转发到上层DNS,但最终会转发到ISP的DNS。
  • 如果手动修改了DNS,比如改成114.114.114.114这样的公用DNS服务器,那么指的就是这个服务器。
  • 本地DNS不是权威服务器,相当于一个代理的DNS解析服务器,他会帮你迭代权威服务器返回的回答,然后把最终查到的IP返回给你。

执行流程

  1. 现在我有一台电脑,在浏览器中输入www.baidu.com域名,浏览器会从浏览器的DNS缓存中检查是否有这个网址的映射关系,如果有,就返回IP,完成域名解析
  2. 如果没有,操作系统会先检查自己本地的hosts文件是否有这个网址的映射关系,如果有,就返回IP,完成域名解析。看到这里大家应该都猜到了,有DNS的地方,就有缓存。浏览器、操作系统、本地DNS、根域名服务器,它们都会对DNS结果做一定程度的缓存。
  3. 如果还没有,我的电脑就要向本地DNS服务器发起请求查询www.baidu.com这个域名。
  4. 本地DNS服务器拿到请求后,先检查一下自己的缓存中有没有这个地址,有的话直接返回。这个时候拿到的IP地址,会被标记为非权威服务器的应答

输入 nslookup domain name就可以查询到对应的应答,如下图:在这里插入图片描述

  1. 如果本地DNS服务器的缓存中没有的话,本地DNS服务器会从配置文件中读取13个根DNS服务器的地址,然后向其中一台发起请求
  2. 根DNS服务器拿到请求后,知道他是com.这个顶级域名下的,所以会返回com域名中的NS记录(用来表明哪台服务器对该域名进行解析),其实就是一个IP(com对应的服务器IP)
  3. 本地DNS服务器根据返回的IP(com DNS服务器)发起请求,com DNS服务器发现你这请求的是baidu.com这个域,查到这个域的NS记录,然后返回IP(baidu.com)
  4. 本地DNS服务器在根据IP(baidu.com DNS服务器)访问这些权威服务器,baidu.com服务器在A记录(正向解析记录,域名到IP地址的映射)中查找到www.baidu.com的IP地址,返回IP(www.baidu.com
  5. 最终本地DNS服务器拿到用户想访问的www.baidu.com的IP,返回给客户端,并进行缓存操作,以便下次使用。

在这里插入图片描述

DNS解析总结

DNS的域名解析过程分为两种:递归查询和迭代查询。

  • 我的电脑向本地DNS服务器的查询一般都是采用递归查询
  • 本地DNS服务器向其他DNS服务器的查询是迭代查询

基于UDP协议的DNS问题

DNS劫持

DNS决定的是我们的域名将解析到哪一个IP地址的记录,是基于UDP协议的一种应用层协议。这种攻击的前提是攻击者掌控了你的本地DNS服务器

攻击者劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致用户对该域名地址进行访问的时候,由原来的IP地址转入到修改后的IP地址。结果就是让正确的网址不能解析或者是被解析到另一个网址的IP,实现获取用户资料或者破坏原有网址正常服务的目的。

由于域名劫持往往只能在特定的被劫持的网络范围内进行,所以在此范围外的DNS服务器能够返回正常的IP地址,或者修改DNS以及直接IP访问。

在这里插入图片描述

一般而言,用户上网的DNS服务器都是运营商分配的,所以在这个节点上,运营商可以做一些事情,比如,你去访问www.a.com,正常DNS应该返回10.0.0.1,而运营商劫持后,会返回一个运营商的中间服务器IP,访问该服务器会一致性的返回302(暂时重定向),让用户浏览器跳转到预处理好的带广告的网页,在该网页中再通过iframe打开用户原先访问的地址。

DNS污染

又称域名服务器缓存投毒(DNS cache poisoning),它和DNS劫持的不同之处,在于污染针对的是DNS缓存,是在查询信息到达目标DNS服务器前,经过的节点上做手脚,而劫持是DNS服务器中记录的是错误的内容。

总结下就是DNS劫持是修改DNS服务器,DNS污染是修改DNS缓存。

看下图举个例子:对于GFW来说,DNS劫持用于国内服务器,因为可以修改服务器中的DNS记录,而对于国外服务器GFW无法更改其内容,故采用DNS污染的方式篡改用户收到的信息。其中的过程是,当你向国外DNS服务器查询DNS记录时,这些流量走到国际出口带宽的时候会遇到GFW的关键字审查,如果上了黑名单,GFW会立即向你返回一个虚假的DNS记录。上面也说到DNS走的是UDP协议,加上DNS查询结果只认最快返回的,所以一定是先收到了GFW给你返回的虚假DNS记录,就算马上你收到了真正的来自国外DNS的回复,也会被你的系统无视掉。这种攻击也被称为中间人攻击。
在这里插入图片描述

HttpDNS

什么是HttpDNS

HTTPDNS使用HTTP协议进行域名解析,代替现有基于UDP的DNS协议,域名解析请求直接发送到阿里云的HTTPDNS服务器,从而绕过运营商的Local DNS,能够避免Local DNS造成的域名劫持问题和调度不精准问题。

作用

  • 防劫持

绕过运营商Local DNS,避免域名劫持,让每一次访问都畅通无阻。

  • 精准调度

基于访问的来源IP,获得最精准的解析结果,让客户端就近接入业务节点。

智能DNS,就是为了调度用户访问策略,但是这些因素会导致智能DNS策略失效。小运营商,没有DNS服务器,直接调用别的服务商,导致服务商识别错误,直接跨网传输,速度大大下降。服务商多长NAT,实际IP,获得不了,结果没有就近访问。一些运营商将IP设置到开卡地,即使漫游到其他地方,结果也是没有就近访问。

  • 0ms解析延迟

通过热点域名预解析、缓存DNS解析结果、解析结果懒更新策略等方式实现0解析延迟

  • 快速生效

避免Local DNS不遵循权威TTL,解析结果长时间无法更新的问题

  • 稳定可靠

存在问题

解决了DNS的基于UDP劫持,但是仍然存在HTTP劫持的风险,当然,遇到这种情况,要么通过IP去解析域名,要么,确保解析链上的ISP达成合作协议,不对HTTP进行劫持。

应用场景

1、希望降低访问延迟、减少跨网访问的资讯、游戏类APP;
2、希望降低连接失败率,提升业务成功率的电商等通用APP;
3、域名屡次被劫持,希望用户访问顺畅无阻的社交等通用APP;
4、对流畅度要求高,提升连接成功率的视频、音乐类APP;
注:需要客户端进行一定的开发,适用于移动APP的使用,但是不适合浏览器使用。

发布了57 篇原创文章 · 获赞 32 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/rekingman/article/details/103940919