使用dnscrypt-proxy搭建无污染的dns服务
DNS劫持与DNS污染
ISP域名劫持
中国大陆的互联网服务提供商经常劫持部分域名,转到自己指定的网站,以提供自己的广告,污染方式为劫持域名不存在时返回的NXDOMAIN记录(Non-existent domain)返回自己服务器的ip,从而跳转至自己的服务器上显示广告等内容。
由于通常的域名查询没有任何认证机制,而且域名查询通常基于无连接不可靠的UDP协议,查询者只能接受最先到达的格式正确结果,并丢弃之后的结果,所以容易伪造。
引用知户https://www.zhihu.com/question/55097471/answer/149283034
DNS劫持:DNS查询一般是建立在传输层UDP协议的基础上的,特点是速度快,但是不可靠。首先你不得不承认国内互联网存在一股黑暗势力(黑客或者不可描述)。你设置了国外递归DNS。1、你想要访问 http://baidu.com 黑暗势力看见了,http://baidu.com 跟他关系不错,他睁一只眼闭一只眼,什么都不做,任由国外DNS服务器把 http://baidu.com 的真实地址返回给你。2、如果你想要访问 http://google.com 黑暗势力就不干了,虽然国外DNS服务器把 http://google.com 的真实IP地址返回给你了,但是黑暗势力立马把这条消息拦截了下来,并且伪造了一个假的IP地址给你。因为UDP不可靠,先到先得,你收到了黑暗势力给你的假IP。电脑前的你依然大呼烫烫烫。
如何解决
使用DNSCrypt协议,它是加密了的DNS协议,协议格式见https://github.com/jedisct1/dnscrypt-proxy/blob/master/DNSCRYPT-V2-PROTOCOL.txt
有很多的DNS服务器都支持这种协议,列表。
实践安装配置dnscrypt-proxy
以在windows的环境下为例
下载
https://download.dnscrypt.org/dnscrypt-proxy/
当然这个地址好像被屏蔽了
测试当前配置
进入文件目录,运行
1 |
|
没有出现53端口被点用的情况就正常
把 DNSCrypt proxy 做为一个持久服务
运行这个的时候,是要有管理员权限运行的。
否则会出现下面的错误:
[ERROR] Unable to set up registry keys for the config file
[ERROR] Unable to install the service
[ERROR] Make sure that you are using an elevated command prompt and that the service hasn’t been already installed
我的做法是把运行命令保存为bat文件
再点右键,选以管理员身份运行
1 |
|
卸载服务
也是需要管理员权限
1 |
|
共享本地的DNS代理
修改配置文件dnscrypt-proxy.conf
把里面# LocalAddress 127.0.0.1:53
的这段,修改为LocalAddress 0.0.0.0:53
在别的设备上设置dns的地址为共享机器的ip即可。
验证
修改本地的dns服务器地址为自己部署的地址。
使用nslooup 去查,会到得到是从哪个服务器返回的数据
比如使用默认的dns服务器
1 |
|