Primero, ¿qué es el DNS?
DNS son las siglas de “Domain Name System”, que traducido es Sistema de Nombre de Dominio. Es un traductor a humano de direcciones de internet, ya sean las del antiguo protocolo IPv4, de 32-Bit, o las más modernas IPv6 de 128-Bit.
Los dominios tienen una estructura muy bien definida. Esta el dominio TLD, el de nivel superior, que por ejemplo en “Geeknetic.es” es el “.es”. De este modo cuando queremos resolver una dirección completa nuestro cliente de DNS sabe a dónde dirigirse primero para luego preguntar por el resto de los datos. En este caso tu ordenador o móvil lo primero que hace es ir a los nodos principales de resolución de nombres, en España hay uno muy importante en Barcelona, y le pregunta al dominio superior “.es” donde encontrar “Geeknetic.es”.
Aquí es donde entran los dominios SLD o de segundo nivel. Cuando el “servidor” que controla los “.es” averigua datos sobre “Geeknetic.es” este nos reenvía a los servidores adecuados para averiguar dirección final completa, que sería el subdominio “www” cuando intentamos acceder a la web. Estos servidores son siempre al menos dos, uno principal y otro de backup, pero pueden ser más.
Resumiendo: En la dirección www.geeknetic.es: "www" es un subdominio, "geeknetic" es el SLD y ".es" es el TLD.
Al final el resultado es que obtenemos una dirección IP y nuestro navegador puede iniciar el acceso al servidor y negociar el servicio. Todo esto no se hace cada vez, porque consume muchos recursos, tu cliente de DNS y tu servidor DNS, ambos dos, guardan datos de cache durante algún tiempo para que las consultas se reduzcan al mínimo posible, cuanto más cerca la cache en este proceso, menor la latencia de acceso.
Si gestionamos nuestro propio servidor DNS podemos controlar esas caches e incluso podemos restringir accesos: por seguridad, control parental o lo que nos parezca. Tendríamos la caché local del dispositivo o dispositivos, pero también la cache de servidor mucho más cerca, todas las latencias se reducen.
Una gestión protegida del DNS, y conocer cómo funciona, nos puede ayudar también a evitar muchos ataques de “Phishing” por correo electrónico e incluso los ataques de “Spear Phishing” donde se personaliza mucho mas el ataque puesto que previamente se ha buscado información personal sobre nosotros. Conocer cómo funciona la resolución de nombres es nuestra principal vía de protección porque los ataques siempre usaran dominios desconocidos, poco fiables o que intentan simular otros nombres reconocidos cambiando, por ejemplo, las “O” por “0” (ceros).
Usando Docker para instalar nuestro propio Server DNS en Windows
Aunque nosotros vamos a centrarnos en Windows podéis usar esta misma guía para instalar un servidor DNS en MacOS o Linux con el mismo método puesto que Docker es una plataforma de virtualización que corre sobre cualquier sistema operativo reciente y el contenedor que usaremos correrá sobre una capa de virtualización que es ajena a la máquina que hace de huésped.
- El primer paso sería instalar Docker, para eso hemos preparado esta otra guía completa que podéis consultar en este enlace, es muy sencillo y además nos introduce a otras tecnologías como el subsistema Linux WSL2 o el Hipervisor Hyper-V de Microsoft Windows 10 y Windows 11.
- Una vez instalado Docker tenemos que buscar el contenedor que más se ajuste a nuestras necesidades. Podemos buscarlo a través del Docker Desktop, pero aquí exploraremos la versión de comando, que nos introduce a un entorno de uso más real, donde aprenderemos nociones muy básicas que podemos trasladar a cualquier sistema donde Docker este instalado.
- Verificamos que Docker se instalado bien ejecutando el comando: Docker -v, en cmd o Powershell de Windows, nosotros hemos usado este último, como veis en las capturas.
- El contenedor que nosotros hemos elegido es Pihole, el proyecto oficial, que nos permite control de contenidos y una gestión web del servidor DNS. Lo instalaremos con este comando: docker pull pihole/pihole, que trae el contenedor a nuestro equipo local. Si buscamos por el Docker Desktop tendremos algo como veis en la captura. Básicamente es ponerlo en el buscador, descargar y ejecutar, aunque yo prefiero hacerlo por comando, como haríamos en un servidor Linux o Windows Server solo con interfaz de línea de comandos.
- Ahora vamos a ejecutar el contenedor con nuestra configuración adecuada: docker run -d --name pihole -e TZ="Europe/Madrid" -e ServerIP="localhost" -p 53:53/tcp -p 53:53/udp -p 8082:80 pihole/pihole, el TZ lo marcamos en nuestra localización adecuada, para toda España peninsular Madrid seria lo adecuado, pero podemos usar estas otras: Europe/Madrid (Hora de Europa Central), Europe/Andorra – para Andorra, Africa/Ceuta para Ceuta y Melilla y Atlantic/Canary para el archipiélago canario.
El resto son puertos de acceso al propio servicio y al gestor. El puerto 53 es el estándar para consultas de DNS, debemos usar este o tendremos que hacer una configuración personalizada por maquina y dispositivo y precisamente buscamos lo contrario, una gestión sencilla tanto del servidor como de los dispositivos que lo consumen.
Los mapeos entre puertos, que vemos en el comando de ejecución, se traducen entre puerto de la maquina huésped y puerto del contenedor, por eso nosotros usamos para el interfaz web 8082:80, esto significará que atacamos el puerto 8082 desde fuera, pero se traduce mediante NAT al puerto 80 del contenedor.
- Ahora ya solo tenemos que entrar en gestor de Pihole, con esta dirección, que es la que hemos configurado en la ejecución del contenedor: http://localhost:8082/admin/login.php.
Se trata de una “url” sin protección, configurar https nos daría para una guía adicional puesto que hay que establecer todo el ámbito de seguridad del contenedor, no vamos a complicar hoy mucho mas las cosas, pero para mí sería el siguiente punto, para maximizar la seguridad de nuestros sistemas.
- Para averiguar el Password que se ha asignado durante la instalación, para el gestor web, podemos usar este comando: docker logs Pihole. En la sección “Assigning random password:” encontraremos el Password que se ha asignado aleatoriamente durante la instalación.
- Si queremos hacer lo mismo desde Docker Desktop podemos dirigirnos al contenedor, pulsamos en el menú de “tres puntos” y vamos a detalles. Ahí tenemos acceso al log de ejecución y podemos ver la misma información que por comando.
- Si queremos información de que contenedores tenemos corriendo en el sistema podemos acceder al gestor de Windows o también ejecutar el comando: “Docker ps” (sin las comillas) en cmd o Powershell, ahí tendremos información de todos los contenedores en ejecución y podemos también obtener datos detallados.
La mejor forma de usar nuestro nuevo servidor DNS es en el router
- Para configurar todos los dispositivos de la red con el nuevo servidor lo mejor es que lo configuremos como servidor DNS a nivel de DHCP de nuestro router. Así cualquier dispositivo al que asignamos IPs dinámicas cogerá el nuevo servidor DNS que acabamos de crear.
El DHCP es un gestor del pool de IPs local que nos permite una configuración automática de las direcciones locales y de las configuraciones como DNS o puerta de enlace para que cualquier dispositivo que conectamos a la red, por ejemplo por wifi, tenga una configuración automática y completa de todas las rutas de acceso a internet sin que el usuario tenga que hacer nada de nada.
Cada router tiene un gestor diferente pero básicamente es asignar la IP fija del servidor local en la asignación de servidores DNS, lo haremos en el principal dejando el secundario con algún otro servidor externo, para no dejar sin servicio a nadie en caso de que se nos caiga el servidor local.
- Aplicamos y listo, todos los equipos y dispositivos como móviles, cogerán el nuevo servidor DNS local de forma automática. El resultado es que empezaremos a recibir información en el gestor del servidor Pihole. La información es muy detallada, pero también de fácil acceso, podremos ver todo el uso de red de nuestros clientes, desde que servicios se usan, los servicios bloqueados y habilitados y el trafico de red. Lo mejor es que rápidamente podemos bloquear o habilitar servicios con solo pulsar un botón.
- Pihole gestiona la cache, bloquea publicidad y permite una gestión avanzada del DNS, es perfecto porque además la gestión es completamente mediante interfaz web y permite también la configuración de dominios y hosts que queremos que se gestionen localmente.
Adicionalmente este servidor tiene otras funcionalidades avanzadas como su propio servidor DHCP, para asignar IPs de red local, permite también configurar nuestros servidores DNS de cabecera y tiene una lista de bloqueos automática que se puede gestionar y actualizar con un solo botón. Es perfecto para tener un control parental completamente efectivo en casa.
Si queremos una configuración manual de los dispositivos tendremos que añadir la IP del servidor DNS a nuestros interfaz de red de Windows, o hacer configuración avanzada y estática en dispositivos móviles como iOS o Android, eso sin duda nos da para otra guía interesante aunque para mí no tiene sentido que nos metamos en configuraciones manuales cuando podemos automatizar todo a nivel de router.
Fin del Artículo. ¡Cuéntanos algo en los Comentarios!