DNSCRYPT-WRAPPER-服务器端DNSCRYPT代理。
这是DNScrypt包装器(服务器端DNSCRYPT代理),它有助于在任何名称解析器上添加DNSCRYPT支持。
该软件是根据dnscrypt-proxy修改的。
首先安装libsodium和libevent 2.1.1+。
在Linux上:
$ ldconfig # if you install libsodium from source
$ git clone git://github.com/cofyc/dnscrypt-wrapper.git
$ cd dnscrypt-wrapper
$ make configure
$ ./configure
$ make install
在FreeBSD上:
$ pkg install dnscrypt-wrapper
在OpenBSD上:
$ pkg_add -r gmake autoconf
$ pkg_add -r libevent
$ git clone git://github.com/cofyc/dnscrypt-wrapper.git
$ cd dnscrypt-wrapper
$ gmake LDFLAGS='-L/usr/local/lib/' CFLAGS=-I/usr/local/include/
在MacOS上:
$ brew install dnscrypt-wrapper
在Docker中:
See https://github.com/jedisct1/dnscrypt-server-docker.
$ dnscrypt-wrapper --gen-provider-keypair
--provider-name=2.dnscrypt-cert. < yourdomain > --ext-address= < external server ip >如果您的服务器未存储日志,请添加--nolog ,并且它支持DNSSEC,add --dnssec 。
这将在当前目录中创建两个文件: public.key and secret.key 。
这是一对长期的钥匙对,除非秘密钥匙受到损害,否则永远不会更改。确保secret.key牢固存储和备份。
它还将打印DNScrypt-Proxy版本2.x的邮票。
如果您忘记保存提供商的公钥:
$ dnscrypt-wrapper --show-provider-publickey --provider-publickey-file < your-publickey-file >这将打印出来。
$ 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
--provider-publickey-file=public.key --provider-secretkey-file=secret.key在此示例中,时间限制的秘密密钥将作为1.key及其相关证书保存为1.cert ,在当前目录中。
可以随时更新时限制的秘密键和证书,而无需客户更新其配置。
注意:默认情况下,秘密密钥在1天(24小时)内为安全性而过期。您可以通过添加--cert-file-expire-days=<your-expected-expiraiton-days>来更改它,但是最好使用短期秘密键并使用键控机制。
$ dnscrypt-wrapper --resolver-address=8.8.8.8:53 --listen-address=0.0.0.0:443
--provider-name=2.dnscrypt-cert. < yourdomain >
--crypt-secretkey-file=1.key --provider-cert-file=1.cert提供商名称可以是任何东西;它不必在现有域名之内。但是,它必须从2.dnscrypt-cert. ,例如2.dnscrypt-cert.example.com 。
当服务以--provider-cert-file开关启动时,当收到提供商名称的查询时,代理将自动将证书作为TXT记录。
作为替代方案,TXT记录可以由您具有权威的实际DNS区域的名称服务器提供。在这种情况下,不需要--provider-cert-file选项,并且在生成提供商证书时,该程序显示了无绑定和微小的说明。
您稍后可以通过运行获取说明:
$ dnscrypt-wrapper --show-provider-publickey-dns-records
--provider-cert-file < path/to/your/provider_cert_file >$ dnscrypt-proxy --local-address=127.0.0.1:55 --resolver-address=127.0.0.1:443
--provider-name=2.dnscrypt-cert. < yourdomain >
--provider-key= < provider_public_key >
$ dig -p 55 google.com @127.0.0.1 <provider_public_key> is public key generated by dnscrypt-wrapper --gen-provider-keypair , which looks like 4298:5F65:C295:DFAE:2BFB:20AD:5C47:F565:78EB:2404:EF83:198C:85DB:68F1:3E33:E952 .
可选地,添加-d/--daemonize标志以作为守护程序运行。
运行dnscrypt-wrapper -h以查看命令行选项。
默认情况下,除了用于证书的记录外,仅使用DNScrypt协议的查询。
如果您想仅使用DNScrypt运行服务,这就是您想要的。
如果您想在没有和没有DNSCRypt的情况下运行可访问的服务,则通常想要的是将标准DNS端口保留用于未经身份验证的DNS服务(53),并为DNSCRYPT使用其他端口。您也不必为此更改任何东西。
但是,如果您想在同一端口上同时运行两者,也许是因为服务器上只能到达端口53,则可以将-U ( --unauthenticated )切换添加到命令行中。不建议这样做。
时间限制的键必然会到期。
dnscrypt-proxy可以检查给定服务器的当前密钥是否不会很快到期:
$ dnscrypt-proxy --resolver-address=127.0.0.1:443
--provider-name=2.dnscrypt-cert. < yourdomain >
--provider-key= < provider_public_key >
--test=10080 --test选项之后是“宽限边距”。
命令将在验证证书有效性后立即退出。
如果可以使用有效的证书,则退出代码为0 ,如果无法使用有效证书,则为2 ,如果发生超时证书,则为3 ,如果当前有效的证书将在保证金之前到期,则为4 。
始终在几分钟内指定边距。
这可以在CRON选项卡中使用,以在键到期之前触发警报。
为了切换到新的新钥匙:
首先,创建一个新的时限密钥(请勿更改提供商密钥!)及其证书:
$ dnscrypt-wrapper --gen-crypt-keypair --crypt-secretkey-file=2.key
$ dnscrypt-wrapper --gen-cert-file --crypt-secretkey-file=2.key --provider-cert-file=2.cert
--provider-publickey-file=public.key --provider-secretkey-file=secret.key
--cert-file-expire-days=1其次,告诉新用户使用新证书,但仍然接受旧密钥,直到所有客户端加载了新证书:
$ dnscrypt-wrapper --resolver-address=8.8.8.8:53 --listen-address=0.0.0.0:443
--provider-name=2.dnscrypt-cert. < yourdomain >
--crypt-secretkey-file=1.key,2.key --provider-cert-file=1.cert,2.cert请注意,已指定1.key和2.key ,以便接受上一个键和当前密钥。
第三,客户每小时自动检查新证书。因此,一小时后,可以通过在配置中留下新的证书来拒绝旧证书:
$ dnscrypt-wrapper --resolver-address=8.8.8.8:53 --listen-address=0.0.0.0:443
--provider-name=2.dnscrypt-cert. < yourdomain >
--crypt-secretkey-file=2.key --provider-cert-file=2.cert请注意,在Linux系统(内核> = 3.9)上, dnscrypt-wrapper的倍数可以同时运行。因此,为了切换到新的配置,可以启动一个新的守护程序而不杀死上一个实例,并且在新实例启动后才杀死上一个实例。
这还允许升级为零停机时间。
对于愿意阻止特定域名(AD,恶意软件)的服务器,可以添加--blacklist-file参数。该黑名单文件接受诸如:
example.com example.com以及www.example.com*.example.com :相同,更明确*example* :无论出现在哪里,都会阻止example子字符串ads.* :阻止ads.前缀前缀和后缀查找很快,可以扩展到非常大的列表。
注:第三方文档可能未及时与最新版本同步,以readme.md为准。