声明
- (2020.03.24 注) 原文写于 2016 年,可能已不适用于现时的网络环境,但原理是相通的,有兴趣的读者可以自行发掘。本人现时已不再使用文中所述的方案,同时亦不再作推荐使用,所以文中相关的问题可能无法解答。敬请谅解。
- 本文基于 Unbound+DNSCrypt双保险防DNS污染及劫持 与 https://github.com/CNMan/unbound.conf 修改而来,感谢原作者。
- 本文实际操作平台为
Windows
,经试验,本文所用配置文件稍作修改即可运用在 Linux 上
所需工具
DNSCrypt 是 OpenDNS 发布的加密 DNS 工具,可加密 DNS 流量,阻止常见的 DNS 攻击,如重放攻击、观察攻击、时序攻击、中间人攻击和解析伪造攻击。
Unbound 是一款带验证的(validating)、递归(recursive)及具有查询结果缓存(caching) 的 DNS 解析器(resolver).
NirCmd 是一个可以让你的批处理摆脱黑漆漆命令行界面的小工具
(NirCmd is a small command-line utility that allows you to do some useful tasks without displaying any user interface.)
流程分析
我们借用一个简洁易懂流程图来解释一下这个递归 DNS 的工作流程
将 Unbound 和 DNSCrypt 组合使用的原因有以下几个:
- Unbound 不支持加密查询,但 DNSCrypt 支持
- DNSCrypt 不支持缓存已查询结果,而 Unbound 支持
- Unbound 还支持自定义解析结果,替代 hosts 、屏蔽广告域名、恶意软件域名等更多功能,相对 hosts 来说更为灵活
- 国内域名由国内 DNS 解析,国外域名由 DNSCrypt 向 OpenDNS 解析,既防污染又不影响 CDN
简而言之,如图所示,这套方案就是使用 DNSCrypt 作为 Unbound 默认的上游服务器,而 DNSCrypt 又以 OpenDNS 为上游服务器作加密的 TCP DNS 查询。
使用方法
- 下载 DNSCrypt、Unbound、NirCmd 32-bit 或 NirCmd 64-bit
- 解压
dnscrypt-proxy-win32-full-1.6.1.zip
到C:\Program Files\DNSCrypt\
解压unbound-1.5.7.zip
到C:\Program Files\unbound\
解压nircmd.zip
或nircmd-x64.zip
到C:\Windows\System32\
- 下载配置文件并解压到
C:\Program Files\unbound
- 根据实际情况修改
localdns.cmd
和unbound/unbound.conf
中的相关路径 - 运行
localdns.cmd
- 把本地 DNS 设置为 127.0.0.1,如图所示
- (可选)将
localdns.cmd
放到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\
即可实现开机自启动
一些需要说明的事
- 常用 hosts 域名配置在
unbound.local-zone.hosts.conf
广告域名和恶意软件域名配置在unbound.local-zone.block.conf
- 国内域名默认由 DNSPod Public DNS 和 114DNS 解析,配置在
unbound.forward-zone.China.conf
,其他域名则由监听在 9999 端口的 DNSCrypt 解析 - 修改 Unbound 配置文件后,请先检查配置是否正确,再重启 Unbound 并刷新 DNS 解析缓存。详细方法如下
cd /d "E:\Program Files\unbound\" //切换到你的 Unbound 所在目录 unbound-checkconf unbound.conf //若配置通过,则提示 no errors in unbound.conf unbound-control -c unbound.conf reload ipconfig /flushdns
致谢
- hosts 域名列表取自 https://github.com/racaljk/hosts
- 广告域名列表取自 http://pgl.yoyo.org/adservers/serverlist.php?showintro=0
- 恶意软件域名列表取自 http://www.malware-domains.com/files/immortal_domains.zip
- 国内域名列表取自 dnsmasq-china-list,如果你有其他国内域名需要添加,请直接向
dnsmasq-china-list
项目反馈
https://kirito.me/default/memo-for-installing-arch-linux.html
配置文件没了,能不能再分享一下
配置好了,怎么知道软件起作用了呢
我安装你的做法并研究原理,实践之后还是无法翻墙,求指教。
你好,这篇文章只是解决了 DNS 查询结果被污染的问题,跟 fq 其实没什么关系。另外就是,文章里的外链大多已经被 archived 或者 404 了,现在不推荐使用这种方法了,建议你试试 DNS over TLS 或者 DNS over HTTPS。