DNS相关知识

Last Updated: 2023-04-04 09:46:58 Tuesday

-- TOC --

DNS,Domain Name System,翻译过来就是域名系统,是互联网上作为域名和IP地址相互映射的一个分布式数据库。

DNS能够使用户更方便的访问互联网,只需要记住域名,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。域名是给人类使用的,因此有了DNS来做域名和IP地址之间的翻译,如果只是软件处理,可以直接使用ip地址即可,就没有DNS的事儿了。

DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC2181对DNS有规范说明,RFC2136对DNS的动态更新进行说明,RFC2308对DNS查询的反向缓存进行说明。

DNS域名解析的全过程

下面这张图,详细说明了一个DNS域名解析的全过程:

DNS

详细解释DNS域名解析的过程

网络客户端就是我们平常使用的电脑,打开浏览器,输入一个FQDN域名。比如输入cs.pynote.net,这时,你使用的电脑系统会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。

查询cs.pynote.net的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询。

DNS根服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。

本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。

最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。

配置DNS解析的TTL参数

我们在配置域名DNS解析的时候,有一个参数常常容易忽略,就是DNS解析的TTL参数,Time To Live。TTL这个参数告诉本地DNS服务器,域名缓存的最长时间。用阿里云解析来举例,阿里云解析默认的TTL是10分钟,10分钟的含义是,本地DNS服务器对于域名的缓存时间是10分钟,10分钟之后,本地DNS服务器就会删除这条记录,删除之后,如果有用户访问这个域名,就要重复一遍上述查询流程。

其实,如果网站已经进入稳定状态,不会轻易更换IP地址,我们完全可以将TTL设置到协议最大值,即24小时。带来的好处是,让域名解析记录能够更长时间的存放在各地的本地DNS服务器中,以加快用户的访问。设置成24小时,其实,还解决了Googlebot在全球部署的服务器抓取网站可能带来的问题。

阿里云之所以只将TTL设置成10分钟,是为了让新的域名解析更快生效而已。因为旧的解析在最长10分钟之后失效(本地DNS服务器将对应的解析条目删除),然后新的解析生效。如果是24小时,这个生效的时间最长就是24小时,甚至更长(本地DNS服务器要有用户请求,才会发起查询)。

Linux下DNS查询命令

反向DNS查询(rDNS)

反向DNS查询,英文是Reverse DNS lookup。

所谓反向,是相对正向而言的。我们一般说DNS查询,都是正向的,就是通过域名,查找域名对应的IP地址。因此,反向DNS查询,就是反过来,通过IP地址,查找对应的域名。正向的DNS查询,有时候我们会看到英文是forward DNS lookup,以便跟Reverse DNS lookup反向DNS查询区别开来。

rDNS stands for reverse Domain Name System. It is also known as Reverse DNS or PTR (Pointer) Record. As opposed to the regular DNS that maps domain names to IP addresses, rDNS performs the opposite function by mapping IP addresses to domain names. An rDNS lookup involves querying a specific IP address to determine the associated domain name. This can be useful in various scenarios such as email spam filtering, troubleshooting network connectivity issues, and web server administration.

For example, if you receive an email from a suspicious IP address, performing an rDNS lookup on that IP address can reveal the associated domain name and help determine if the email is legitimate or not.

rDNS is also commonly used in web server administration to ensure that a website's IP address resolves correctly to its associated domain name. This can help prevent issues with search engine optimization and website ranking, as well as improve website security by verifying the origin of incoming traffic.

rDNS is a type of DNS record known as a "PTR" record, which stands for Pointer record. PTR records are used in reverse DNS to map an IP address to a domain name. Each IP address has its own PTR record, which maps the IP address to one or more domain names. When a computer sends a request using an IP address, the reverse DNS server looks up the corresponding PTR record and returns the associated domain name.

动态域名解析(DDNS)

DDNS,Dynamic DNS,动态域名解析。

首先,它还是解析域名,还是将域名解析为IP地址。不同的地方在于,考虑到IP地址总是在变,DDNS服务商会提供一个接口,每次IP地址变化之后,自动更新域名的A记录,这就是动态的意思。

DNS污染

DNS污染,又叫域名服务器缓存污染(DNS cache pollution),或域名服务器缓存投毒(DNS cache poisoning),是指一些刻意制造并发送出来的域名服务数据包,将域名服务器上的特定域名指往不正确的IP地址。

应对DNS污染,只需要把系统的DNS设置为自己信赖的DNS服务器的IP地址即可解决,或者通过修改系统hosts文件,将正确的域名和IP地址的对应关系写死。DNS解析正确,就能获取的正确的IP地址,但是这并不是解决网站无法访问的全部。

DNS劫持

DNS劫持又叫域名劫持,指攻击者篡改了某个域名的解析结果,使得指向该域名的IP变成了另一个IP,导致对相应网址的访问被劫持到另一个不可达的或者假冒的网址,从而实现非法窃取用户信息或者破坏正常网络服务的目的。

攻击者通常会通过两种方式实现DNS劫持,一种是直接攻击域名注册商或者域名站点获取控制域名的账户口令,这样可以修改域名对应的IP地址。另外一种方式是攻击权威名称服务器,直接修改区域文件内的资源记录。对于企业和机构客户而言,遭遇DNS劫持是非常严重的问题,它会导致机构失去对域名的控制,一旦攻击实现,机构的站点将不能访问,或者用户可能会访问到伪造的站点。当用户接入如支付宝,银行等合法站点时遭遇域名劫持,用户将面临个人账户和敏感信息泄露,财产损失等风险。

DNS劫持的目的让用户访问虚假页面,暴露机密信息,以便进行下一步的窃取行动,比如窃取信息或诱导安装恶意软件。DNS污染只是污染IP地址,目的仅仅只是不让用户访问正常的网站。这两者都是通过修改DNS解析的IP地址而实现的。

DNS抢答

所谓DNS抢答,顾名思义,就是在用户查询的DNS服务器还没有回应的情况下,由别的服务器提前将结果发给用户,一般这个解析结果是错误的。

这一招比较狠,比如用户设置的是8.8.8.8 Google的DNS服务器。正常上网过程中,用户发起的DNS请求,都要发送到8.8.8.8来解析。但是,如果中间有一些特殊的设备,监测到了这些DNS请求数据包,然后提前将一个错误的结果发给用户,一般用户电脑都会以第一个收到的应答包的内容为准。

围绕DNS的攻击,不管什么花招,最后都是要改变域名解析的IP地址。

DoT

DoT,DNS over TLS,就是让DNS在TLS上面加密运行。

DoT标准使用853端口,使用TCP进行传输,基本上可以理解为加密版本的普通DNS了。

  DoT
--------
  TLS
--------
  TCP
--------
  IP
--------

DoH

DoH,DNS over HTTPS,即使用安全的HTTPS协议承载DNS,目的是增强用户的安全性和隐私性。通过使用加密的HTTPS连接,第三方将不能再影响或监视解析过程。

  DoH
--------
  HTTP
--------
  TLS
--------
  TCP
--------
  IP
--------

DoT使用固定端口,DoH使用HTTPS通道,这是两者的重要区别。

DoH的强项体现在如下几方面:

  1. 编程接口更简单,这是个很重要的优势,有助于让更多软件切换到 DoH 之上。
  2. 可以利用 HTTP 协议已有的特性,由于 DoH 是基于 HTTPS 之上,可以无缝地支持 Proxy。DoH 可以充分利用 HTTP 2.0 的特性(HTTP/2 在 HTTP/1.1 基础上加了很多功能)。

正是因为 DoH 的这些优势,浏览器厂商对 DoH 的支持更积极。对比一下就可以看出来。DoT 在2016年正式发布 RFC,主流的浏览器没一个支持的。而DoH目前才仅仅是 RFC 草案,Firefox 与 Chrome/Chromium 都开始支持了。

公共DNS Server

以下信息可能已经过期...

Google DNS

这应该可能是最著名的DNS服务器了

地址:8.8.8.8 and 8.8.4.4

IPv6地址:

2001:4860:4860::8888

2001:4860:4860::8844

IBM DNS

据说这个DNS服务器主打是防止恶意网站和钓鱼网站

地址:9.9.9.9

openDNS

openDNS不是一个开源软件项目,而是一个公开的DNS服务,很老牌

地址1:208.67.222.222 and 208.67.220.220

地址2:208.67.222.220 and 208.67.220.222

诺顿 DNS

诺顿是一个做安全的公司,它推出的DNS服务器,主打就是安全

地址1:199.85.126.10 and 199.85.127.10 (安全)

地址2:199.85.126.20 and 199.85.127.20 (安全+成人内容)

地址3:199.85.126.30 and 199.85.127.30 (安全+成人内容+其它)

114 DNS

这款DNS是国内的,访问速度快。

114DNS 为国内首家云安全DNS,114DNS 平台由多个基础电信运营商与南京信风共建共享,但由南京信风提供技术支持以确保服务的优质高效。这是他们的官网:https://www.114dns.com

地址:114.114.114.114 and 114.114.115.115

阿里DNS

阿里公共DNS是阿里巴巴集团推出的DNS递归解析系统,目标是成为国内互联网基础设施的组成部分,面向互联网用户提供“快速”、“稳定”、“智能”的免费DNS递归解析服务。

地址:223.5.5.5 and 223.6.6.6

OneDNS

创立于2013年的DNS服务,比较新,没使用过,不过他们的口号挺吸引人:OneDNS是一个安全、快速、免费的小众DNS服务。通过它,您可以时刻畅享来自云端的恶意网站屏蔽服务,彻底摆脱无良ISP的DNS污染与劫持,同时,横跨南北的高速线路加速您的网络连接。

地址:112.124.47.27 南方首选/北方备用 114.215.126.16 北方首选/南方备用

DNS派

360的合作伙伴,口号:让网上冲浪更加稳定、快速、安全;为家庭拦截钓鱼网站,过滤非法网站,建立一个绿色健康的网上环境;为域名拼写自动纠错,让上网更方便。没使用过,不过看这口号没太大吸引力。 电信:首选地址:101.226.4.6, 备用地址:218.30.118.6 联通:首选地址:123.125.81.6,备用地址:140.207.198.6 移动:首选地址:101.226.4.6, 备用地址:218.30.118.6 铁通:首选地址:101.226.4.6, 备用地址:218.30.118.6

DNSPod Public DNS+

Public DNS+ 是属于腾讯云旗下的公共 DNS 服务。拥有 80 多条国内线路和 4 条海外线路,有 BGP Anycast 技术,也是国内首家支持谷歌 ECS (edns-client-subnet) 协议的公共 DNS 解析服务。它只使用一个 IP,但有三地集群容灾和秒级自动故障切换,在国内大多数地方的测速数据都非常好,值得推荐。

地址:119.29.29.29

百度DNS

百度 DNS 公共解析服务,支持 ipv4 和 ipv6。作为中国最大的搜索引擎,百度拥有一流的基础设施和强大技术实力,国内速度相当快!该服务快速稳定无劫持,智能拦截恶意网站,支持 BGP Anycast 和 ECS 技术。

IPv4 地址:180.76.76.76 IPv6 地址:2400:da00::6666

hosts

系统在进行DNS查询之前,先查hosts文件,如果目标域名在hosts文件中有记录,就不用再走网络查询,直接返回查询结果。

Linux下hosts文件位置:/etc/hosts

本文链接:https://cs.pynote.net/net/202112313/

-- EOF --

-- MORE --