dnscrypt-wrapper的使用方法

上次说了 dnscrypt-wrapper的编译过程,这次来说说使用方法。

先来看看程序自带的Usage(-h):

Usage: dnscrypt-wrapper [options]

-h, –help show this help message and exit
–gen-cert-file generate pre-signed certificate
–gen-crypt-keypair generate crypt key pair
–gen-provider-keypair generate provider key pair
–show-provider-publickey show provider public key
–show-provider-publickey-dns-records show records for DNS servers
–provider-cert-file=<str> certificate file (default: ./dnscrypt.cert)
–provider-name=<str> provider name
–provider-publickey-file=<str> provider public key file (default: ./public.key)
–provider-secretkey-file=<str> provider secret key file (default: ./secret.key)
–crypt-secretkey-file=<str> crypt secret key file (default: ./crypt_secret.key)
–cert-file-expire-days=<int> cert file expire days (default: 365)
-a, –listen-address=<str> local address to listen (default: 0.0.0.0:53)
-r, –resolver-address=<str> upstream dns resolver server (<address:port>)
-o, –outgoing-address=<str> address to use to connect to dns resolver server (<address:port>)
-U, –unauthenticated allow and forward unauthenticated queries (default: off)
-u, –user=<str> run as given user
-l, –logfile=<str> log file path (default: stdout)
-p, –pidfile=<str> pid stored file
-d, –daemonize run as daemon (default: off)
-V, –verbose show verbose logs (specify more -VVV to increase verbosity)
-v, –version show version info

翻译(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记录是这样的:

digdnscrypt-certopendnscom

如果你忘记或者错过了上面显示的TXT记录,可以使用–show-provider-publickey-dns-records参数来获取对应的TXT记录:

【点击图片放大】

不过,一般情况下这个证书字符串太长了,很多dns解析商一般不允许设置这么长的字符串……当然你也可以搭建本地dns服务器来储存这玩意……但是因为dnscrypt-wrapper有–provider-cert-file=XXX的命令手动指定证书文件,所以这步不是必须的。当然如果可以通过域名来读取证书,那么在部署这个服务的时候会方便很多,以及证书的更新也方便很多。

经过上面的步骤应该生成了以下的文件:

[email protected]:~/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文件,仿照上面的数据格式添加一行:

NameFull nameDescriptionLocationCoordinatesURL
lingsanDNSlingsanDNSlingsanDNS不填不填不填
VersionDNSSEC validationNo logsNamecoinResolver address
1nonono你的ip:端口
Provider nameProvider public keyProvider public key TXT record
2.dnscrypt-cert.yourdomain.com上面生成的照填,我字标红的那个不填

其实参照其他的随便填就是,关键参数是Provider public key和Resolver address。

然后你打开客户端就会看到新的dns选项了:

newdnsoptions

没错,点击启用,把网卡dns改成本地127.0.0.1就可以测试了。dns-tw-test

 

解析结果正确:

tw-dns-result

 

这还不够,我们还要测试dns是否是从远程送过来的,这样才能达到代理加速的效果!怎么测试呢?告诉你,万能的淘宝在国外是有服务器的(剁手无国界),我们看看淘宝的解析结果如果是在国外就是达到理想效果了!

dns-ping-taobao

taobao-dns-ip

 

 

很好,终于成功了!!!

-d开启守护进程啊添加开机启动啊计划任务啊那些我就不罗嗦了,自己用心去体会吧~

附录


CENTOS下编译DNSCRYPT-WRAPPER(DNSCRYPT服务端)

 

 DNSCRYPT-PROXY客户端(WINDOWS)

dnscrypt-proxy参数详解


原文链接:https://03k.org/dnscrypt-wrapper-usage.html

本站博文无特别声明均为原创,转载请注明原文链接。本站软件均搜集自互联网,供学习研究之用,请下载后24小时内删除。

疑问OR交流点我加QQ群喵喵喵!


  1. hkdzr Google Chrome 58.0.3029.110 Windows 10 x64 Edition

    这个服务端支持tcp吗,我用客户端dnscrypt-proxy尝试只能用udp ,tcp连不上, 想尝试你提供的图形客户端但是掉线了,可能是跟我其他客户端冲突了

    回复
    1. hkdzr Google Chrome 58.0.3029.110 Windows 10 x64 Edition

      额 刚发现有 -T 参数,可以tcp

      回复
  2. JKs Google Chrome 56.0.2924.87 Windows 10 x64 Edition

    万能的楼主好!文中提到:

    然后生成crypt key:

    dnscrypt-wrapper –gen-crypt-keypair

    Generate crypt key pair… ok.
    Keys are stored in crypt_public.key & crypt_secret.key.

    貌似我在这一步不会生成两个.key文件。。。操作如下:

    [[email protected] dnskey]# dnscrypt-wrapper –gen-provider-keypair
    Generate provider key pair… ok.
    Provider public key: XXXXXX。。。。。。。
    Keys are stored in public.key & secret.key.

    [[email protected] dnskey]# dnscrypt-wrapper –gen-crypt-keypair
    Generate crypt key pair… ok.
    Secret key stored in crypt_secret.key

    (上面这句提示,跟你文中的就不一样了。。。因为下一步,马上就会需要用到4个.key文件去生成预签名证书啦,所以ls一下,发现少了一个 -_-!!)

    [[email protected] dnskey]# ls
    crypt_secret.key public.key secret.key

    这是咋回事?是不是作者的程序升级了?

    我打算用 【dnscrypt-wrapper -–gen-crypt-keypair –provider-publickey-file=crypt_public.key –provider-secretkey-file=crypt_secret.key 】这句代码,来替换文中的【dnscrypt-wrapper –gen-crypt-keypair】,等于强制指定了文件名。稍后反馈结果。。。

    回复
    1. JKs Google Chrome 56.0.2924.87 Windows 10 x64 Edition

      还是不行,即便强制指定了也不会生成 crypt_public.key 文件,所以下一步的用4个文件生成预签名文件这一步,我还是去参考github的吧。都没有中文的。。。关键这个东西,貌似老外也用不上吧,哈哈哈哈、

      原参数命令行参考:
      –gen-crypt-keypair generate crypt key pair
      –provider-publickey-file= provider public key file
      –provider-secretkey-file= provider secret key file

      回复
      1. kissshot Google Chrome 45.0.2454.101 Windows 10 x64 Edition

        谢谢反馈,我稍后去安装测试编译一下。
        其实这个东西是opendns搞的,不过他只开源了客户端没有服务端。。。

        回复
      2. kissshot Google Chrome 45.0.2454.101 Windows 10 x64 Edition

        我今天抽空看了下,新版本不需要crypt_public.key了。我稍后更新下教程。

        回复
      3. kissshot Google Chrome 45.0.2454.101 Windows 10 x64 Edition

        谢谢反馈,教程已经更新,新版本不需要 crypt_public.key 文件,也增加了一些参数。

        回复
  3. Cofyc Google Chrome 43.0.2357.124 Mac OS X  10.10.3

    hi,

    其实,我以前有写中文文档,但要维护两份感觉太麻烦,又不想旧文档错误误导人就删除了 ;-)

    我已将你这两篇文章放到 README.md 中了: https://github.com/Cofyc/dnscrypt-wrapper#中文文档

    很详细,非常感谢你关于 dnscrypt-wrapper 的分享~

    回复
    1. kissshot Google Chrome 45.0.2424.0 Windows 7 x64 Edition

      哈哈哈非常感谢!:-D

      回复
      1. jamesontan Google Chrome 45.0.2454.101 Windows 10 x64 Edition

        dnscrypt-proxy –local-address=127.0.0.1:53 –resolver-address=127.0.0.1:443 –provider-name=testser –provider-key=6D71:2241:A3B4:51A9:B625:6A61:6384:A4AF:78E2:D7B8:066F:4E74:26B3:E2EA:982F:3AC5
        [ERROR] Unsupported server protocol version

        请问在安装完dnscrypt-wrapper 之后,用dnscrypt-proxy -来测试,总是提示不支持的服务协议版本,是什么原因?盼大牛能回答解决?谢谢!

        回复
        1. kissshot Google Chrome 45.0.2454.101 Windows 10 x64 Edition

          如果你不是在服务端测试的话,你监听的端口应该是0.0.0.0:443
          ————
          看错了,你是在服务端跑proxy……
          可以不在服务端测试下嘛

          回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注