DNS相关知识个人整理(DNS劫持及解决方案)
本文于2021年1月7日由AlvinCR更新
文章导引
1 基础知识:
1 基础常识
1.1 DNS
DNS就像是一个电话本,服务器相当于管理人员,当你要打电话给alvincr.com的时候,你需要向管理人员(服务器)要我的电话号码(IP地址),而你提供的消息是我要找alvincr.com这个人(域名),服务器将根据域名告诉你alvincr.com的IP地址
DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。
——来自百度百科
1.2 常见数据类型
DNS数据库中存储的最常见记录类型包括:授权开始(SOA),IP地址(A和AAAA),SMTP 邮件交换器(MX),名称服务器(NS),反向DNS查找(PTR)的指针,和域名别名(CNAME)。
——翻译自wiki百科
附:
SOA-:一个规范记录的开始(简称SOA记录)是一类的资源记录在域名系统包含有关区行政信息,尤其是关于(DNS)区域传送。
A地址:返回一个32位的IPv4地址,最常用于将主机名映射到主机的IP地址。
AAAA地址:返回一个128位的IPv6地址,最常用于将主机名映射到主机的IP地址。
反向PTR指针:反向DNS查找或反向DNS解析(rDNS)是域名系统(DNS)的查询技术,用于确定与IP地址关联的域名–与通常的“正向” DNS查找反向域名的IP地址,通过此方法可用于尝试识别发起者的域名以进行跟踪。(我对反向PTR指针蛮感兴趣的,下次想起来的话单独查找相关资料写篇文章)
CNAME:可以将一个域名(别名)映射到另一个(规范名称)的域名系统(DNS)资源记录,比如我想将en.alvincr.com映射到alvincr.com,那么我就可以设置CNAME转换到alvincr.com,但是CNAME记录必须始终指向另一个域名,永远不要直接指向IP地址。
1.3 域名类型
国际顶级域名iTDs(international top-level domain-names):这是使用最早也最广泛的域名。例如表示工商企业的 .com .top,表示网络提供商的.net,表示非盈利组织的.org等。
国内顶级域名nTLDs(national top-level domainnames):中国使用cn,美国使用us,日本使用jp。
个人:至于为什么两者英文都有top-level,两者缩写一个包含L一个不包含我也不明白…..,谷歌搜索iTDs和iTLDS都没有关于名称缩写的相关内容,个人就当iTDs写错了,我默认写成iTLDs。
谷歌原文也没出现这种缩写
As of 2015, IANA distinguishes the following groups of top-level domains:[13]
- infrastructure top-level domain (ARPA): This group consists of one domain, the Address and Routing Parameter Area. It is managed by IANA on behalf of the Internet Engineering Task Force for various purposes specified in the Request for Comments publications.
- generic top-level domains (gTLD): Top-level domains with three or more characters
- restricted generic top-level domains (grTLD): These domains are managed under official ICANN accredited registrars.
- sponsored top-level domains (sTLD): These domains are proposed and sponsored by private agencies or organizations that establish and enforce rules restricting the eligibility to use the TLD. Use is based on community theme concepts; these domains are managed under official ICANN accredited registrars.
- country-code top-level domains (ccTLD): Two-letter domains established for countries or territories. With some historical exceptions, the code for any territory is the same as its two-letter ISO 3166 code.
- internationalized country code top-level domains (IDN ccTLD): ccTLDs in non-Latin character sets (e.g., Arabic, Cyrillic, Hebrew, or Chinese).
- test top-level domains (tTLD): These domains were installed under .test for testing purposes in the IDN development process; these domains are not present in the root zone.
1.4 解析需知
完成一次解析之后解析的记录会自动存在你的计算机中,下次再进行访问的时候将不再请求域名服务器,因此会出现你在一台设备能够访问网站,而在另一台没有访问过该站点的设备上却无法访问的情况,出现这种情况的原因有很多,比如本文的DNS劫持。
也可以直接修改host文件,找到“C:\Windows\System32\drivers\etc\hosts”,格式:
IP地址 主机或者域名 [主机的别名] [主机的别名]….
例如昨天我的网站被劫持了,但是可以通过添加 103.79.78.40 alvincr.com 解析到我的网站,但是如果我更换IP地址的话,这样设置会使解析出现问题。例如我更换为111.111.111.111,但是你设置默认解析alvincr.com为103.79.78.40,你再次访问的时候会连接到103.79.78.40这个服务器,导致无法访问我的网站。
2 DNS劫持和HTTP劫持有什么区别?
两者都是运营商比较常见的恶作剧,
DNS劫持:输入alvincr.com,结果跳转域名为:baidu.com。
HTTP劫持:输入alvincr.com,结果进入主页发现右下角被莫名添加贪玩蓝月的广告。
DNS劫持
正常DNS解析的流程是用户走localdns,通过运营商提供的递归DNS进行域名解析。而DNS劫持一般发生在LDNS(递归dns)这一层。
DNS劫持有这三种情况:
1.错误域名解析到纠错导航页面,导航页面存在广告;
2.错误域名解析到非正常页面 ;
3.直接将特点站点解析到恶意或者广告页面 。
HTTP劫持
HTTP劫持是指在传输过程中,劫持方伪装成目的服务器抢先给出了响应,使得客户端接受了劫持的响应而抛弃了正确的响应,就是先下手为强,后下手遭殃。甚至有时候劫持方会完全拦截用户的请求,目的服务器没有接受到任何请求。
在HTTP劫持中,3XX跳转,JS内容篡改以及html内容篡改都可能会发生。目前看3XX跳转和JS内容篡改比较常见。
劫持方想要达成的目的是默默的赚钱,因此这就决定了劫持方不可能猖獗到劫持整个域名的http请求。一般是通过过滤识别http请求的特征码来判断是否要进行劫持。
原文:https://blog.csdn.net/weixin_48720927/article/details/107867666
2 个人快速解决方法:
对于站点而言:使用CDN加速服务,通过代理的方式绕过DNS劫持
对于个人而言:使用代理服务绕过被劫持的IP段。
3 其它解决方法:
DNS这个环节可以被太多因素影响,所以不少利益相关者都会在这里面做手脚。例如,DNS劫持就是非常常见的广告投放手段,你打开百度或者输入你正确的目标域名网址,整个网页却被强制跳转到XX娱乐城,这就是典型的DNS劫持。
在整个上网的流程中,DNS这环节无疑是脆弱而且不受用户控制的。DNS劫持由于通常发生在为大家提供上网的网络运营商的公共DNS服务器,因此普通用户很难进行处理也无法进行有效预防,因此就造成当访问的目标网站被劫持的时候会跳转到其他地址的情况。
要对付运营商的DNS劫持,设置一个可靠的DNS服务器往往就可以解决问题。然而,很多朋友在设置了可靠的DNS服务器后,仍然不能解析到正确的IP地址,例如某个网站的IP地址明明是可以Ping通的,但就是无法访问。
这部分网站无法访问的原因是网站域名解析错误,而这就存在这几种可能:一是黑客攻击国外根服务器造成国内服务器域名解析遭到污染;二是由于数据传输过程中网络节点较多,节点也可能成为攻击目标;三是黑客在攻击单个网站的时候,因为节点较多,导致节点污染从而影响了全网。而上述这种情况,通常是DNS污染所导致的。
针对DNS劫持,目前唯一比较有效的办法就是加速运营商DNS缓存记录获取刷新的时间及数据,保障获取结果的准确性。
如果是APP应用被劫持了,还可以选择启用HTTPDNS,将域名解析的协议由DNS协议换成了HTTP协议,获取域名解析结果,绕过运营商的Local DNS,用户解析域名的请求通过Http协议直接透传到了HTTPDNS服务器IP上,更精准地判断客户端的地区和运营商,得到更精准的解析结果,用户在客户端的域名解析请求将不会遭受到域名解析被劫持的困扰,避免域名劫持。HTTPDNS对外提供完善的API接口,移动的APP可直接调用该接口解析域名,也支持在服务端调用的场景
(传统递归DNS解析与HTTPDNS解析)
现在DNS的机制显然在设计之初没有充分考虑到安全性,导致别有用心者频频利用这一环节影响用户的正常网络访问。DNS频频被劫持的现状无法绝对杜绝,但却可以改善,从DNS服务商的强大节点资源和DNS解析技术完善,给用户更好的上网体验。
摘录原文:https://www.dns.com/supports/675.html