域名是Internet上某一台计算机或计算机组的名称,用于数据传输时标识计算机的电子方位,有时也指地理位置。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。
DNS是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由域名解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,一个IP地址可以有多个域名,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。
域名服务器通常为客户机/服务器模式中的服务器方,它主要有两种形式:
- 主服务器和转发服务器
- 将域名映射为IP地址的过程就称为“域名解析”
通过劫持DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的;具体详情请参考此搜索链接。
综上所述,因此手动修改DNS是能实现防止域名劫持的。
通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,GFW发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器给查询者返回虚假结果。因此也被称为DNS欺骗或叫投毒。由于巨量的IP请求被GFW的DNS污染分别指向各个不同IP让其各项资源快速耗尽,导致正常用户无法访问,致使部分网站屏蔽中国IP而防止这种DDoS攻击。从DNS服务器端投毒,所以手动改了DNS也没用,也有例外情况如下文。
通常情况下无论使用设置在中国大陆的DNS服务还是使用设置在外国的DNS服务,因为解析结果都需要穿过GFW,所以都会被GFW污染。但是仍有一些设置在中国大陆的小型DNS使用dnsmasq+stunnel+sniproxy等技术手段回避GFW的污染或是封IP并提供正常的结果。
Hosts是负责将主机名映射到相应的IP地址的文件,通常用于补充或取代网络中DNS的功能;与DNS不同,计算机的用户可以直接对hosts文件进行控制指定IP访问的网址。
Hosts文件本来是用来提高解析效率的。在进行DNS请求以前,系统会先检查自己的Hosts文件中是否有这个地址映射关系,如果有则调用这个IP地址映射,如果没有再向已知的DNS服务器提出域名解析。也就是说Hosts的请求级别比DNS高。当你的Hosts文件里面有对应的IP时,它就会直接访问那个IP,而不用通过DNS。
所以,当我们直接将SS分享之类的站点IP放入Hosts文件后,就可以跳过DNS的解析这一步直接就行,IP访问不受GFW的DNS污染干扰了,但封IP那就没辙了;如果是CDN 的IP被封的话,则需要站点站长提供主IP地址,也可以说是真实IP添加进hosts即可。