DNSCRYPT-WRAPPER-серверный прокси-сервер на стороне сервера.
Это Dnscrypt Wrapper (прокси-сервер DNScrypt), которая помогает добавить поддержку DNScrypt к любому Resolver.
Это программное обеспечение модифицировано из 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, добавьте --dnssec .
Это создаст два файла в текущем каталоге: public.key и 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> -это открытый ключ, сгенерированный dnscrypt-wrapper --gen-provider-keypair , который выглядит 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 Systems (ядро> = 3,9), кратные экземпляры dnscrypt-wrapper могут работать одновременно. Поэтому, чтобы переключиться на новую конфигурацию, можно запустить новый демон, не убивая предыдущий экземпляр, и убить предыдущий экземпляр только после того, как новый начался.
Это также позволяет модернизировать с нулевым временем простоя.
Для серверов, желающих блокировать определенные доменные имена (реклама, вредоносные программы), можно добавить параметр --blacklist-file . Этот файл черного списка принимает такие шаблоны, как:
example.com : blocks example.com , а также www.example.com*.example.com : идентично, просто более явное*example* : блокирует example подстроения, независимо от того, где она появляетсяads.* : блокирует ads. префиксПоиск префикса и суффиксов быстры и могут масштабироваться до очень больших списков.
: : 第三方文档可能未及时与最新版本同步 , 以 readme.md 为准。