DNScrypt-Wrapper-um proxy DNScrypt do lado do servidor.
Este é o Wrapper DNScrypt (proxy DNScrypt do lado do servidor), que ajuda a adicionar suporte ao DNScrypt a qualquer resolvedor de nome.
Este software é modificado a partir do DNScrypt-Proxy.
Instale o Libsodium e o Libevent 2.1.1+ primeiro.
No 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
Em FreeBSD:
$ pkg install dnscrypt-wrapper
No 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/
No macOS:
$ brew install dnscrypt-wrapper
Em 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 > Se o seu servidor não armazenar logs, adicione --nolog e se ele suportar DNSSEC, adicione --dnssec .
Isso criará dois arquivos no diretório atual: public.key e secret.key .
Este é um par de chaves de longo prazo que nunca deve mudar, a menos que a chave secreta seja comprometida. Certifique -se de que o secret.key .
Ele também imprimirá o carimbo para DNScrypt-Proxy versão 2.x.
Se você esqueceu de salvar sua chave pública do seu provedor:
$ dnscrypt-wrapper --show-provider-publickey --provider-publickey-file < your-publickey-file >Isso irá imprimir.
$ 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 Neste exemplo, a chave secreta limitada pelo tempo será salva como 1.key e seu certificado relacionado como 1.cert no diretório atual.
As chaves e certificados secretos por tempo limitado podem ser atualizados a qualquer momento sem exigir que os clientes atualizem sua configuração.
Nota: Por padrão, a chave secreta expira em 1 dia (24 horas) para segurança. Você pode alterá-lo adicionando --cert-file-expire-days=<your-expected-expiraiton-days> , mas é melhor usar a chave secreta de curto prazo e usar o mecanismo de rotação de chaves.
$ 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 O nome do provedor pode ser qualquer coisa; Não precisa estar dentro de um nome de domínio existente. No entanto, ele deve começar com 2.dnscrypt-cert. , por exemplo, 2.dnscrypt-cert.example.com .
Quando o serviço é iniciado com o interruptor --provider-cert-file -o proxy servirá automaticamente o certificado como um registro txt quando uma consulta para o nome do provedor for recebida.
Como alternativa, o registro do TXT pode ser servido por um servidor de nome para uma zona DNS real para a qual você é autoritário. Nesse cenário, a opção --provider-cert-file não é necessária, e as instruções para o Unbound e o TinyDNS são exibidas pelo programa ao gerar um certificado de provedor.
Você pode obter instruções posteriormente executando:
$ 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> é a chave pública gerada pelo dnscrypt-wrapper --gen-provider-keypair , que se parece com 4298:5F65:C295:DFAE:2BFB:20AD:5C47:F565:78EB:2404:EF83:198C:85DB:68F1:3E33:E952 .
Opcionalmente, adicione -d/--daemonize sinalizador para executar como um daemon.
Execute dnscrypt-wrapper -h para visualizar as opções da linha de comando.
Por padrão, e com exceção dos registros usados para os certificados, apenas consultas usando o protocolo DNScrypt serão aceitas.
Se você deseja executar um serviço apenas acessível usando o DNScrypt, é isso que você deseja.
Se você deseja executar um serviço acessível com e sem DNScrypt, o que você geralmente deseja é manter a porta DNS padrão para o serviço DNS não autenticado (53) e usar uma porta diferente para DNScrypt. Você também não precisa mudar nada para isso.
No entanto, se você deseja executar os dois na mesma porta, talvez porque apenas a porta 53 seja acessível no seu servidor, você pode adicionar a troca -U ( --unauthenticated ) para a linha de comando. Isso não é recomendado.
As chaves com tempo limitado devem expirar.
dnscrypt-proxy pode verificar se a chave atual para um determinado servidor não vai expirar em breve:
$ dnscrypt-proxy --resolver-address=127.0.0.1:443
--provider-name=2.dnscrypt-cert. < yourdomain >
--provider-key= < provider_public_key >
--test=10080 A opção --test é seguida por uma "margem de graça".
O comando sairá imediatamente após a verificação da validade do certificado.
O código de saída é 0 se um certificado válido puder ser usado, 2 se nenhum certificado válido puder ser usado, 3 se ocorrer um tempo limite e 4 se um certificado atualmente válido expirar antes da margem.
A margem é sempre especificada em minutos.
Isso pode ser usado em uma guia Cron para acionar um alerta antes que uma chave expire.
Para mudar para uma nova chave:
Primeiro, crie uma nova chave de tempo limitada (não altere a chave do provedor!) E seu certificado:
$ 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=1Segundo, diga aos novos usuários para usar o novo certificado, mas ainda aceitam a chave antiga até que todos os clientes tenham carregado o novo certificado:
$ 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 Observe que 1.key e 2.key foram especificados, a fim de aceitar a chave anterior e a atual.
Terceiro, os clientes consultam automaticamente novos certificados a cada hora. Então, depois de uma hora, o certificado antigo pode ser recusado, deixando apenas o novo na configuração:
$ 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 Observe que nos sistemas Linux (kernel> = 3,9), múltiplas instâncias de dnscrypt-wrapper podem ser executadas ao mesmo tempo. Portanto, para mudar para uma nova configuração, é possível iniciar um novo daemon sem matar a instância anterior e apenas matar a instância anterior após o início do novo.
Isso também permite atualizações com tempo de inatividade zero.
Para servidores dispostos a bloquear nomes de domínio específicos (anúncios, malware), o parâmetro --blacklist-file pode ser adicionado. Esse arquivo da lista negra aceita padrões como:
example.com : blocks example.com e www.example.com*.example.com : idêntico, apenas mais explícito*example* : bloqueia o example substring, não importa onde apareçaads.* : bloqueia os ads. prefixoAs pesquisas de prefixo e sufixo são rápidas e podem escalar para listas muito grandes.
注 : 第三方文档可能未及时与最新版本同步 , 以 ReadMe.md 为准。