Openwrt路由器DNSCrypt配置&&私人DNSCrypt服务器搭建小记

引言

简单交待一下再折腾的缘由吧:pdnsd好像不喜欢它的工作环境,在我的路由器上经常性的罢工(去年还是以正常状态工作的,今年可能是在抱怨待遇太差吧)。前几天的生活状态就是每天起床,打开instagram或者wikipedia,返回“连接超时”的错误,想到这是GFW的DNS抢答,再打开路由器控制页面启用pdnsd。至于计划任务,嘛,已经设置了每小时启动,却还是有罢工的情况发生。每次手动启用总归不是好方法。另一方面也想尝试一下加密DNS查询,于是折腾了DNSCrypt这个家伙。

首先摘录一段DNSCrypt官网上的介绍:

DNSCrypt is a protocol that authenticates communications between a DNS client and a DNS resolver. It prevents DNS spoofing. It uses cryptographic signatures to verify that responses originate from the chosen DNS resolver and haven’t been tampered with.

Implementations are available for most operating systems, including Linux, OSX, Android, iOS, BSD and Windows.

DNSCrypt is not affiliated with any company or organization, is a documented protocol using highly secure, non-NIST cryptography, and its reference implementations are open source and released under a very liberal license.

Please note that DNSCrypt is not a replacement for a VPN, as it only authenticates DNS traffic, and doesn’t prevent “DNS leaks”, or third-party DNS resolvers from logging your activity.

再丢几篇官方文档:

在此选用的客户端是Openwrt版dnscrypt-proxy,选用的服务端是dnscrypt-wrapper。

配置

“你真的以为我会写配置?” “蛤?不写?信不信我打死你!” “好,我写,我写。”

服务端

其实没什么好说的,官方文档已经说明了一切。

在按照官方文档安装及生成密钥之后(前面数步只要复制黏贴命令+按下回车就行了),启动dnscrypt-wrapper:

唔,稍稍解释一下,resolver-address项设置上游服务器,listen-address项设置dnscrypt-wrapper的工作端口,provider-name项就是给你的服务器设置一个帅气的名称(需要注意的是这个帅气的名称必须以2.dnscrypt-cert.开头,另外域名不存在也无所谓),后两项指定之前步骤中生成的密钥和证书,--daemonize(即-d)参数允许程序(作为守护进程)在后台运行。

如果并不能确定dnscrypt-proxy是否可以和dnscrypt-wrapper建立连接,可以在dnscrypt-wrapper启动命令中添加-VV参数并删去--daemonize参数,这样详细信息会被打印在屏幕上。此外可以使用--logfile=/path/file.log指定日志文件位置

当然以上信息只要运行dnscrypt-wrapper --help就可以得知了

客户端

其一

这里参照Openwrt的官方文档进行配置。

在安装完成之后(注意:请根据路由器的硬件平台和固件版本选择合适的安装方式)

默认文件是以下这个样子:

唔,不去动它也能用,不过既然要使用私人服务器,自然要进行一定的修改。

在末尾参照样例形式输入:

那一大堆X就是填写之前在服务端上生成的公钥。至于DNSSEC validationNamecoin项,只能说请自行谷歌吧。

这样设定之后,/etc/config/dnscrypt-proxy就可以改成这个样子:

以后如果需要使用Public Key Client Authentication功能就可以简单运行如下命令:

当然这是后话了。最后,别忘了

其二

其实上述配置方案可能已经过时,在此仍然予以保留。

上次更新服务器后,在客户端使用了另外一种配置方式,即无视dnscrypt-proxy安装后自带的配置文件,使用bash脚本控制dnscrypt-proxy。

在此先贴出主命令格式:

详细的脚本将会在下一次更新本文(又是不知道猴年马月了)时贴出。

与Dnsmasq联合使用对DNS解析进行分流

同样可以在Openwrt的官方文档上找到所需的信息。

先是将Dnsmasq上游DNS设置为DNSCrypt。只需要在/etc/config/dhcp之中添加

这两行信息,并将option resolvfile行注释掉。

当然还有另外一种方法,就是直接修改/etc/resolv.conf,不过修改这个文件可不是简单的:wq就能解决的了,具体的其实在之前的文章中也提到过:

至于分流问题,则还是:

  1. 修改dnsmasq.conf,在末尾添加conf-dir=/etc/dnsmasq.d
  2. mkdir /etc/dnsmasq.d
  3. 复制这个项目所提供的文件到/etc/dnsmasq.d下,并根据需要进行一定修改
  4. /etc/init.d/dnsmasq restart

结语

我觉得我应该说点什么。

唔,在配置完之后,可以使用dig命令进行检验和调试。

另外,上午配置完后,我兴奋地解锁手机、打开chrome、访问instagram,却发现屏幕上出现了一只小恐龙。

原来我没有打开wifi(orz)。

最后附上一篇文章以便参考(其实就是懒得自己再写一遍):

https://www.logcg.com/archives/981.html

最后的最后,StarCrew好好听啊,好想有个女朋友一起陪我去Bicheno镇或者Wineglass Bay看星空啊_(:з」∠)_

最后的最后的最后,这篇文章是使用markdown写的,markdown还是很方便的!

[player autoplay=”0″]

Leave a Reply

Your email address will not be published. Required fields are marked *