编译安装 dnscrypt-wrapper 搭建防污染 DNS 服务器

众所周知,在我朝局域网当中想要获取国外 DNS 信息,必定会遭到关键字污染。为此,有人想到了使用异常端口,比如5353而不使用 DNS 专用端口53——因为目前 Girl Friend Wall 只污染53;也有人想到了使用 TCP 连接请求,因为 DNS 的应答机制参考 DHCP决定了它会接受第一个返回的响应,后边的会被丢弃,而使用 TCP 则强制接受选定的数据包;甚至有人想到了把那些发污染包的 IP 地址收集起来,然后在客户端处过滤——加入黑名单,这样最终就会收到正确的响应包。

总之,这些都不是什么长久之计,使用 OpenDNS 出品的 dnscrypt 是一个不错的选择,它在 DNS 的基础之上增加了加密的选项,让你的 DNS 请求能够像使用 ssl 一样加密地请求服务器,这样便从根本上杜绝了 DNS 污染问题。

那么问题来了,就算你是用了 dnscrypt,可是服务器 IP 被认证了呢?答案是——这就是最近 dnscrypt 越来越不给力的原因。另外,OpenDNS 虽然捣鼓出了这么个给力的玩意儿,但是他们却没有公开服务端——也就是说你必须使用那有限的几个国外的服务器,速度绝对快不到哪里去。

所以,我朝有大神根据 dnscrypt 的客户端写出了牛逼闪闪的服务端——dnscrypt-wrapper

我们现在可以自己在境外服务器搭建一个 dnscrypt 服务器,本地来连接就好了——你可以选择一个速度比较快的 vps。

教程开始

作为演示,我这里的服务器是 ubuntu 14.04.

编译安装依赖库文件

dnscrypt-wrapper 依赖 libsodiumlibevent2;前者一般源里没有,后者一般默认版本不是2而是比较旧的1,我们得先来手动编译这两个库。

我们从这里下载 libsodium 的最新版本 ,截止到本文完成时,最新版本为1.0.2 1.0.10:

然后我们从这里下载 libevent2 ,这里我们选择 2.0.22 稳定版:

编译 dnscrypt-wrapper

搞定两个依赖库之后,就可以开始编译 dnscrypt-wrapper 啦:

如果你在 make configure 这一步出错,你可能需要先安装 autoconfig:

如果没什么问题,那么就可以开始编译安装了:

至此编译完成。

dnscrypt-wrapper 的配置和使用

这里系统会反馈一个指纹信息,这个信息就是客户端配置时候需要的“provider_public_key”!所以一定要保存好。

类似这个样子:

然后,我们使用命令生成有时限的加密密钥对以及生成预签名证书:

这样,dnscrypt-wrapper 就已经准备好了。

使用命令来运行 dnscrypt-wrapper,用“-VV”来显示比较详细的 debug 信息:

其中的 --provider-name= 并不必要,可以随便填写,但注意必须是以 2.dnscrypt-cert. 开头:)

然后去国内 vps 安装客户端:

安装好后配置一下:

保存后使用如下命令重启客户端服务,如果你的端口没有被防火墙撸掉,那服务器那边就应该能够看到 debug 信息,表示已经有客户端接入。

使用命令来测试一下:

多次重复命令,发现获取到的 IP 均相同且为真正的正确 IP 地址,服务生效。

创建脚本

每次直接运行命令多少有些不方便,即使使用“-d”来后台执行,一样让人感到不适,我们使用 shell 来创建一个启动 dnscrypt-wrapper 的脚本。

以后则只需要使用 sh start-dnscrypt-wrapper.sh 就可以启动了。

——至于关闭嘛,使用命令“killall dnscrypt-wrapper”。

延伸阅读:

https://github.com/Cofyc/dnscrypt-wrapper

http://03k.org/dnscrypt-wrapper-usage.html

本文由 落格博客 原创撰写:落格博客 » 编译安装 dnscrypt-wrapper 搭建防污染 DNS 服务器

转载请保留出处和原文链接:https://www.logcg.com/archives/981.html

About the Author

R0uter

如非声明,本人所著文章均为原创手打,转载请注明本页面链接和我的名字。

Comments

    1. 确实需要一台国内的vps来作为 DNS 53 端口服务器,我这里主要是为了给任意设备使用(尤其是移动端),如果你仅在自己一台电脑上使用,那么就在本地起客户端然后设置DNS地址为回环即可。实际上你可参考我最新的文章,DoT DoH 除了 DNSCrypt,你还可以了解一下更好的 DNS 加密方案 这些都是不错的 DNS 解决方案,都可以按照本文架构实现任意设备使用DNS(或者根据你的需要,在本地计算机直接起客户端,方便快捷~)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注