域名解析

什么是域名解析?
因特网中用来将主机名映射到主机地址的过程。
为什么要做域名解析?

名称相对于地址更容易记忆。
如何做域名解析?

域名解析过程有这么几个关键节点:
浏览器->本地host->本地域名服务器->根域名服务->顶级域名服务器->权威域名服务器

  1. 浏览器首先检查自己有没有缓存,如果有直接使用,如果没有再查找本地host;
  2. 如果本地host有对应的映射,则直接使用,如果没有则让本地域名服务器帮助解析
  3. 本地域名服务器如果有缓存会直接返回缓存,如果没有,则开始发起请求,首先请求根域名服务器获取顶级域名服务器的地址
  4. 然后本地域名服务器会向顶级域名服务器发起请求,顶级域名服务器会返回权威域名服务器地址
  5. 然后本地域名服务器会向权威域名服务器发起请求,得到最终的ip,然后返回给浏览器

负责请求和缓存的:浏览器、host文件、本地域名服务器(可能是路由也可能是运营商在维护),真正发起请求的是本地域名服务器。
负责解析的:根域名服务器、顶级域名服务器、权威域名服务器。

概念解释:
本地域名服务器

本地DNS一般是指你电脑上网时IPv4或者IPv6设置中填写的那个DNS。这个有可能是手工指定的或者是DHCP自动分配的。
如果你的电脑是直连运营商网络,一般默认设置情况下DNS为DHCP分配到的运营商的服务器地址。如果你的电脑和运营商之间还加了无线或者有线路由,那极有可能路由器本身还内置了一个DNS转发器,这玩意的作用是将发往他所有的DNS请求转发到上层DNS。此时由于路由器本身也接管了下挂电脑的DHCP服务,所以它分配给下面电脑的DNS地址就是它自身,所以你能看到电脑的DNS分配到的可能是192.168.1.1。实际上就是路由器自身,而路由器的DNS转发器将请求转发到上层ISP的DNS。所以这里说DNS是局域网或者是运营商的都可以(最终都是转发到运营商)。

ISP:internet service provider,互联网服务提供商,通常有联通、移动、电信、铁通

根域名服务器和顶级域名服务器
DNS是一个分布式的域名解析系统,根域名服务器负责管理顶级域名服务器
根域名服务器有13个ip地址,DNS是一个分布式的域名解析系统,根域名服务器负责管理顶级域名服务器

有两种划分方式,一种互联网刚兴起时的按照行业性质划分的com.,net.等,一种是按国家划分的如cn.,jp.,等。
根域名服务器有13个ip,DNS是一个分布式的域名解析系统,根域名服务器负责当DNS解析请求访问到根域名服务器,根域名服务器会根据待解析域名的顶级域名返回顶级域名服务器地址。

顶级域名有两种划分方式,一种互联网刚兴起时的按照行业性质划分的com.,net.等,一种是按国家划分的如cn.,jp.,等。

权威域名服务器
权威域名服务器是域名服务商提供的域名解析服务,你在域名服务商购买域名后,域名服务商会根据你的后台设置进行域名解析。

域名解析配置

使用域名的过程

购买

域名解析配置:在后台配置a记录、cname记录等不同类型的记录,配置好后,是域名服务商提供的域名解析服务,这个域名解析服务器就是权威域名服务器。

服务器配置,一个域名最多只能指向一个ip,但一个ip可以让多个域名解析到。所以服务器可能需要配置哪个域名对应哪个服务。

DNS 记录的类型非常多,有 30 多种。其中比较常见的有 A、AAAA、CNAME、MX,以及 NS 等

A(address)记录,用来配置域名的地址映射

AAAA用来配置IPv6的地址

MX(Mail Exchange)用来配置邮件地址。比如请求是xiaoming@163.com,则会把后缀是@163.com的请求都解析到指定的地址,地址可以是一个ip,也可以是一个有效的域名(例如mail.163.com)

NS(Name Server)

NS配置一个DNS域名服务器,指定用来解析该域名的DNS服务器地址,当权威域名服务器解析到某个域名配置了NS,则会再到NS指定的DNS服务器地址对域名进行解析。这个指定的DNS服务器通常是一个智能DNS地址,可以提供负载均衡等服务。

NS优先级高于A记录,如果权威域名服务器发现NS记录则会忽略A记录。

一般会设置多个NS记录以保证高可用,数字小的NS记录优先级更高。

CName(Canonical Name Record)

配置域名别名,访问该域名时候会查找CName指定的域名的ip。

配置因为走的是 DNS 查询的路径,速度很快(因为有缓存),不需要 HTTP 重定向等操作。(但是http重定向对SEO更友好)

当你想把一个网站迁移到新域名,旧域名仍然保留的时候;还有当你想将自己的静态资源放到 CDN 上的时候,CNAME 就非常有用。

DNS解析步骤

https://www.zhihu.com/question/23042131

DNS解析以主机输入域名开始,以主机获取到域名对应的IP地址结束。主机指的是输入域名的浏览器对应的PC,(这里忽略浏览器与主机的交互细节)。其中一个重要的角色是本地域名服务器,在域名解析的过程中,相当于主机将域名解析的任务托管给了本地域名服务器:主机告诉本地域名服务器,给我查询“http://_**.**_**.***的IP”,然后本地域名服务器进行域名查询,将结果(IP或者查询失败)返回给主机。那么我们关心的就是本地域名服务器如何进行域名解析。这里需要了解的概念是域名解析系统,它包括一系列的域名解析服务器(详情见[DNS原理总结及解析过程详解](http://blog.csdn.net/yipiankongbai/article/details/25031461))。包括根域名服务器(根域名服务器知道左右顶级域名服务器的IP地址),顶级域名服务器(知道所有权限域名服务器的地址),和权限域名服务器地址(存有注册过的域名与IP映射)。进行域名解析时,本地域名服务器首先向根域名服务器发请求查询 被访问域名解析所在的顶级域名服务器地址,然后根据这个地址访问相应的顶级域名服务器,查询相应的权限域名服务器地址,然后访问这个权限域名服务器,查到域名对应的IP地址。最终本地服务器把获取到的IP地址结果返回给主机,DNS解析完成。

基于上述讨论,域名解析过程(从主机输入域名到主机获取IP地址)一共有8步:

1).主机告诉本地域名服务器域名

2).本地域名服务器向根域名服务器发出请求

3).根域名服务器告诉本地域名服务器,域名所在的顶级域名服务器IP地址

4).本地域名服务器向顶级域名服务器发起请求

5).顶级域名服务器告诉本地域名服务器,域名所在的权限域名服务器

6).本地域名服务器向权限域名服务器发起请求

7).权限域名服务器告诉本地域名服务器,域名对应的IP

8).本地域名服务器将获取的IP返回给主机

域名解析缓存

域名解析缓存的技术用来减少查询请求次数。

域名解析缓存包括域名解析服务器缓存(包括本地域名服务器)缓存和主机DNS缓存。域名解析服务器会缓存查询过的域名(当然会设置过期时间),当一个域名解析请求过来时,如果在缓存中,则不必迭代地让请求服务器向下一级域名服务器发起请求,直接告知其结果即可。除了域名解析服务器,主机也会有域名映射缓存的机制。

值得指出的是,本地域名服务器发起DNS请求之前,会先查询本机的hosts文件,如果文件中已经有相应的域名映射,则不必再去查询DNS解析服务器了。因此本地的hosts文件有很多作用,比如加快域名解析、方便局域网访问、屏蔽恶意网站(参见本地hosts有哪些作用)。

http-dns

HTTPDNS是使用HTTP协议向DNS服务器的进行请求,代替传统的DNS协议使用UDP协议向DNS服务器的进行请求,绕开了运营商的Local DNS,简化了请求的复杂性,避免了使用运营商Local DNS造成的劫持和跨网问题。

httpdns服务商支持用户使用ip访问他们的服务,将域名作为参数,请求会返回域名对应的ip

DNS劫持

DNS劫持,也称为域名劫持或DNS重定向,是一种网络攻击手段,攻击者通过技术手段篡改正确域名和IP地址之间的映射关系,使得用户在访问某个网站时被重定向到攻击者控制的服务器。这种攻击的目的多样,可能包括:

DNS劫持的目的

  1. 欺诈和广告:在用户访问的页面上显示额外的广告内容,以赚取广告收入。
  2. 网络钓鱼:创建假冒的网站,诱使用户输入敏感信息,如用户名、密码或信用卡信息。
  3. 数据窃取:通过重定向用户到恶意网站,窃取用户的个人信息或数字资产。

DNS劫持的手段

  1. 本地DNS劫持:通过木马病毒或恶意软件篡改用户的DNS设置,或者利用路由器漏洞修改路由器的DNS配置。
  2. DNS解析路径劫持:在DNS查询过程中,通过技术手段(如中间人攻击)将DNS流量重定向到攻击者的DNS服务器。
  3. 篡改DNS权威记录:攻击者非法入侵DNS权威记录管理账号,直接修改DNS记录,将域名解析到恶意服务器。

DNS劫持防御

  1. 安全软件:安装和更新杀毒软件,防止病毒和恶意软件篡改DNS设置。
  2. 路由器安全:定期更新路由器固件,修改默认或弱密码,以防止未经授权的访问。
  3. DNSSEC:使用DNS安全扩展(DNSSEC)技术,为域名提供额外的安全层,确保DNS数据的完整性和真实性。
  4. DNS加密:使用DNS-over-TLS或DNS-over-HTTPS等技术,对DNS查询和响应进行加密,防止中间人攻击。
  5. 监控和检测:定期检查DNS解析结果,使用工具如阿里云的DNS域名检测工具来检测潜在的DNS劫持行为。

通过上述措施,可以有效提高网络环境的安全性,减少DNS劫持的风险。

DNS劫持排查

排查DNS劫持可以通过以下几个步骤进行:

  1. 检查DNS解析结果
    • 使用命令行工具(如Windows的cmd或Mac/Linux的terminal)输入nslookup命令,后面跟上你想要检查的域名。这将显示该域名解析到的IP地址。
    • 然后,你可以更换DNS服务器,例如使用Google的公共DNS(8.8.8.8)或Cloudflare的DNS(1.1.1.1),再次执行nslookup命令,看看解析结果是否一致。
  2. 使用不同的网络连接
    • 在不同的网络环境下(例如使用移动数据或切换到另一个Wi-Fi网络)重复上述步骤,如果解析结果在不同网络下不一致,可能存在DNS劫持。
  3. 检查路由器设置
    • 登录到你的路由器管理界面,查看DNS设置是否被更改。如果发现DNS服务器地址被设置为未知或可疑的地址,这可能是DNS劫持的迹象。
  4. 清除DNS缓存
    • 在Windows系统中,可以使用命令ipconfig /flushdns来清除DNS缓存。在MacOS中,可以使用sudo killall -HUP mDNSResponder命令。清除缓存后,重新检查DNS解析结果。
  5. 使用安全软件
    • 运行安全软件进行全面扫描,检查是否有恶意软件或病毒可能篡改了DNS设置。
  6. 咨询ISP
    • 如果以上步骤都无法解决问题,可以联系你的互联网服务提供商(ISP),询问是否有已知的DNS问题或服务中断。

通过这些步骤,你可以排查是否存在DNS劫持的情况。如果确认存在劫持,应采取相应措施,如更改DNS服务器地址、重置路由器设置或联系ISP寻求帮助。