服务器版本:ubuntu 14.04 64位
服务器地址法国
编译安装依赖库文件:
dnscrypt-wrapper 依赖 libsodium 和 libevent2;前者一般源里没有,后者一般默认版本不是2而是比较旧的1,我们得先来手动编译这两个库。
我们从这里下载 libsodium 的最新版本 ,截止到本文完成时,最新版本为1.0.2 1.0.10
cd ~ wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.10.tar.gz tar xf libsodium-1.0.10.tar.gz cd libsodium-1.0.10 CFLAGS="-O3 -fPIC" ./configure make make install ldconfig
然后我们从这里下载 libevent2 ,这里我们选择 2.0.22 稳定版:
cd ~ wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz tar xf libevent-2.0.22-stable.tar.gz cd libevent-2.0.22-stable ./configure --prefix=/usr make make install echo /usr/local/lib > /etc/ld.so.conf.d/usr_local_lib.conf ldconfig
编译 dnscrypt-wrapper
搞定两个依赖库之后,就可以开始编译 dnscrypt-wrapper 啦:
apt-get update && apt-get upgrade apt-get install git cd ~ git clone --recursive git://github.com/Cofyc/dnscrypt-wrapper.git cd dnscrypt-wrapper make configure ./configure
如果你在 make configure 这一步出错,你可能需要先安装 autoconfig:
apt-get install autoconfig
如果没什么问题,那么就可以开始编译安装了:
make make install //安装完成会出现如下提示: # make install install -d -m 755 ‘/usr/local/bin’ install -p dnscrypt-wrapper ‘/usr/local/bin’
至此编译完成。
dnscrypt-wrapper 的配置和使用
cd ~ mkdir dnskey //新建一个目录来存放证书 cd dnskey dnscrypt-wrapper --gen-provider-keypair //生成提供商密钥对
这里系统会反馈一个指纹信息,这个信息就是客户端配置时候需要的“provider_public_key”!所以一定要保存好。
类似这个样子:
4298:5F65:C295:DFAE:2BFB:20AD:5C47:F565:78EB:2404:EF83:198C:85DB:68F1:3E33:E952
然后,我们使用命令生成有时限的加密密钥对以及生成预签名证书:
dnscrypt-wrapper --gen-crypt-keypair --crypt-secretkey-file=1.key dnscrypt-wrapper --gen-cert-file --crypt-secretkey-file=1.key --provider-cert-file=1.cert
这样,dnscrypt-wrapper 就已经准备好了。
使用命令来运行 dnscrypt-wrapper,用“-VV”来显示比较详细的 debug 信息:
cd ~/dnskey dnscrypt-wrapper --resolver-address=114.114.114.114:53 --listen-address=0.0.0.0:443 \ --provider-name=2.dnscrypt-cert.logcg.com \ --crypt-secretkey-file=1.key --provider-cert-file=1.cert -VV
其中的 --provider-name= 并不必要,可以随便填写,但注意必须是以 2.dnscrypt-cert. 开头:)
然后去国内 vps 安装客户端:
apt-get install python-software-properties add-apt-repository ppa:anton+/dnscrypt //安装 dnscrypt 客户端的 ppa apt-get update apt-get install dnscrypt-proxy
安装好后配置一下:
vi /etc/default/dnscrypt-proxy #要修改的就只有如下几处,其他注释和配置已略去。 local-address=127.0.0.1:5301 #本地监听地址和端口 resolver-address=128.199.131.196:5353 #远端的服务器地址和端口 provider-name=2.dnscrypt-cert.logcg.com provider-key=4298:5F65:C295:DFAE:2BFB:20AD:5C47:F565:78EB:2404:EF83:198C:85DB:68F1:3E33:E952 #先前使用dnscrypt-wrapper --gen-provider-keypair命令时候生成的指纹信息。
保存后使用如下命令重启客户端服务,如果你的端口没有被防火墙撸掉,那服务器那边就应该能够看到 debug 信息,表示已经有客户端接入。
service dnscrypt-proxy restart
使用命令来测试一下:
root@MyServer:~# dig -p 5301 twitter.com @127.0.0.1 ; <<>> DiG 9.8.1-P1 <<>> -p 5301 twitter.com @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45379 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;twitter.com. IN A ;; ANSWER SECTION: twitter.com. 5 IN A 199.16.158.179 twitter.com. 5 IN A 199.16.158.168 ;; Query time: 273 msec ;; SERVER: 127.0.0.1#5301(127.0.0.1) ;; WHEN: Wed May 6 19:51:42 2015 ;; MSG SIZE rcvd: 72
多次重复命令,发现获取到的 IP 均相同且为真正的正确 IP 地址,服务生效。
创建脚本
每次直接运行命令多少有些不方便,即使使用“-d”来后台执行,一样让人感到不适,我们使用 shell 来创建一个启动 dnscrypt-wrapper 的脚本。
cd ~/dnskey vi start-dnscrypt-wrapper.sh #加入以下内容 #!/bin/bash dnscrypt-wrapper --resolver-address=127.0.0.1:5333 --listen-address=0.0.0.0:5355 \ --provider-name=2.dnscrypt-cert.logcg.com \ --crypt-secretkey-file=1.key --provider-cert-file=1.cert -d \ --logfile=/var/log/dnscrypt-wraper.log
以后则只需要使用 sh start-dnscrypt-wrapper.sh 就可以启动了。
——至于关闭嘛,使用命令“killall dnscrypt-wrapper”。
延伸阅读:
https://github.com/Cofyc/dnscrypt-wrapper
dnscrypt-wrapper的使用方法