Venid a mi, publicidades de Internet (o de cómo montar AdGuard)
Bienaventurados seáis, gentes de Internet.
La semana pasada nos metimos un empacho magnífico explorando docker y docker-compose y de remate y aprovechando el tirón febril de abrazar tecnologías nuevas, nos montamos un servidor de música casero para nuestra propia música que aquello da gloria verlo, usarlo y gozarlo.
La cosa nos quedó muy bien y podíamos escuchar nuestra propia música en una web nuestra, en apps de móvil… en todas partes. Un gozo casi pecaminoso, ¿qué tal os ha ido?, ¿lo disfrutáis? Seguro que sí.
La cuestión es que funcionar, funciona fetén, pero desde el punto de vista de practicidad, nos quedó un poco regulinchi. Desplegamos un docker que exponía un puerto y nos tenemos que conectar a: http://la.ip.de.nuestroservidor:el_puerto_en_cuestión y ahí encontrábamos nuestro cacharro.
Ésto, es hermoso y está bien, pero introduce no pocos problemas.
Primero, que es un pestiño escribirlo en el navegador. Nos tenemos que acordar de la IP y del puerto. Eso no está bien. Lo segundo, que si queremos acceder desde fuera de la red de nuestra casa es exponencialmente peor.
Para empezar tenemos que abrir un puerto en el router al mundo, cosa que siempre nos debe dar yuyu. Y segundo y casí peor, si estamos fuera de casa, tenemos que poner nuestra IP pública, que claro, vuestro proveedor de Internet favorito tiene la costumbre de cambiarla. Además, si usáis una app móvil, tenéis que cambiar la dirección del servidor dependiendo de si estáis en casa o no.
Una puta mierda, vamos, resumiendo.
Vamos a ponerle solución. En éste post vamos a tratar el segundo y último tema que va a requerir que nos gastemos un dinerete. Que en realidad puede ser prácticamente grátis, pero es probable que haya que hacer algún dispendio. A demás va a requerir que investiguéis un poquitín qué opción os seduce más.
Lo primero que vamos a necesitar es un nombre de dominio. Digamos que os mola el dominio soberaniadigital.digital para entrar a las cosas de vuestro server. Pues nada, tendréis que mirar si el dominio está libre y pagarlo. Lo podéis comprar por un año, tres… un poco como veáis. Y huelga decir que para los nombres de dominio os podéis ir a un sitio carérrimo o a sitios como NameCheap que por pocos Eurillos os hacéis con vuestro nombre de dominio favorito. Por otro lado, el tema de la IP.
Si os habéis agenciado un server en la nube (Linode, CloudOcean, cosas así…) igual os dan una IP fija y ya no tenéis que hacer nada más. En ése caso os invito a investigar el registro de vuestro cacharro con CloudFlare que os dará muchas alegrías y bienaventuranzas.
Pero si os lo habéis montado en casa, tenemos que solucionar el tema de la IP cambiante. Hay servicios para ésto, que además son más viejos que el hilo negro, algunos clasicazos son No-IP o DuckDNS. DuckDNS, por ejemplo, es gratis, así que en realidad, dispendio, dispendio, os podéis montar ésto por muy poco dinero.
Yo personalmente, uso no-ip por una cuestión que veremos cuando os cuente lo del servidor de correo, pero como veáis.
Bueno. Pues digamos que ya lo tenemos. Tenéis un nombre de dominio y usando un servicio de actualización de IP dinámica, apunta a vuestra máquina.
Excelente.
Vamos a por el tema que nos ocupa, ¿cómo pasamos de acceder a nuestro contenedor a través de http://ip.de.tu.server:tupuerto a acceder a él a través de http://soberaniadigital.digital:tupuerto?
Es decir, cómo le ponemos un nombre de dominio a una IP. De éso se vienen encargando los servidores de DNS. Todos los server tienen una IP pero tú entras a todas las páginas usando un nombre que puedes recordar. Un servido de DNS (Domain Name System) hace exáctamente éso, traduce los números de una IP a un texto. Por cierto, el dueño del servidor, tiene toda la información de todas las veces que tú le has pedido a su servidor traducir números a letras y sabe, por tanto, todos los sitios a los que has entrado. Es algo precioso.
Cuando registréis el nombre de dominio, ésa traducción se va a hacer sóla y desde fuera de la red de vuestra casa váis a poder entrar con vuestro nuevo y flamante nombre, pero ¿dentro de casa?. Porque dentro de casa no tenéis (aún) un servidor de DNS que os traduzca cosas.
Pues vamos a montar uno.
Yo he escogido AdGuard. ¿Por qué AdGuard? Pues porque hace varias cosas muy bien todas en el mismo software. Con el mismo contenedor, vamos a poder:
- Resolver el tema éste cochino de las IPs
- Bloquear publicidad para todos los dispositivos de nuestra red
- Hacer de servidor DHCP (os cuento al final)
- Incluso establecer políticas de control parental por si habéis decidido reproduciros y hay sitios a los que no se debería entrar
Muy completo todo.
Vamos a por ello con lo que aprendimos la semana pasada, le echamos un vistazo al dockercito. En la documentación de AdGuard vienen cosas muy interesantes, pero un docker-compose.yml ya hecho como el que vimos la semana pasada, no viene. Ahora bien, como ya sabemos qué hace cada parte, no tenemos problema en escribir el nuestro propio.
Éste es el mío, por ejemplo:
version: "3"
services:
app:
image: 'adguard/adguardhome:latest'
container_name: adguard
ports:
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp"
- "68:68/udp"
- "89:80/tcp"
- "4043:443/tcp"
- "4043:443/udp"
- "3000:3000/tcp"
- "853:853/tcp"
- "853:853/udp"
- "8853:8853/udp"
- "784:784/udp"
- "5443:5443/tcp"
- "5443:5443/udp"
volumes:
- /la_ruta_que_hayas_decidido/adguard/data:/opt/adguardhome/work
- /la_ruta_que_hayas_decidido/adguard/config:/opt/adguardhome/conf
network_mode: "host"
restart: always
La cosa es bien de sencilla. Una imagen, un nombre de contenedor, que se reinicie siempre que se pare, los puertos que va a usar para sus cosas de DNS, dos carpetas para guardar sus ficherines y una cosa nueva: network_mode: «host». La semana pasada vimos que al arrancar un docker-compose, si no definíamos una red en específico creaba una nueva para ése o ésos contenedores. Bueno, ésto está bien y es hermoso, pero también podemos decidir nosotros dónde queremos desplegar un contenedor. Le podemos poner un nombre de red que ya exista o en mi caso, éste contenedor en concreto, quiero que esté en la misma red que el propio server. La red del host. Así que así se lo hago saber.
Leed la documentación bien. Si estáis desplegando ésto en una RaspberryPi (o cualquier otro entorno con resolved) os va a fallar, porque os va a decir que no puede usar el puerto 53. Al final de la documentación os viene un paso a paso de cómo arreglarlo.
¡Albricias!, ¡Jolgorios!, ¡Ya tenemos un servidor casero de DNS que nos bloquea publicidad!
Gentes de la gleba: Pero a ver, mameluco, levantado está, pero ésto no hace nada. Mi IP sigue sin traducirse a un nombre y veo publicidad igual
A veeeeeeeeeer, joder, qué panda. Vamos a ver. Levantado está, pero aún no le hemos dicho lo que tiene que hacer.
Le tenemos que decir a nuestros dispositivos que utilicen la ip de la máquina dónde hemos levantado el contenedor de AdGuard como servidor DNS. Ésto es, si lo habéis levantado en una RaspberryPi que tiene de IP: 10.9.10.100, tenéis que indicarle a vuestro ordenador que use ésa IP como servidor DNS para que ésto empiece a funcionar. Me apuesto dinero a que si buscáis que IP tenéis en el servidor DNS de vuestro ordenador viene la del router. Echádle un vistazo
Gentes de la gleba: ¡Pero no me jodas!, ¿y así cacharro por cacharro?
Pues… es una manera.
Hay otras. Si vuestro proveedor de Internet no os ha jodido la vida, podéis ir a la configuración del router y en los parámetros de DHCP poner vuestra propia IP para vuestro servidor DNS. Ahora bien, vuestro proveedor de Internet, siempre pendiente de vuestra seguridad y bienestar es muy probable que no os deje hacerlo y os tengáis que comer sus IPs porque sí. Porque os ama. Porque se preocupa.
De ser así, yo sólo he encontrado dos soluciones.
O cambiar los DNS a mano cacharro por cacharro, que para equipos fijos no me molesta tanto, pero para dispositivos móviles o portátiles, me molesta un huevo, porque cuando salgo de casa me deja de funcionar el DNS o…
U os compráis un extensor de rango de WiFi que ahí sí que le podéis poner la configuración que os dé la gana.
Claro. Para el extensor de rango de WiFi le tenemos que decir al router que no haga nada con el DHCP, pero hete aquí que AdGuard también hace de servidor DHCP si se lo pedimos. Podéis desactivar el DHCP del router, activar el de AdGuard (los dos a la vez no) y en vuestro extensor de WiFi ponéis el DNS que os de la gana.
Es complicadete, pero pensad que sólo lo tenéis que hacer una vez.
Hecho todo ésto, lo hayáis hecho como lo hayáis hecho, si renováis vuestra IP veréis que navegáis sin publicidad. Yo tengo reglas en AdGuard. De las páginas web que me simpatizan, me como la publicidad, de las que no… pues no. Y éso no sólo es hermoso, es que de repente todo va varios órdenes de magnitud más rápido al navegar al no tener que cargar tanto banner indeseable, pero aún no hemos solucionado lo de la IP y el nombre de nuestro servidor de música.
En el menú de Adguard hay una opción que pone Filters => Custom Filters. Aquí vamos a poner reglas de DNS que no son las que vienen por defecto. Para lo que queremos hacer es muy sencillo. Si ponemos algo como:
10.9.10.100 (la ip del server) musicote.soberaniadigital.digital
Y le dáis a guardar. Cuando pongáis http://musicote.soberaniadigital.digital:666 (que es el puerto en el que montamos Navidrome) en vuestro navegador, éste le va a pedir a su servidor DNS de confianza que le traduzca éso a una IP. Como resulta que hemos configurado todo para que ése servidor de DNS sea nuestro cacharro y en nuestro cacharro hay un AdGuard, le va a devolver que se tiene que ir a 10.9.10.100 que resulta ser nuestro propio servidor.
POR LO TANTO con todo ésto montado, cuando usemos el dominio soberaniadigital.digital dentro de casa, AdGuard nos los traduce y fuera de casa, nos lo traduce nuestro proveedor de IP dinámica.
¿Es bello o no es bello?
Hay dos cosas que no hemos solucionado. Por un lado lo del puerto. Éso de andar poniendo el número del puerto no sólo no mola, si no que seguimos teniendo un puerto abierto a Internet en nuestro router y claramente no deberíamos.
Por otro lado, estamos entrando a sitios con http:// sin certificado ni nada. A pijo sacao y tampoco deberíamos.
Ésto lo vamos a solucionar todo con un servicio más y de manera sencilla, pero será ya la semana que viene. Así nos da tiempo a jugar un poco con AdGuard, dejarlo bien configuradito, disfrutar de navegar sin publicidad salvo que decidamos lo contrario y de cómo poco a poco nos estamos montando un ecosistema de lo más pintón.
La semana que viene tratamos el segundo y último tema de cómo apañar nuestra conectividad casera con lo del puerto y los certificados y a partir de ahí, el festival del despliegue del contenedor.
Hasta más ver.