Instalación y configuración de DNScrypt v2 en GNU/Linux (Actualizado).

Dnscrypt2

¿Que es DNScryp?

DNSCrypt es un protocolo que cifra y autentica las comunicaciones entre el usuario y un servicio de resolución DNS, evita la suplantación de DNS y utiliza firmas criptográficas para verificar que las respuestas provienen del servicio de resolución DNS elegido y no han sido manipuladas. Es un protocolo abierto, con implementaciones de código abierto y gratuito, y no está afiliada a ninguna empresa u organización. DNSCrypt está disponible para la todas las plataformas en computadoras y dispositivos móviles.

¿Que es DNSCrypt-Proxy?

Dnscrypt-proxy es una implementación del protocolo DNSCrypt. Se ejecuta en su computadora o router y puede bloquear localmente contenido no deseado, revelar a dónde sus dispositivos están enviando datos silenciosamente, hacer que las aplicaciones se sientan más rápidas almacenando en caché respuestas de DNS y mejorar la seguridad y confidencialidad al comunicarse con servidores DNS ascendentes a través de canales seguros.

¿Diferencias entre DNSCrypt-proxy v1 y DNSCrypt-Proxy v2?

Las diferencias pueden ser encontradas aquí: https://github.com/jedisct1/dnscrypt-proxy/wiki/Differences-to-v1

Instalación de DNSCrypt en GNU/Linux.

El código fuente está disponible en https://github.com/jedisct1/dnscrypt-proxy y puede ser descargado y compilado según lo escrito en su Wiki. A continuación explicaremos cómo instalarlo en algunas de las distribuciones más conocidas. Antes de iniciar el proceso de instalación, elimine cualquier otra versión de DNSCrypt que tengas instalada en el sistema. A continuación estarán los comandos por distribución para instalar DNSCrypt-Proxy.

ArchLinux.

pacman -Syu dnscrypt-proxy dnsmasq

Gentoo.

emerge dnscrypt-proxy dnsmasq -av

Ubuntu 16.04.3 LTS.

sudo add-apt-repository ppa:shevchuk/dnscrypt-proxy
sudo apt update
sudo apt install dnscrypt-proxy dnsmasq

Debian

apt update
apt install dnscrypt-proxy dnsmasq

Configuración de DNSCrypt-proxy

La configuración de DNSCrypt-Proxy es generalizada, funciona bien en ArchLinux, no se ha probado en las otras distribuciones mencionadas aunque se espera que funcione de manera correcta.

Modificando dnscrypt-proxy.toml

En el archivo de configuración de dnscrypt-proxy sólo vamos a modificar unas cuantas opciones y se explicará el motivo de su modificación:
 

  • server_names = ['cisco', 'yandex', 'cloudflare']                                                                                       

Este cambio es opcional, si usted no desea utilizar un servidor DNS específico puede continuar en la siguiente opción, en caso contrario echa un vistazo a este listado para decidir cual usar. Los anteriores fueron elegidos por velocidad.
 

  • listen_addresses = ['127.0.0.1:53000', '[::1:]:53000']

Si usted no está usando IPv6  o lo ha desactivado en su sistema, quita '[::1:]:53000' de la línea anterior, si deja configurado el archivo .toml con esa direción va a obtener el siguiente error:

systemd[1]: Started DNSCrypt-proxy client.
dnscrypt-proxy[1125]: Source [/var/cache/dnscrypt-proxy/public-resolvers.md] loaded
dnscrypt-proxy[1125]: dnscrypt-proxy 2.0.15
dnscrypt-proxy[1125]: Now listening to 127.0.0.1:53000 [UDP]
dnscrypt-proxy[1125]: Now listening to 127.0.0.1:53000 [TCP]
dnscrypt-proxy[1125]: listen udp [::1]:53: bind: cannot assign requested address
systemd[1]: dnscrypt-proxy.service: Main process exited, code=exited, status=255/n/a
systemd[1]: dnscrypt-proxy.service: Failed with result 'exit-code'.

Este error se debe a que si usted no ha adquirido una dirección IPv6 válida o tiene deshabilitado IPv6 en su sistema y la dirección no puede ser asignada. Adicionalmente si va a usar la activación de dnscrypt-proxy mediante socket, deberá dejar la línea así:

listen_addresses = []

El cambio de puerto de 53 a 53000 nos ofrece la posibilidad de ejecutar dnscrypt-proxy cómo un usuario normal del sistema.
 

  • require_dnssec = true

Cambiando esta opción nos aseguramos de que el servidor DNS a usar tiene una capa de protección extra, DNSSEC.

Eso es todo lo que tenemos que hacer con el archivo .toml

Activando dnscrypt-proxy mediante servicio o socket

Anteriormente mencionamos sobre la activación de dnscrypt-proxy, existen dos maneras de hacerlo:

Usando dnscrypt-proxy.socket

Edite el archivo dnscrypt-proxy.socket con el siguiente contenido:

[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:53000
ListenDatagram=127.0.0.1:53000

Tenga en cuenta que si elige esta opción deberá modificar la línea listen_addresses según corresponda.

Usando dnscrypt-proxy.service

Dejamos la línea listen_addresses cómo se explicó más arriba, si va a usar este método (que es el más recomendado) es altamente recomendable inhabilitar el servicio .socket para evitar este tipo de mensajes:

dnscrypt-proxy[16376]: listen udp 127.0.0.1:53000: bind: address already in use

Ejecutamos el comando:

systemctl mask dnscrypt-proxy.socket

Configurando la cache local para los servidores DNS con dnsmasq.

Modificando dnsmasq.conf

Solo añadimos estas líneas al final del archivo:

no-resolv
server=127.0.0.1#53000
listen-address=127.0.0.1

Configurando openresolv

Modificando resolv.conf

En este archivo borramos el contenido que exista y añadimos estas líneas:

nameserver 127.0.0.1                                                                                                                   
options edns0 single-request-reopen timeout:1

Manteniendo la configuraciónde resolv.conf

Necesitamos mantener las configuraciones agregadas al archivo de manera permanete para que DNSCrypt siga funcionando. Existen dos maneras de hacerlo.

  1. Progegiendo resolv.conf contra escritura
    chattr +i /etc/resolv.conf
  2. Modificando /etc/resolvconf.conf

    Solo basta con desmarcar la opción name_servers en el archivo mencionado, quedará así:
    name_servers=127.0.0.1

El siguiente paso es verificar que no haya alguna aplicación usando el puerto 53, para eso ejecutamos:

ss -lp 'sport = :domain'

Si la salida del comando es diferente a lo que está a continuación, verifique cual es la aplicación o servicio que está usando ese puerto y deténgalo. Si es igual, continúe con el paso final.

Netid        State          Recv-Q          Send-Q                    Local Address:Port                     Peer Address:Port 

Ahora que ya tenemos todo configurado, podemos (re)iniciar todos los servicios de red y los nuevos que hemos modificado:

systemctl restart systemd-networkd dnscrypt-proxy dnsmasq #Si usted utiliza otro administrador de red cómo networkmanager, cambie systemd-networkd por el que corresponda.

Una vez finalizado todo debe estar funcionando, si quiere comprobarlo puede ir a https://www.dnsleaktest.com y ejecutar su test, allí veras los resultados de la consulta DNS.

DNS LEak test

Si te ha gustado el artículo, síguenos en FacebookTwitterunete a nuestra charla en Riotúnete a IRC o únete a Telegram y no olvides compartirnos en las redes sociales. También puede hacernos una donación o comprar nuestros servicios.

Etiquetas

Acerca del autor

Pentesting. Estudiante de ingeniería en sistemas y mantenimiento de sistemas informáticos. UNA