上次说了 dnscrypt-wrapper的编译过程,这次来说说使用方法。
先来看看程序自带的Usage(-h):
|
|
翻译(chinese大神你为啥不写个中文版guide(╯‵□′)╯︵┻━┻):(红色的为运行必需项,紫色的是生产配置必须项)
用法:dnscrypt-wrapper[选项]
-h, ;help #显示此帮助信息并退出
;gen-cert-file #生成预签名证书
;gen-crypt-keypair #生成crypt密钥对
;gen-provider-keypair #生成provider密钥对
;show-provider-publickey #当你忘了Provider public key的时候,可以用这个命令指定 ;show-provider-publickey ;provider-publickey-file ./public.key找回Provider public key。
;show-provider-publickey-dns-records #新版本参数,结合 ;crypt-secretkey-file和 ;provider-cert-file参数使用,显示对应的证书二进制,用来添加在你的域名的TXT记录。
;provider-cert-file=XXX #指定证书文件,默认当前目录的dnscrypt.cert文件,如果2.dnscrypt-cert.yourdomain.com添加了证书二进制的TXT记录,则不必附带这个选项,程序会会通过 provider-name 从 DNS 的txt记录那里获取证书。
;provider-name=XXX #dnscrypt证书服务域名。例如2.dnscrypt-cert.yourdomain.com
;provider-publickey-file= XXX #r导入provide公钥文件,默认指定当前目录的public.key文件。
;provider-secretkey-file=XXX #导入provider私钥文件,默认指定当前目录的secret.key文件。
;crypt-secretkey-file==XXX #导入crypt私钥文件,默认指定当前目录的crypt_secret.key文件。
;cert-file-expire-days=XXX #证书文件有效天数(默认值:365)
-a, ;listen-address=XXX #本地地址监听(默认值:0.0.0.0:53),提供DNS服务的端口
-r, ;resolver-address=XXX #上游DNS解析服务器(<地址:端口>例如8.8.8.8:53)
-o, ;outgoing-address=<str#新增参数, 指定用哪个网卡ip地址去连接上游DNS
-U, ;unauthenticated #允许和转发未经身份验证的查询(默认值:关闭)
-u, ;user =XXX #用指定用户运行
-l, ;logfile = XXX #日志文件路径(默认:标准输出到屏幕)
-p, ;pidfile =XXX #指定PID存储的文件路径
-d, ;daemonize #开启守护进程(默认关闭)
-V, ;verbose #显示详细日志(指定更多V增加详细程度,例如-VVV)
-v, ;version #显示版本信息
首先,我们要生成provider-key:
然后你在当前目录下会生成public.key和 secret.key文件。provider-key这是一个长期不改变的密钥对,确保secret.key文件安全地备份存储好。
注:这个 23E6:E208…:F709:9FE1就是Provider public key!dnscrypt客户端dnscrypt-proxy需要用到这个provider-key,例如dnscrypt-proxy ;provider-key= 23E6:E208…:F709:9FE1,请注意保存。如果你忘记了Provider public key,可以通过public.key来找回:
|
|
然后生成用来加密DNS请求的crypt key和证书文件,证书是有期限的,默认是365天:
接着用上面的ssl.key密钥对生成预签名证书:
|
|
然后在当前目录下就得到了ssl.cert证书文件。
简单解析下参数, ;gen-cert-file表示要生成证书文件,然后生产证书文件需要提供前面生成的crypt key,就用 ;crypt-secretkey-file=./ssl.key,还需要前面生成的public.key和 secret.key文件,所以用 ;provider-publickey-file=./public.key ;provider-secretkey-file=./secret.key指定,最后 ;cert-file-expire-days这个参数是可选的,指定证书的过期时间,默认是365天过期,然后 ;provider-cert-file=这个指定证书的保存路径。
这里值得注意的是,图中还有写record for XXX,这是给你做DNS记录的,这个可做可不做,如果你做域名的TXT记录的话,首先你要有个域名,然后增加2.dnscrypt-cert.yourdomain.com的TXT记录为图中的二进制证书内容,那么得到的效果是,启动dnscrypt-wrapper不必附带 ;provider-cert-file=XXX这个选项去指定证书文件,因为程序会会通过 provider-name 从 DNS 的TXT记录获取证书。
举个官方例子,
可以使用dig TXT 2.dnscrypt-cert.opendns.com这个命令查看opendns的TXT记录是这样的:
|
|
如果你忘记或者错过了上面显示的TXT记录,可以使用 ;show-provider-publickey-dns-records参数来获取对应的TXT记录:
|
|
不过,一般情况下这个证书字符串太长了,很多dns解析商一般不允许设置这么长的字符串……当然你也可以搭建本地dns服务器来储存这玩意……但是因为dnscrypt-wrapper有 ;provider-cert-file=XXX的命令手动指定证书文件,所以这步不是必须的。当然如果可以通过域名来读取证书,那么在部署这个服务的时候会方便很多,以及证书的更新也方便很多。
经过上面的步骤应该生成了以下的文件:
root@:~/dnskey# ls
public.key secret.key ssl.cert ssl.key
然后用生成的证书启动程序:
解释下命令参数:-r 8.8.8.8:53是使用8.8.8.8:53作为dns的上游服务器,-a 0.0.0.0:5353是指定对外服务的端口,你可以随便定义只要不跟其他端口冲突例如1253;-VVV是显示调试信息,其他的都是导入key和证书,指定服务名,服务名provider-name这个参数是必须的,即使你没有域名,你也要随便指定一个2.dnscrypt-cert.xxxx.com。
注意:2.dnscrypt-cert.xxx.com前面的**2.dnscrypt-cert.是固定的,不能改成3.dnscrypt-cert**.什么的。
好了现在我们要来测试下是否搭建成功了正常运行了,原作者的readme是这样测试的:
简单解释下,就是在服务器本地运行dnscrypt客户端dnscrypt-proxy,指定127.0.0.1端口55,然后用dig命令(一个查询dns的命令,centos没有),指定本地的127.0.0.1服务器55端口去解析google.com的域名,解析成功就工作正常了。
但是这个对我来说麻烦死了……因为我得又来编译一次dnscrypt-proxy的客户端(本来打算编译的,下了代码然后说明不怎么详细,然后……然后折腾了半天懒得弄了),centos又没有dig命令,我还得编译一个dig……OMG……烦(懒)死了,而且测试完本地我还得测试远程实际好不好使,我们直接一步到位吧,用本地的windows客户端去测试远程的服务器,能用就是绝对好使的了!
首先我们要配置下防火墙,对外开放你定义的端口(例如上面我定义的是5353):
|
|
然后我们就可以下载windows客户端去测试了,由于dnscrypt的官网被墙,我这里直接提供现成的客户端给大家测试用吧,省得找了,想要自己找的话可以去dnscrypt.org上翻去。
打开客户端目录下的dnscrypt-resolvers.csv文件,仿照上面的数据格式添加一行:
Name | Full name | Description | Location | Coordinates | URL |
---|---|---|---|---|---|
lingsanDNS | lingsanDNS | lingsanDNS | 不填 | 不填 | 不填 |
Version | DNSSEC validation | No logs | Namecoin | Resolver address |
---|---|---|---|---|
1 | no | no | no | 你的ip:端口 |
Provider name | Provider public key | Provider public key TXT record |
---|---|---|
2.dnscrypt-cert.yourdomain.com | 上面生成的照填,我字标红的那个 | 不填 |
其实参照其他的随便填就是,关键参数是Provider public key和Resolver address。
然后你打开客户端就会看到新的dns选项了,点击启用,把网卡dns改成本地127.0.0.1就可以测试了。
这还不够,我们还要测试dns是否是从远程送过来的,这样才能达到代理加速的效果!怎么测试呢?告诉你,万能的淘宝在国外是有服务器的(剁手无国界),我们看看淘宝的解析结果如果是在国外就是达到理想效果了!
nslookup www.taobao.com
-d开启守护进程啊添加开机启动啊计划任务啊那些我就不罗嗦了,自己用心去体会吧~