DNSCrypt para RPi (o para cualquier sistema si no quieres que nadie vea las webs que visitas)

En este post voy a enseñaros a configurar dnscrypt-proxy (https://dnscrypt.org/) y utilizarlo junto con bind en nuestra Raspberry. La explicación va a partir de que tenéis una Raspberry con Raspbian y Bind instalado, a poder ser como indiqué en mi post anterior (http://www.hackplayers.com/2017/10/usando-la-rpi-para-bloquear-publicidad.html), pero sirve para cualquier sistema GNU/Linux incluso sin Bind instalado. De esta forma, nuestras peticiones dns se realizarán cifradas y así evitaremos que nuestro ISP pueda ver que webs visitamos.

En la web de Dnscrypt podemos descargar su cliente para varios sistemas operativos, pero lamentablemente no ofrecen un paquete deb para nuestro Raspbian, por lo que tendremos que compilarlo. Para facilitar este proceso podemos utilizar el siguiente script: https://github.com/simonclausen/dnscrypt-autoinstall . Este script se encarga de descargar la última versión de dnscrypt-proxy e instalarla, incluidos los archivos necesarios para systemd, un usuario para el servicio,.... Empecemos.

Descargamos el script de autoinstalacion de Github:

wget https://raw.githubusercontent.com/simonclausen/dnscrypt-autoinstall/master/dnscrypt-autoinstall

El script comprueba si hay algún servicio escuchando en el puerto 53, y si lo hay se para. Por este motivo, antes de ejecutarlo debemos parar bind con el comando "systemctl stop bind9.service". Y de manera temporal, modificar el archivo /etc/resolv.conf indicando unos dns externos, para que nuestra Raspberry siga teniendo acceso a Internet.

Una vez hecho esto, ejecutamos el script de instalación de dnscrypt:

bash dnscrypt-autoinstall

Al hacer ésto se encargará de instalar las dependencias y compilar dnscrypt-proxy (este proceso va a tardar unos minutos). Solo nos preguntará si queremos ver el listado de proveedores que ofrecen la posibilidad de usar dnscrypt y cual de estos queremos usar. Yo indiqué opendns (opción 9), pero podéis elegir el que queráis. Con esto ya quedará instalado el servicio.

Ahora solo nos faltarían los últimos retoques.

El script crea dos instancias de dnscrypt-proxy, una en la ip 127.0.0.1 con el proveedor de dns que indicamos durante la instalación, y otra de fallback en la ip 127.0.0.2 con el proveedor dnscrypt.eu-dk.

En las pruebas que hice, este último proveedor nunca me responde correctamente las peticiones dns, por lo que vamos a cambiarlo. También vamos a cambiar las ips en las que responde cada daemon de dnscrypt, ya que la ip 127.0.0.1 la va a usar bind.

Para hacer ello vamos a editar el achivo /etc/systemd/system/dnscrypt-autoinstall.conf, y cambiaremos el valor de DNSCRYPT_LOCALIP por la ip 127.0.0.3 y el valor de DNSCRYPT_RESOLVER2 por d0wn-es-ns1 o cualquier otro proveedor de dnscrypt. Despues de hacerlo tenemos que hacer un reload de systemd con el comando "systemctl daemon-reload" y después un reinicio del servicio de dnscrypt-proxy con el comando "systemctl restart dnscrypt-autoinstall".

Con esto ya estaría instalado y configurado nuestro dnscrypt-proxy. Vamos a probar que todo funciona correctamente antes de configurar bind para que lo utilice. Para probarlo vamos a usar el comando dig de la siguiente forma:

root@host:~/proba# dig +short google.es @127.0.0.3
216.58.206.99
root@host:~/proba# dig +short google.es @127.0.0.2
216.58.198.163

Si nos devuelve una ip, es que todo esta funcionando correctamente. Si no es asi, tendreis que revisar si habeis configurado todo bien, o probar otro proveedor de dnscrypt por si el que habeis elegido no funciona correctamente.

Ahora vamos a modificar la configuración de bind para que use nuestro servicio de dnscrypt-proxy. Para esto editamos el archivo /etc/bind/named.conf.options y modificamos el apartado de forwarders quitando las que tenemos y poniendo las ips en las que escuchan nuestros demonios de dnscrypt-proxy:

forwarders {
    127.0.0.3
    127.0.0.2
};

Reiniciamos bind para aplicar los cambios, con el comando "systemctl restart bind9.service". Después tendremos que modificar de nuevo el archivo /etc/resolv.conf para que use la ip 127.0.0.1, que seria la de bind. Pero antes tendremos que sacarle la opción de inmutabilidad, ya que el script de instalación de Dnscrypt lo marca como inmutable y no nos permitira cambiarlo. Para hacer esto ejecutamos el comando "chattr -i /etc/resolv.conf" y después editamos.

Probamos de nuevo que todo sigue funcionando correctamente:

root@host:~/proba# dig +short google.es
216.58.206.99

Si devuelve una ip es que todo esta correcto. En caso contrario revisad si habéis indicado correctamente los forwarders o si los proveedores de dns que habéis elegido responden correctamente.

Llegados a este punto, las consultas dns de vuestra Raspberry y cualquier otro dispositivo de vuestra red local que use como dns vuestra Raspberry, se estarían realizando cifradas por dnscrypt-proxy y cacheadas por bind.
Y hasta aquí este post, espero que os resulte de utilidad.

Un saludo.

Artículo cortesía de Romám

Comentarios

  1. ¿Este sistema es compatible con Pi-hole en la RPi? Gracias.

    ResponderEliminar

Publicar un comentario