DNSCrypt - Un protocolo para cifrar las comunicaciones entre un cliente y el resolver DNS

No Comments
DNSCrypt es una implementación de DNSCurve (Protocolo de Seguridad para DNS, diseñado por Daniel J. Bernstein), que sirve para cifrar el tráfico o las peticiones DNS entre el cliente y el servidor de nombres (DNS Resolver) que soporte dicho protocolo.

¿Por que debería usar DNSCrypt?


Proteger la red local contra (cierto tipo de) ataques MITM, prevenir DNS leaks, proveer confidencialidad a las peticiones DNS, evitar la censura de determinados sitios, saltar un firewall, entre otros.

Lista de resolvers con soporte a DNSCrypt

> Link to Github.
Si no sabes cual elegir te recomiendo dnscrypt.eu como un buen punto donde comenzar. Free, No logs, No censuras.

Instalación

El demonio (dnscrypt-proxy) trabaja en muchas plataformas, desde Linux, Android (rooted), iOS (Jailbroken), FreeBSD, OpenBSD, y Windows entre otros. En este post voy a explicar como instalar dnscrypt-proxy en 3 plataformas: Linux, Android y Windows. Especialmente haré enfoque en la instalación en Android por la escasa información que he llegado a encontrar en internet.

  1. Instalación en Linux (Para usuarios de ArchLinux)
  2. Instalación en Linux (Compilando desde la fuente)
  3. Instalación en Android
  4. Instalación en Windows

Instalación (ArchLinux)

Al contrario de lo que muchos podrían pensar, instalar DNSCrypt en ArchLinux es sencillo puesto que se el binario se encuentra en los repositorios oficiales.
# pacman -S dnscrypt-proxy
Listo, ahora es posible correr el servicio a través de systemd.
# systemctl enable dnscrypt-proxy.service
# systemctl start dnscrypt-proxy.service
Por defecto dnscrypt-proxy está pre-configurado en /etc/conf.d/dnscrypt-proxy para aceptar peticiones entrantes en 127.0.0.1:53 a un OpenDNS resolver.

Para comenzar a utilizar dnscrypt debes ajustar la configuración DNS para apuntar a 127.0.0.1.

Primera Opción (No recomendado)

Editar la configuración DNS desde NetworkManager (Gnome, KDE).

Segunda Opción

Editar el archivo resolv.conf y (opcionalmente) hacer el archivo inmutable para prevenir que otra aplicación reescriba dicho archivo.

# nano /etc/resolv.conf
=================================================
nameserver 127.0.0.1

Hacer el archivo inmutable (opcional):
# chattr +i /etc/resolv.conf

Ve al sitio dnsleaktest y realiza el "Standard Test" para comprobar si dnscrypt está funcionando correctamente.

Cambiar de resolver DNS

Para cambiar de resolver DNS, simplemente debes editar el archivo /etc/conf.d/dnscrypt-proxy en el cual verás algo así:

DNSCRYPT_LOCALIP=127.0.0.1
DNSCRYPT_LOCALPORT=53
DNSCRYPT_USER=nobody
DNSCRYPT_PROVIDER_NAME=2.dnscrypt-cert.opendns.com
DNSCRYPT_PROVIDER_KEY=B735:1140:206F:225D:3E2B:D822:D7FD:691E:A1C3:3CC8:D666:8D0C:BE04:BFAB:CA43:FB79
DNSCRYPT_RESOLVERIP=208.67.220.220
DNSCRYPT_RESOLVERPORT=443

OpenDNS mantiene logs. Te recomiendo elegir un proveedor de la lista mencionada arriba en este mismo post.

DNSCrypt como redireccionador a la cache DNS local (Opcional, Recomendable)

En recomendable instalar un DNS cache resolver para almacenar las peticiones previamente hechas (DNS Queries).
Ejemplo: configuración para Unbound
Instalamos Unbound.

# pacman -S unbound

Editar o agregar las siguientes lineas a /etc/unbound/unbound.conf


do-not-query-localhost: no
forward-zone:
  name: "."
  forward-addr: 127.0.0.1@54

Unbound escucha por defecto en el puerto 53, por lo tanto debemos cambiar el puerto de escucha de DNSCrypt (Puerto 54 en este ejemplo).

Modificar el archivo de configuración de DNSCrypt /etc/conf.d/dnscrypt-proxy para coincidir con los cambios:

DNSCRYPT_LOCALIP=127.0.0.1
DNSCRYPT_LOCALPORT=54
...

Luego, puedes iniciar los servicios.

# systemctl enable {dnscrypt-proxy,unbound}.service
# systemctl start dnscrypt-proxy.service
# systemctl start unbound.service

DNSCrypt debe iniciar antes que Unbound, por lo tanto debes incluir Before=unbound.service en la sección [Unit] de /usr/lib/systemd/system/dnscrypt-proxy.service.

Instalación (Linux)

Vamos a compilar DNSCrypt directamente desde las fuentes. Pese a como suene no es complicado y tomará solo un par de minutos.

Instalando dependencias

Para poder compilar DNSCrypt debemos instalar libsodium. Es posible que tengas la librería en los repositorios oficiales de la distro de tu elección, te recomiendo buscar e instalar si está disponible. En todo caso, procedemos a compilar e instalar libsodium desde la fuente (http://download.libsodium.org/ | Última versión es 0.7.1 al momento de escribir este post).

$ wget http://download.libsodium.org/libsodium/releases/libsodium-0.7.1.tar.gz
$ tar -xvzf libsodium-0.7.1.tar.gz
$ cd libsodium-0.7.1
$ ./configure
$ make
$ make check
Si no hay errores, procede a instalar la librería.
$ sudo make install

Compilando DNSCrypt

Descargamos la última versión de DNSCrypt desde "http://download.dnscrypt.org/dnscrypt-proxy/". | Última versión 1.4.0 al momento de escribir este post.

$ wget http://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-proxy-1.4.0.tar.gz
$ tar -xvzf dnscrypt-proxy-1.4.0.tar.gz
$ cd dnscrypt-proxy-1.4.0
$ sudo ldconfig
$ ./configure
$ make
$ sudo make install
Si todo está bien tendrás un binario dnscrypt-proxy instalado en /usr/sbin,/usr/local/sbin, o /usr/bin.

Modo de Uso

La forma más encilla es simplemente especifiar el --resolver-name provisto en el archivo dnscrypt-resolvers.csv (O en el sitio mencionado al comienzo del post.) Por ejemplo:

# dnscrypt-proxy --daemonize --resolver-name=dnscrypt.eu-nl

Debes editar el archivo resolv.conf y (opcionalmente) hacer el archivo inmutable para prevenir que otra aplicación reescriba la configuración que vas a realizar.

# nano /etc/resolv.conf
=================================================
nameserver 127.0.0.1

Hacer el archivo inmutable (opcional):
# chattr +i /etc/resolv.conf

Ve al sitio dnsleaktest y realiza el "Standard Test" para comprobar si dnscrypt está funcionando correctamente.

Ejecuta dnscrypt-proxy --help para ver más opciones. En la siguiente sección podrás ver un ejemplo más avanzado.

Los próximos pasos de la instalación lo veremos en una siguiente entrada.

0 comentarios

Publicar un comentario en la entrada