This page looks best with JavaScript enabled

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

 ·   ·   4 min read

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](https://wiki.archlinux.org/index.php/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/"](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.

Share on
Support the author with

Avatar
WRITTEN BY