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.
- Instalación en Linux (Para usuarios de ArchLinux)
- Instalación en Linux (Compilando desde la fuente)
- Instalación en Android
- 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.