Curso de servidores linux

¿Cómo funciona realmente DNS?

Cuando escribes:

http://web.lab.local

Pasan estas cosas:

  1. El navegador necesita una IP, no un nombre.

  2. El sistema operativo pregunta: 👉 “¿Qué servidor DNS tengo configurado?”

  3. Le hace una consulta tipo:

    ¿Cuál es la IP de web.lab.local?
  4. El servidor DNS responde:

    web.lab.local → 192.168.1.50
  5. Ahora sí, el navegador puede ir a:

    http://192.168.1.50

Tipos de servidores DNS

Existen 3 tipos principales:

🔹 1. DNS Recursor (caché)

Es el que normalmente usas (8.8.8.8, 1.1.1.1). Busca respuestas por internet y las guarda en caché.

🔹 2. DNS Autoritativo

Es el dueño oficial de un dominio.

Ejemplo:

  • Para lab.local, TU Linux Mint será el que diga la verdad.
  • Si alguien pregunta por web.lab.local, tu servidor responde directamente.

🔹 3. DNS raíz y jerárquico

Internet está organizado así:

.
└── com
    └── google.com

Pero en tu práctica trabajaremos con:

lab.local

Que será un dominio interno de laboratorio.


Situación actual de tu servidor

Ya tienes en Linux Mint:

  • Nginx (80 → Apache 8080)
  • Apache
  • Node en 3000
  • MariaDB
  • SSH

Nada de eso usa el puerto 53.

👉 DNS usa puerto 53 (UDP y TCP) 👉 No hay conflicto con tus otros servicios.


PASO 1 - IP fija (MUY IMPORTANTE)

Un servidor DNS debe tener IP estable.

Si hoy es 192.168.1.50 y mañana cambia a 192.168.1.72, todo deja de funcionar.

Ver tu IP actual

1ip a

Busca algo como:

inet 192.168.1.50/24

¿Por qué debe ser fija?

Porque los clientes configurarán como DNS:

192.168.1.50

Si cambia → no resolverán nombres.


PASO 2 - Instalar BIND9

BIND9 es el servidor DNS clásico en Linux.

1sudo apt update
2sudo apt install bind9 bind9utils bind9-doc dnsutils

¿Qué instala cada cosa?

  • bind9 → el servidor
  • dnsutils → herramientas como dig
  • bind9utils → validación de zonas
  • bind9-doc → documentación

Comprobar que está activo:

1systemctl status bind9

Debe salir: active (running)


¿Cómo se organiza BIND internamente?

Configuración principal:

/etc/bind/

Archivos importantes:

  • named.conf → archivo principal
  • named.conf.local → donde declaras tus zonas
  • named.conf.options → opciones globales
  • db.* → archivos de zona (registros DNS)

PASO 3 - Crear una zona DNS

Vamos a crear un dominio interno:

lab.local

Esto significa:

👉 Tu servidor será autoridad para todo lo que termine en .lab.local


Editar archivo de zonas

1sudo nano /etc/bind/named.conf.local

Añade:

1zone "lab.local" {
2  type master;
3  file "/etc/bind/db.lab.local";
4};

¿Qué significa esto?

  • zone "lab.local" → dominio que gestionamos
  • type master → somos el servidor principal
  • file → archivo donde estarán los registros

PASO 4 - Crear archivo de zona

1sudo nano /etc/bind/db.lab.local

Ejemplo completo:

1$TTL    300
2@       IN      SOA     ns1.lab.local. admin.lab.local. (
3                        2026021101
4                        3600
5                        1800
6                        604800
7                        300 )
8
9@       IN      NS      ns1.lab.local.
10
11ns1     IN      A       192.168.1.50
12
13web     IN      A       192.168.1.50
14api     IN      A       192.168.1.50
15db      IN      A       192.168.1.50
16
17www     IN      CNAME   web.lab.local.

Explicación línea por línea

$TTL 300

Tiempo que las respuestas pueden quedarse en caché (5 minutos).


SOA

Start Of Authority.

Contiene:

  • servidor principal (ns1.lab.local.)
  • email admin (admin.lab.local.)
  • número de serie

Serial

2026021101

Formato recomendado:

AAAAMMDDXX

Si cambias algo → debes subir este número.


NS

Indica quién es el servidor DNS oficial.


A

Relaciona nombre con IP.

web.lab.local → 192.168.1.50

CNAME

Alias.

www.lab.local → web.lab.local

Validar configuración

Muy importante antes de reiniciar:

1sudo named-checkconf
2sudo named-checkzone lab.local /etc/bind/db.lab.local

Si hay errores aquí → no reinicies aún.


Reiniciar servicio

1sudo systemctl restart bind9

Firewall

Si usas UFW:

1sudo ufw allow 53/udp
2sudo ufw allow 53/tcp

DNS usa UDP normalmente, pero también TCP.


Probar desde el propio servidor

1dig @127.0.0.1 web.lab.local

Debe aparecer:

ANSWER SECTION:
web.lab.local.   300   IN   A   192.168.1.50

Hacer que otros equipos usen tu DNS

En Windows:

Panel de control → Red → IPv4 → DNS:

Servidor DNS preferido: 192.168.1.50

Probar:

1nslookup web.lab.local

Integrarlo con tus servicios actuales

Ahora puedes usar:

  • http://web.lab.local → Nginx → Apache
  • http://api.lab.local:3000 → Node
  • http://db.lab.local (solo para pruebas, no expongas MariaDB)

¿Qué hemos construido realmente?

Tu Linux Mint ahora es:

  • 🔹 DNS autoritativo para lab.local
  • 🔹 Servidor web
  • 🔹 Proxy inverso
  • 🔹 Servidor Node
  • 🔹 Base de datos
  • 🔹 SSH