当前位置:   article > 正文

网络:抓包分析dns的原理_dns代理转发抓包

dns代理转发抓包

DSN理论

DNS是什么

在互联网上有多达到上亿的设备,而这些设备之间互相联通网络,每一台主机都需要一个唯一的标识符(就像是我们每个人都有一张身份证),而这个标识符就是IP地址,由于IP地址是数字,不利于人来使用,人们为了方便记忆,发明了点分十进制,但是还是不方便,又发明了域名,日常生活中使用的是域名。为了将域名和IP地址对应起来,又发明了DNS服务器。

DNS 是互联网上重要的基础应用程序,它作为一个分布式数据库,域名服务器分布在世界各地,储存着域名与 IP 地址的映射关系,每个域名服务器上值存储了部分域名信息。因此为了完成域名解析,通过需要在多个域名服务器之间进行查询。

在这里插入图片描述
什么时候需要DNS服务。 当浏览器解析到网址是一个域名,那么在发送数据报之前需要将域名转换为IP地址,才能去发包

当然,我们并不是直接就去访问DNS服务器,而是先去缓存中查询:
在这里插入图片描述

  • 浏览器缓存:浏览器会先检查是否在缓存中,没有则调用系统库函数进行查询。
  • 操作系统缓存:操作系统也有自己的 DNS缓存,但在这之前,会向检查域名是否存在本地的 Hosts 文件里,没有则向 DNS 服务器发送查询请求。
  • 路由器缓存
  • ISP DNS 缓存:ISP DNS 就是在客户端电脑上设置的首选 DNS 服务器,它们在大多数情况下都会有缓存。
  • 根域名服务器查询:在前面所有步骤没有缓存的情况下,本地 DNS 服务器会将请求转发到互联网上的根域

在这里插入图片描述

DNS的通信

DNS只要使用TCP/UDP的53端口;

DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议;

区域传送使用TCP的原因:

  • ①辅助DNS服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的书量比一个请求和应答的数据量要多得多。
  • ②TCP是一种可靠的连接,保证了数据的准确性。

域名解析时使用的是UDP协议:

客户端向DNS服务器查询域名,一般返回内容都不超过512个字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包;

DNS层次结构

DNS 为了实现域名的有效管理与高效的查询,它是按层级结构进行组织的,并且该层次结构与域名的结构( . 分隔)相对应,每个以点分隔的为 标签(label)。它所使用的所有名称集合构成了 DNS 名称空间(name space)。

域名的层级是从右往左看: 三级域名.二级域名.顶级域名.根域名

  • 根域名 :.root 或者 . ,通常是省略的
  • 顶级域名,如 .com,.cn 等
  • 次级域名,如 baidu.com 里的 baidu,这个是用户可以进行注册购买的
  • 主机域名,比如 baike.baidu.com 里的baike,这个是用户可分配的
主机名.次级域名.顶级域名.根域名
baike.baidu.com.root
  • 1
  • 2

在这里插入图片描述

例如:客户端想要查询www.yahoo.com的IP

  • 首先,客户端查询根域名服务器.,找到com域名解析服务器;
  • 其次,客户端查询com域名解析服务器,找到yahoo.com域名解析服务器;
  • 最后,客户端查询yahoo.com 域名解析服务器,获得www.yahoo.com的IP地址

补充:DSN本质是一个数据库服务器,对于根域名服务器,具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技术,所以我们可以在全球设立这些IP的镜像站点,你访问到的这个IP并不是唯一的那台主机。

DNS解析过程

前提:

  • 当前计算机已经通过ISP接入了互联网,那么ISP就会给计算机分配一个DNS服务器。这个服务器不是权威服务器,而是相当于一个代理的DNS解析服务器,他会帮你迭代权威服务器返回的应答,然后最终将返回IP给这台服务器。
  • DNS服务器:用于对域名进行解析的域名解析服务器。
  • DNS代理:用于代理域名服务器,对客户端的查询请求进行响应(一般是本地查找,查找不到再向代理的服务器转发客户端的查询请求)。

现在我要请求查询www.163.com这个域名:

  • 先查询本地DNS缓存(自己电脑上),有则返回,没有进入下一步

  • 查看本地hosts文件有没有相应的映射记录,有则返回,没有进入下一步

  • 向本地的DNS服务器发送请求进行查询

    • *本地DNS缓存(也就是本地DNS服务器)是什么呢?如果是DHCP配置,本地DNS由你的网络服务商(ISP),比如移动、电信等自动分配,它通常就在你网络服务商的某个机房
    • 本地DNS服务收到请求之后,会先检查下自己的缓存记录
      • 如果查到了就直接返回结束(这个时候拿到的ip地址,会被标记为非权威服务器的应答。)
      • 如果没有找到:DNS会从配置文件里面读取13个根域名服务器的地址(这些地址是不变的,直接在BIND的配置文件中), 然后像其中一台发起请求:请问老大, www.163.com 的ip是啥?
  • 根域名服务器收到请求后,看到这是个 .com 的域名,就会返回com域中的NS记录,一般来说是13台主机名和IP。

  • 本地 DNS 服务器接收到回信后,照着老大哥给的联系方式(ip1),马上给 .com 这个顶级域名服务器的其中一台发起请求:请问 .com 大大,www.163.com 的ip 是啥?

  • .com 顶级域名服务器接收到请求后,看到这是 163.com 的域名,就回信说:这个域名是 .163.com 老弟管理的,你就去问他就行了,这是他的联系方式(ip2)

  • 本地 DNS 服务器接收到回信后,按照前辈的指引(ip2),又向 .163.com 这个权威域名服务器发起请求:请问 163.com 大大,请问 www.163.com 的ip是啥?

  • 163.com 权威域名服务器接收到请求后,确认了是自己管理的域名,马上查了下自己的小本本,把 www.163.com 的ip告诉了 本地DNS服务器。

  • 本地DNS服务器接收到回信后,非常地开心,这下总算拿到了www.163.com的ip了,马上把这个消息告诉了要求查询的客户(就是你的电脑)。由于这个过程比较漫长,本地DNS服务器为了节省时间,也为了尽量不去打扰各位老大哥,就把这个查询结果偷偷地记在了自己的小本本上,方便下次有人来查询时,可以快速回应。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

DNS查询分为递归查询和迭代查询

  • 主机向本地域名服务器的查询一般都是采用递归查询。
  • 本地域名服务器向根域名服务器(外网)的查询的迭代查询

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

DNS缓存时间

上面的几个步骤里,可以看到有两个地方会缓存 DNS 的查询记录,有了缓存,在一定程度上会提高查询效率,但同时在准确率上会有所损失。

因此我们在配置 DNS 解析的时候,会有一个 TTL 参数(Time To Live),意思就是这个缓存可以存活多长时间,过了这个时间,本地 DNS 就会删除这条记录,删除了缓存后,你再访问,就要重新走一遍上面的流程,获取最新的地址。

在这里插入图片描述

DNS的记录类型

A(Address ):

又叫做A记录,就是域名的对应的IP地址IPV4
在这里插入图片描述

AAAA:

将域名解析到一个指定的IPV6的IP上

CNAME:

别名解析,返回另一个域名,即当前查询的域名是另一个域名的跳转

  • 有了它,就可以将多个名字映射到同一台计算机。
  • 服务器IP地址变更时您就可以不必麻烦的一个一个域名更改指向了。只需要更改做A记录的那个域名其他做别名,那些域名的指向也将自动更改到新的IP地址上了在这里

NS(Name Server

该域名由哪个DNS服务器来进行解析

  • DNS服务器NS记录地址一般以以下的形式出现:ns1.domain.com、ns2.domain.com

MX(Mail eXchange)

返回接收电子邮件的服务器地址。当存在多个MX记录时,按照优先级使用,越小越高
在这里插入图片描述

PTR(Pointer Record)

逆向查询记录,只用于从IP地址查询域名

DSN如何负载均衡

站在客户端的角度,这是一次DNS递归查询过程。因为本地DNS全程为它效劳,它只要坐等结果即可。在这个过程中,DNS除了可以通过名称映射为IP地址,它还可以做另外一件事,就是负载均衡。

DNS首先可以做内部负载均衡:

  • 比如,一个应用要访问数据库,在这个应用里面应该配置这个数据库的IP地址,还是应该配置这个数据库的域名呢?显然应该配置域名,因为一旦这个数据库,因为某种原因,换到了另外一台机器上,而如果有多个应用都配置了这台数据库的话,一换IP地址,就需要将这些应用全部修改一遍。但是如果配置了域名,则只要在DNS服务器里面,将域名映射到新的IP地址,这个工作就完成了,大大简化了运维
  • 在这个基础上,我们可以再进一步。比如,某个应用要访问另一个应用,如果配置另外一个应用的IP地址,那么这个访问就是一对一的。但是当被访问的应用撑不住的时候,我们其实可以部署多个。但是,访问它的应用,如何在多个之间进行负载均衡?只要配置成域名就可以了。在域名解析的时候,我们只要配置策略,这次返回第一个IP、下次返回第二个IP,就可以实现负载均衡了

DNS还可以做全局负载均衡:

  • 为了保证我们的应用高可用,往往会部署多个机房,每个地方都会有自己的IP地址。当用户访问某个域名的时候,这个IP地址可以轮询访问多个数据中心。如果一个数据中心因为某种原因挂了,只要在DNS服务器里面,将这个数据中心对应的IP地址删除,就可以实现一定的高可用
  • 另外,我们肯定希望北京的用户访问北京的数据中心,上海的用户访问上海的数据中心,这样,客户体验就会非常好,访问速度就会超快。这就是全局负载均衡的概念

DNS 报文结构

在这里插入图片描述

实践

相关的工具和命令: dig,nslookup,host等.其中以dig命令的功能最为强大和灵活.

nslookup

  • 使用本机的dns服务器查询
$ nslookup WWW.baidu.com             # 下面是DNS服务器的地址 
Server:         192.168.0.1         # DNS服务器的主机名
Address:        192.168.0.1#53      # DNS服务器的IP地址

Non-authoritative answer:        # 下面是查询到的结构
WWW.baidu.com   canonical name = www.a.shifen.com.  # 看dig的具体解析
Name:   www.a.shifen.com     # 解析的URL
Address: 180.101.49.12       # 解析出来的IP
Name:   www.a.shifen.com
Address: 180.101.49.11

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 指定公网的域名服务器进行查询,比如常见的 114.114.114.114
$ nslookup www.baidu.com 114.114.114.114
Server:         114.114.114.114
Address:        114.114.114.114#53

Non-authoritative answer:
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 180.101.49.12
Name:   www.a.shifen.com
Address: 180.101.49.11

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

dig

  • Dig工具会在本地计算机做迭代,然后记录查询的过程。
  • linux系统自带有

dig常用参数

  • @ :指定进行域名解析的域名服务器
  • -t :指定要查询的DNS数据类型
  • -x:进行逆向域名查询
  • +noall:忽略全部,不进行输出
  • +answer:只输出结果,省略过程
  • +trace: 进行迭代查
  • -h:帮助信息
使用迭代查询,跳过缓存DNS服务器,直接向各级域名服务器发起请求
$ dig +trace WWW.baidu.com
;; Warning: Message parser reports malformed message packet.

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> +trace WWW.baidu.com
;; global options: +cmd
  • 1
  • 2
  • 3
  • 4
  • 5

第一步是向我这台机器的DNS服务器192.168.0.1(网络接入服务器商提供的DSN服务器)获取到根域服务区的13个IP和主机名[b-j].root-servers.net.。

  • 从下面可以看出本地 DNS 服务器 ip 为 192.168.1.1,端口为53,你可以在 /etc/resolv.conf 里看到这个配置
    在这里插入图片描述
  • 根赋予服务器的IP一个十三个,从a.root-servers.net. 到m.root-servers.net. ,它们对应的ip地址,已经内置在DNS服务器中。
.                       68951   IN      NS      c.root-servers.net.
.                       68951   IN      NS      d.root-servers.net.
.                       68951   IN      NS      e.root-servers.net.
.                       68951   IN      NS      f.root-servers.net.
.                       68951   IN      NS      g.root-servers.net.
.                       68951   IN      NS      h.root-servers.net.
.                       68951   IN      NS      i.root-servers.net.
.                       68951   IN      NS      j.root-servers.net.
.                       68951   IN      NS      k.root-servers.net.
.                       68951   IN      NS      l.root-servers.net.
.                       68951   IN      NS      m.root-servers.net.
.                       68951   IN      NS      a.root-servers.net.
.                       68951   IN      NS      b.root-servers.net.
;; Received 512 bytes from 192.168.0.1#53(192.168.0.1) in 6 ms
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

第二步是向其中的一台根域服务器192.36.148.17发送www.baidu.com的查询请求,他返回了com.顶级域的服务器IP(未显示)和名称

com.                    172800  IN      NS      k.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      l.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    172800  IN      NS      a.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      m.gtld-servers.net.
com.                    86400   IN      DS      30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.                    86400   IN      RRSIG   DS 8 1 86400 20201105050000 20201023040000 26116 . El41gNlSItGQmeUPR1JrBL/WsinowCVAY2m6WhyTl9ehb0t0QIWQLQOa VGQtJxHxpCPw/W1Qzlwd1GyIZXpA0wEgwK54i7QFSUxknlTHIuT4bRE9 H5E+TfTmD1rcrdQNJxcZNGFbAe/rsg1jm1iBzE4f6e0Z5XHrK3vqqSZi xA5nX6W95S6MwJNiY//3wVVUANef4AuUJ5E+Vrhd8oxFhGwcLxEJjUTw HbReMHDzTQ4JgupOLMKpjb3uxAxes71fJjugdb5X8hzO6sBFGWKnpHWT b0nMzTaUUghL4PG4OenW4lKcPgHohyf9DeHBxgaoeDVQ0TJyPBURlg+t WioLZA==
;; Received 1176 bytes from 192.36.148.17#53(i.root-servers.net) in 53 ms
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

第三步,便向com.域的一台服务器192.26.92.30请求,www.baidu.com,他返回了baidu.com域的服务器IP(未显示)和名称,百度有5台顶级域的服务器

baidu.com.              172800  IN      NS      ns2.baidu.com.
baidu.com.              172800  IN      NS      ns3.baidu.com.
baidu.com.              172800  IN      NS      ns4.baidu.com.
baidu.com.              172800  IN      NS      ns1.baidu.com.
baidu.com.              172800  IN      NS      ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20201028044154 20201021033154 31510 com. QlJy9nZ6StpWIZMgZf9+xQt2vmdmTRNgHvOcQhFO9y8oxRpLwZn8wfX5 IX5iuTfGNC+BmOrjUbeue/onMkjY1P8otE9a7bc52mwLa8rFl574muLI bbLssIynZ+p4gelNSr+7bsHrGcWiuJCRmakSMI4PR/r896xzd/t9AIb8 LOauiINuIhFag9nBwguS9qDcq4cVIQK2s+X+HtvdSTOcQg==
HPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.com. 86400 IN NSEC3 1 1 0 - HPVVN3Q5E5GOQP2QFE2LEM4SVB9C0SJ6 NS DS RRSIG
HPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.com. 86400 IN RRSIG NSEC3 8 2 86400 20201028063404 20201021052404 31510 com. Jz5t4ki9CHs2toHA5ngBnoIc3xCT9SJsy3F52Gx55S47j73pecdqK0Ga 7k/Q2zsc+1D8yeV8YvDprhywauNw+JjDZFu4AX5LUr1xxx80yyYVFiMJ uVaQ9qkuSBWlUa7jFMy/DCJMfRv5uoLuvVu1SkAc1WD+xAdcxRAB3e7G 7bZNYEdswprcevF+nOs6hFa9GSgissYzIx+wG90LY44pFg==
;; Received 761 bytes from 192.26.92.30#53(c.gtld-servers.net) in 236 ms
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

此处可以用dig @192.26.92.30 www.baidu.com查看返回的百度顶级域名服务器IP地址

第四步呢,向百度的顶级域服务器(202.108.22.220)请求www.baidu.com,他发现这个www有个别名,而不是一台主机,别名是www.a.shifen.com。

这是整个请求中的最后一步,当dig查到了别名,整个请求就终止了。

WWW.baidu.com.          1200    IN      CNAME   www.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns5.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns2.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns3.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns1.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns4.a.shifen.com.
;; Received 239 bytes from 202.108.22.220#53(ns1.baidu.com) in 35 ms

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

但是我们要的是IP而不是别名啊,为什么会终止呢?
待实践

总结:

  1. 由根域名服务器查找到负责解析.com的顶级域名服务器
  2. 由顶级域名服务器查找到baidu.com的二级域名服务器
  3. 由二级域名服务器查找到www.baidu.com对应一条CNAME记录www.a.shifen.com
  4. 再去查找www.a.shifen.com对应的A记录
  5. 最后返回A记录对应的IP地址
指定域名服务器进行查询
$ dig www.baidu.com @8.8.8.8   #  (谷歌服务器)

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> www.baidu.com @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57501
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.baidu.com.                 IN      A

;; ANSWER SECTION:
www.baidu.com.          1031    IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       198     IN      CNAME   www.wshifen.com.
www.wshifen.com.        198     IN      A       104.193.88.123
www.wshifen.com.        198     IN      A       104.193.88.77

;; Query time: 39 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: 五 1023 14:47:58 CST 2020
;; MSG SIZE  rcvd: 127

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

ps:我的机器上下面这个请求没有反应

dig www.baidu.com

直接查看结果,忽略过程
$ dig +noall +answer www.baidu.com @8.8.8.8
www.baidu.com.          863     IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       272     IN      CNAME   www.wshifen.com.
www.wshifen.com.        290     IN      A       103.235.46.39
  • 1
  • 2
  • 3
  • 4
$ dig www.baidu.com @8.8.8.8 +short
www.a.shifen.com.
www.wshifen.com.
103.235.46.39

  • 1
  • 2
  • 3
  • 4
  • 5
DNS区域传输

利用管理员配置不当,查询该域名下的所有服务器

dig  @ns4.sina.com(该域名下的ns服务器)sina.com axfr
  • 1

可以看出连接失败了,因为新浪不存在该漏洞
在这里插入图片描述

只看指定的记录类型
$ dig cname www.baidu.com @8.8.8.8  +short
www.a.shifen.com.

  • 1
  • 2
  • 3

host

host 命令 可以看作dig命令的简化版本,返回当前请求域名的各种记录。

在这里插入图片描述

DNS抓包分析

深度解析浏览器中输入 URL 后发生了什么

URL到页面到底经历了什么(详细版)

初识网络原理: 从浏览器地址栏输入 URL 到页面渲染之间都经历了什么

DSN解析过程详解

DNS工作原理

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/901096
推荐阅读
相关标签
  

闽ICP备14008679号