阅读前注意
该文章是为旧项目编写的文档,其中的信息已经过时,仅为存档保留。

dnscrypt可谓是防DNS污染的神器,是opendns官方的客户端工具,用于加密dns传输,有点类似http和https的区别。服务端和客户端都使用密钥进行传输,是所有抗DNS污染里面最强的手段了。然而国内的网络状况并不理想,很多时候连不上opendns(你懂的),或者我们搭建代理的时候想使用远程vps当地的dns解析结果来加速被wall网站的访问,这个时候想到能不能自己搭建一个dnscrypt的服务端呢?找了一圈,发现opendns官方并没有提供服务端源码╮(╯▽╰)╭…… 不过在这个神奇的国度,总不缺乏大神,在v2ex上找到了@Cofyc 大神的自己写的dnscry-wrapper服务端,以下是原文:

[dnscrypt]写了一个 dnscrypt 的服务器端代理 dnscrypt-wrapper
https://github.com/Cofyc/dnscrypt-wrapper
dnscrypt 是 opendns.com 设计的给 dns 协议加密的协议,类似 ssl 与 http 的关系。
opendns 有实现一个客户端代理 dnscrypt-proxy,但目前以我所知只有 opendns 的 dns 服务器上有实现 dnscrypt 协议。
dnscrypt-wrapper 是从 dnscrypt-proxy 修改而来,给任意 dns server 在服务端增加 dnscrypt 加密支持。
适合想使用 dnscrypt 但想自架 dns 服务器的情形。
我在自己服务器上有架设一个测试 dns,可以使用以下命令测试:
$ sudo ./dnscrypt-proxy -a 127.0.0.1:55 –provider-name=2.dnscrypt-cert.yechengfu.com -r 106.187.34.45:53 – provider-key=4298:5F65:C295:DFAE:2BFB:20AD:5C47:F565:78EB:2404:EF83:198C:85DB:68F1:3E33:E952
$ dig -p 55 google.com @127.0.0.1
参考:
http://dnscrypt.org/
dnscrypt-proxy https://github.com/opendns/dnscrypt-proxy
http://www.opendns.com/technology/dnscrypt/

嗯,于是我兴冲冲地跑去下载编译了,过程中遇到不少问题,折腾了两小时,原作者也比较热心解决我的问题,现在我把编译过程(CentOS x86)分享下,希望对你有帮助:

1
yum update

更新软件源。

1
2
yum -y install autoconf gettext libltdl* libevent git libsodium libevent* libtool-ltdl-devel
yum -y groupinstall 'Development Tools'

如果你是debian/ubuntu用户,可以尝试运行

1
apt-get install libsodium*

libsodium这个库低版本centos可能没有……于是自己下载编译:

下载地址http://download.libsodium.org/libsodium/releases/

我选择的是当前最新的libsodium(下载可能会卡,毕竟服务器在国外):

1
2
3
4
cd ~
wget https://download.libsodium.org/libsodium/releases/LATEST.tar.gz
tar xf LATEST.tar.gz
cd libsodium*

解压好就进去编译安装:

1
2
3
4
5
6
CFLAGS="-O3 -fPIC" ./configure
./autogen.sh
./configure
make
make install
ldconfig

至此libsodium安装完毕。

我用最新的ubuntu百衲衣似乎没什么问题,centos软件源上的libevent也不是最新的,而服务端要求2.0以上的版本,软件源提供的是1.4版本,因此导致编译出错。二话不说跑去官网下载源码编译:

下载地址:http://libevent.org/

我选择的是当前最新的稳定版本:

release-2.1.6-beta

2016.08.27

下载解压:

1
2
3
4
~
https://codeload.github.com/libevent/libevent/zip/release-2.1.6-beta
unzip release*
cd libevent*

编译安装:

1
2
3
4
5
6
7
./configure --prefix=/usr
./autogen.sh
./configure
make 
make install
echo /usr/local/lib > /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig

至此libevent安装完毕。


现在可以下载dnscrypt-wrapper源码来编译了:

1
2
3
4
5
cd ~
git clone --recursive git://github.com/Cofyc/dnscrypt-wrapper.git
cd dnscrypt-wrapper
make configure
./configure

如果执行./configure有出现错误,请根据错误信息找原因,基本上库完整的话没什么问题。有问题欢迎留言。./configure检查通过的话,我们就可以直接执行make命令来编译了。最后生成dnscrypt-wrapper可执行文件。

[root@centos dnscrypt-wrapper]# make install

install -d -m 755 ;/usr/local/bin;

install -p dnscrypt-wrapper ;/usr/local/bin;

附录

DNSCRYPT-WRAPPER的使用方法