DNSCRYPT-Wrapper: un proxy DNSCrypt del lado del servidor.
Este es DNSCRYPT WRAPPER (proxy DNSCRYPT del lado del servidor), que ayuda a agregar soporte DNSCRYPT a cualquier resolución de nombres.
Este software se modifica a partir de DNScrypt-Proxy.
Instale Libsodium y Libevent 2.1.1+ primero.
En 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
En FreeBSD:
$ pkg install dnscrypt-wrapper
En 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/
En macOS:
$ brew install dnscrypt-wrapper
En 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 > Si su servidor no almacena registros, agregue --nolog y si es compatible con DNSSEC, agregue --dnssec .
Esto creará dos archivos en el directorio actual: public.key y secret.key .
Este es un par de claves a largo plazo que nunca se supone que cambie a menos que la clave secreta se vea comprometida. Asegúrese de que secret.key esté almacenado y respaldado de forma segura.
También imprimirá el sello para DNSCrypt-Proxy versión 2.x.
Si olvidó guardar su proveedor clave pública:
$ dnscrypt-wrapper --show-provider-publickey --provider-publickey-file < your-publickey-file >Esto lo 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 En este ejemplo, la clave secreta de tiempo limitado se guardará como 1.key y su certificado relacionado como 1.cert en el directorio actual.
Las claves y certificados secretos de tiempo limitado se pueden actualizar en cualquier momento sin requerir que los clientes actualicen su configuración.
Nota: Por defecto, la clave secreta expira en 1 día (24 horas) por seguridad. Puede cambiarlo agregando --cert-file-expire-days=<your-expected-expiraiton-days> , pero es mejor usar la clave secreta a corto plazo y usar el mecanismo de rotación clave.
$ 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 El nombre del proveedor puede ser cualquier cosa; No tiene que estar dentro de un nombre de dominio existente. Sin embargo, tiene que comenzar con 2.dnscrypt-cert. , por ejemplo, 2.dnscrypt-cert.example.com .
Cuando el servicio se inicia con el interruptor --provider-cert-file , el proxy servirá automáticamente al certificado como un registro txt cuando se recibe una consulta para el nombre del proveedor.
Como alternativa, el registro TXT puede ser atendido por un servidor de nombres para una zona DNS real para la que es autorizado. En ese escenario, el programa no se requiere la opción --provider-cert-file , y el programa muestra instrucciones para Unbound y TinyDNS al generar un certificado de proveedor.
Puede obtener instrucciones más tarde ejecutando:
$ 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> es la clave pública generada por dnscrypt-wrapper --gen-provider-keypair , que se parece a 4298:5F65:C295:DFAE:2BFB:20AD:5C47:F565:78EB:2404:EF83:198C:85DB:68F1:3E33:E952 .
Opcionalmente, agregue -d/--daemonize Flag para ejecutar como un demonio.
Ejecute dnscrypt-wrapper -h para ver las opciones de línea de comandos.
Por defecto, y con la excepción de los registros utilizados para los certificados, solo se aceptarán consultas que usan el Protocolo DNSCRYPT.
Si desea ejecutar un servicio solo accesible usando DNScrypt, esto es lo que desea.
Si desea ejecutar un servicio accesible con y sin DNSCrypt, lo que generalmente desea es mantener el puerto DNS estándar para el servicio DNS no autenticado (53) y usar un puerto diferente para DNScrypt. Tampoco tienes que cambiar nada por esto.
Sin embargo, si desea ejecutar ambos en el mismo puerto, tal vez porque solo el puerto 53 puede accesible en su servidor, puede agregar el interruptor -U ( --unauthenticated ) a la línea de comandos. Esto no se recomienda.
Las teclas limitadas de tiempo están obligadas a expirar.
dnscrypt-proxy puede verificar si la clave actual para un servidor determinado no va a expirar pronto:
$ dnscrypt-proxy --resolver-address=127.0.0.1:443
--provider-name=2.dnscrypt-cert. < yourdomain >
--provider-key= < provider_public_key >
--test=10080 La opción --test es seguida por un "margen de gracia".
El comando saldrá inmediatamente después de verificar la validez del certificado.
El código de salida es 0 si se puede usar un certificado válido, 2 si no se pueden usar certificados válidos, 3 si se produce un tiempo de espera y 4 si un certificado válido actualmente expira antes del margen.
El margen siempre se especifica en minutos.
Esto se puede usar en una pestaña CRON para activar una alerta antes de que expire una llave.
Para cambiar a una nueva llave nueva:
Primero, cree una nueva clave de tiempo limitado (¡no cambie la clave del proveedor!) Y su 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=1En segundo lugar, dígale a los nuevos usuarios que usen el nuevo certificado, pero aún así acepte la clave anterior hasta que todos los clientes hayan cargado el nuevo 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 Tenga en cuenta que se han especificado tanto 1.key como 2.key , para aceptar la clave anterior y actual.
En tercer lugar, los clientes verifican automáticamente los nuevos certificados cada hora. Entonces, después de una hora, se puede rechazar el certificado anterior, dejando solo el nuevo en la configuración:
$ 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 Tenga en cuenta que en Linux Systems (kernel> = 3.9), las instancias de múltiples de dnscrypt-wrapper pueden ejecutarse al mismo tiempo. Por lo tanto, para cambiar a una nueva configuración, uno puede iniciar un nuevo demonio sin matar la instancia anterior y solo matar la instancia anterior después de que el nuevo comenzó.
Esto también permite actualizaciones con tiempo de inactividad cero.
Para los servidores dispuestos a bloquear los nombres de dominio específicos (anuncios, malware), se puede agregar el parámetro- --blacklist-file . Ese archivo de la lista negra acepta patrones como:
example.com : Blocks example.com , así como www.example.com*.example.com : idéntico, simplemente más explícito*example* : bloquea el example de subcadena sin importar dónde aparezcaads.* : Bloquea los ads. prefijoLas búsquedas de prefijo y sufijo son rápidas y pueden escalar a listas muy grandes.
注 : 第三方文档可能未及时与最新版本同步 以 以 以 readme.md 为准。