dns解析

2020-08-26 15:03:02 浏览数 (1)

一、dns解析

dns也可以认为是域名的解析,因为在实际的网络请求中,是通过ip来进行互访请求的,但是ip是四个字节的数字组成,不容易记住,能够更加方便的访问互联网,然后域名系统应运而生,但是域名并不是免费的,需要到域名注册商处进行申请注册,人们都习惯记忆域名,但机器间互相只认识 IP 地址,域名与 IP 地址之间是一一对应的,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,解析过程是自动进行的。域名解析(DNS)是将域名(例如 cloud.tencent.com)转换成为机器可读的 IP 地址(例如10.10.10.10)的服务。

二、域名解析的过程

先上图(图片取自网络,侵权可联系我删除)

1、(假如www.qq.com解析的ip是1.1.1.1)客户端通过p的浏览器对域名www.qq.com发起请求,如果浏览器已经缓存了qq.com和1.1.1.1的映射关系(一般是接入了cdn或者源站设置了缓存策略就会出现映射关系缓存到本地的情况),那么客户端就无需在发起各种dns服务器遍历的过程了,直接请求1.1.1.1来完成解析过程。

如果说浏览器没有缓存,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。操作系统本身也会有一个域名解析的过程。

在Windows中可以通过C:WindowsSystem32driversetchosts文件来设置,在linux中可以通过/etc/hosts 来设置

我们可以在这里指定一个域名对应的IP地址,那么浏览器会首先使用这个IP地址。例如,我们在测试时可以将一个域名解析到一台测试服务器上,这样不用修改任何代码就能测试到单独服务器上的代码的业务逻辑是否正确。正是因为有这种本地DNS解析的规程,所以黑客就有可能通过修改你的域名解析来把特定的域名解析到它指定的IP地址上,导致这些域名被劫持。

2、如果浏览器、hosts文件里面都没有域名和ip的映射关系,此时操作系统会请求我们本地的dns服务器(local dns),去查找相关的缓存记录,关于local dns 一般会缓存住我们大多数的映射关系,正常情况下,请求到这个dns后就会完成了。如果我们是处于公司的局域网,那么就是自己公司的dns 服务器,如果是学校的,就是学校自己的dns服务器,如果是外网用户,就是运营商的dns 服务器。当然,我们也可以修改为其他公共的dns 服务器,常见的有8.8.8.8、114.114.114.114等

windows机器设置的ldns在这里

linux的dns在这里

(腾讯云cvm)/etc/resolv.conf

3、如果ldns仍然没有命中,此时就会由ldns发起迭代查询,对 "."(Root Server)域名服务器发起解析请求,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP;

ldns收到返回的IP信息后,将会再次请求负责.com域的这台服务器。这台负责.com域的服务器收到请求后,继续判断一级域名(qq.com.)是哪个dns服务器管理的,并返回一个负责该域的ip;

ldns收到返回的ip信息后,再去请求这个dns服务器ip(qq.com的),实际到此这里,这里的dns服务器就是我们所说的权威服务器了,因为我们给域名添加解析记录的时候,解析商都会提供他们自己的权威dns服务器,比如腾讯云的免费套餐版本的dns服务器(f1g1ns1.dnspod.netf1g1ns2.dnspod.net),如果此域名下还有二级域名甚至多级域名,然后就依次重复上面的动作,进行查询,直至找到我们需要的域名映射关系。

4、上面的动作我们可以通过dig这个命令来完整的呈现,比如jc_qcloud.ruizou.club

dig trace jc_qcloud.ruizou.club

其中权威服务器就是f1g1ns1.dnspod.net与f1g1ns2.dnspod.net

三、解析命令介绍

1、dig命令,分析域名解析常用的命令

1.1、dig trace www.qq.com

追踪完整的解析过程

正常情况下,dig www.qq.com 就可以的(忽略域名)

查找qq.com的A记录:dig qq.com A noall answer

查找qq.com的权威DNS: dig qq.com NS noall answer

查找www.qq.com的ipv6记录:dig www.qq.com AAAA noall answer

查找PTR反解析记录(通过解析的ip反查域名),可以用 -x的选项查找IP地址的主机名。

dig -x 58.247.214.47 short 反查qq.com,不过qq.com没有这个记录,所以就查不来

通过指定ns服务器来查看解析记录

dig @ns1.qq.com qq.com

我要是用腾讯云的免费 ns服务器去查qq.com的记录会查到吗,显然是不会的,因为ns服务器本身都是有自己维护的一个域的,是独立的,我没有你qq.com的记录,也不会去缓存这个记录,除非是在qq.com的解析记录内加上这个ns服务就可以,为啥114可以呢,因为114是公共的dns服务器,请求到它的时候,它要是没有记录就去请求根服务器,然后经过迭代查询把记录返回给本地

2、关于TTL值(缓存时间)

2.1、这个是域名记录缓存时间,如果从本地DNS查询互联网地址,服务器指出从哪里获得权威的答案并在本地缓存住TTL时间,以免你在稍后的时间内再次查询同样的地址,这样它就会很快地从缓存中获取你要的答案,比你再次从internet查询要快很多。我们在配置解析记录时,可以自定义设置这个记录可以在缓存中保存多长时间

通常地,远端服务器一般对记录的缓存只保存TTL数值长的时间。时间过期后,服务器会刷新它的本地缓存并

重新查询一个权威答案。

当用dig来查询DNS服务器某条记录时,服务器会告诉dig这条记录可以在缓存中保持的时间长短,ttl值会逐渐减小的,等缓存时间到了之后,会再次发起迭代查询,但是这里实际在使用中,不仅仅是权威服务器的ttl缓存,还需要看我们迭代查询经过的各层的dns服务器的缓存时间。

1.2、nslookup

这个命令linux和Windows都可以使用

默认情况下nslookup查询的是A类型的记录。

nslookup –qt=类型 目标域名,注意qt必须小写, 类型有ns/canme/a/soa/mx等,不区分大小写

nslookup domain [dns-server] ,如果没有指定dns服务器,就采用系统默认的dns服务器。

2.2、域名解析生效时间取决于什么因素?

腾讯云域名的解析生效,首先腾讯云 DNS 必须生效,然后等待世界各地 Local DNS 生效(可以通俗的理解为各大电信运营管理的 DNS 需要及时同步腾讯云 DNS 解析记录),才能最终生效。 网站能否访问直接相关的是 Local DNS,腾讯云的解析都是实时生效的,一般只需几秒即可同步到各地 Local DNS 上,但各地 Local DNS 均有缓存机制,解析的最终生效取决于各运营商刷新时间。

新增解析记录生效需要多长时间?

使用腾讯云(DNSPod)DNS 解析新增解析记录,实时生效。

修改解析记录生效需要多长时间?

修改域名记录,各地生效时间理论上是您域名记录之前设置的 TTL 时间,不过也存在地方运营商有强制延长域名记录的情况,导致未按照 TTL 时间生效。

修改域名 DNS 生效需要多长时间?

修改域名 DNS 指向 DNSPod 的域名,虽然 DNSPod 服务器的生效时间是实时的,但因各地 ISP 服务商刷新域名 DNS 的时间不一致,所以导致解析在全球生效一般需要0 - 72小时,请您耐心等待。

腾讯云域名到期续费成功后,并未修改 DNS,为什么解析未生效?

域名到期后,DNS 会失效,续费成功后,有0 - 72小时的生效时间,建议您耐心等待

我比较常用的一个全网测试工具是ipip.net的

https://tools.ipip.net/dns.php

2.3、解析记录值

参考腾讯云文档:https://cloud.tencent.com/document/product/302/3468

要指向主机服务商提供的 IP 地址,选择类型 A;要指向一个域名,选择类型 CNAME。

A 记录:地址记录,用来指定域名的 IPv4 地址(例如8.8.8.8),如果需要将域名指向一个 IP 地址(外网地址),就需要添加 A 记录。

CNAME 记录:如果需要将域名指向另一个域名,再由另一个域名提供 IP 地址,就需要添加 CNAME 记录。

NS 记录:域名服务器记录,如果需要把子域名交给其他 DNS 服务商解析,就需要添加 NS 记录。

AAAA 记录:用来指定主机名(或域名)对应的 IPv6 地址(例如ff06:0:0:0:0:0:0:c3)记录。

MX 记录:如果需要设置邮箱,让邮箱能收到邮件,就需要添加 MX 记录。

TXT 记录:如果希望对域名进行标识和说明,可以使用 TXT 记录,绝大多数的 TXT 记录是用来做 SPF 记录(反垃圾邮件)。

SRV 记录:SRV 记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理。主机记录处格式为:服务的名字.协议的类型。例如_sip._tcp

隐、显性 URL 记录:将一个域名指向另外一个已经存在的站点,就需要添加 URL 记录

3、域名劫持

DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的。

案例分享(直接搬迁网络专项的案例 -_- ):

4、域名污染

域名污染又叫域名欺骗、域名缓存投毒(DNS cache poisoning)。

污染原理

当客户的电脑向域名服务器发送了域名解析的请求,然后域名服务器把解析发送给客户电脑,这之间是有一个时间差的。如果某个攻击者能够在域名服务器的“DNS应答”还没有到达客户电脑之前,先伪造一个错误的“DNS应答”发给客户的电脑。那么客户的电脑收到的就是错误的信息,并得到一个错误的 IP地址。 注:域名污染主要是国家防火墙对非法的国外域名做限制使用。

国家防火墙实施域名污染的两种方式

4.1、 直接域名污染(域名服务器在国外) 国家互联网只有少数几个国际出口,如果客户要访问国外网站,客户的网络数据流就必定会经过其中的某个“国际出口”。 因为国家防火墙部署在国际出口。如果客户用的是【国外的】域名服务器,“DNS请求”必定会经过国际出口;同样,域名服务器的“DNS应答”必定也会经过国际出口才能到客户的电脑。国家防火墙鉴定此网站具有不和规范的信息,就会对此解析进行修改,客户的电脑收到的就是错误的信息,并得到一个错误的 IP地址。这就是直接域名污染。

4.2、 间接域名污染(域名服务器在国内) 例如:客户用的是电信的 DNS服务器,然后想要访问某个包含不和规范的信息的网站,其网站服务器必定在国外,而且网站的域名肯定也不会使用 CN 之下的域名。所以,被封锁的网站,其上级域名的“权威域名服务器”也是在国外的。当向“电信的DNS服务器”查询此网站的域名,这台“电信的DNS服务器”就会去找这个不和规范的网站的上一级域名对应的“权威域名服务器”去进行“域名查询”。因为是从国外进行域名查询,相关的数据流必定要经过国际出口。一旦经过国际出口,就会被国家防火墙修改解析信息,使客户得到一个错误的IP。“电信的域名服务器”拿到的是已经被污染的域名记录(里面的IP是错的)。而且“电信的域名服务器”会把这条错误的记录保存在自己的域名缓存中。 上述过程不断重复,最终会导致:全国所有的域名服务器,它们的缓存中只要是包含了不和规范的网站的记录,记录中的 IP地址必定是错的(这个错误的 IP地址也就是国家防火墙伪造的那个)。所以说“间接污染”可以把错误的域名记录扩散到全国,影响范围更广。

如何查询域名被污染

通过命令:使用dig trace诊断,如果直接返回解析结果的,表明域名解析被污染

区别: DNS劫持是劫持了DNS服务器,进而修改其解析结果。 DNS污染是某些服务器对DNS查询进行入侵检测,发现与黑名单上匹配的请求,该服务器就伪装成DNS服务器,给查询者返回虚假结果。它利用了UDP协议是无连接不可靠性。

一个是劫持了DNS服务器,一个是伪装成DNS服务器。造成的结果都是返回错误的IP地址。

0 人点赞