📘 Documentación de Configuración del Servicio DNS con Bind9 en Docker
🧾 Descripción general
Este entorno de desarrollo define un servidor DNS maestro que resuelve nombres del dominio ficticio edt.carlos
y sus subdominios usando Bind9, dentro de un contenedor Docker. También se integran otros servicios como nginx
, laravel
y mysql
en una red común (net-m8
).
📁 Estructura de archivos
project-root/
│
├── bind9/
│ ├── named.conf
│ └── db.edt.carlos
│
└── docker-compose.yml
📄 Archivo named.conf
options {
directory "/var/cache/bind";
listen-on { any; };
listen-on-v6 { any; };
allow-query { any; };
recursion yes;
};
zone "edt.carlos" {
type master;
file "/etc/bind/db.edt.carlos";
};
zone "edt.carlos.admin" {
type master;
file "/etc/bind/db.edt.carlos";
};
🔍 Explicación:
- options: configura el comportamiento general del servidor Bind.
- Acepta peticiones desde cualquier IP (
allow-query { any; };
). - Permite recursividad.
- zone:
- Se definen dos zonas:
edt.carlos
yedt.carlos.admin
, ambas gestionadas desde el mismo archivo de zonadb.edt.carlos
.
🗂️ Archivo db.edt.carlos
$TTL 86400
@ IN SOA edt.carlos. root.edt.carlos. (
2025012901 ; Serial
3600 ; Refresh
1800 ; Retry
1209600 ; Expire
86400 ) ; Minimum TTL
@ IN NS ns.edt.carlos.
ns IN A dns
@ IN A nginx
www IN A nginx
🔍 Explicación:
- Se define la zona raíz
edt.carlos
con: - Servidor de nombres
ns.edt.carlos
. - Registro A que apunta:
ns.edt.carlos
al contenedordns
.edt.carlos
ywww.edt.carlos
al contenedornginx
.
- Los nombres (
dns
,nginx
) se resuelven a través de Docker gracias a la red interna.
🐳 Archivo docker-compose.yml
services:
mysql:
image: alpine:latest
container_name: mysql
command: tail -f /dev/null
networks: [net-m8]
laravel:
build:
context: .
dockerfile: Dockerfile-laravel
container_name: laravel
volumes:
- laravel-app:/laravel
networks: [net-m8]
nginx:
image: alpine:latest
container_name: nginx
depends_on: [laravel]
command: tail -f /dev/null
ports: ['80:80']
networks: [net-m8]
dns:
image: ubuntu/bind9
container_name: dns
ports:
- "53:53/tcp"
- "53:53/udp"
volumes:
- ./bind9/named.conf:/etc/bind/named.conf
- ./bind9/db.edt.carlos:/etc/bind/db.edt.carlos
networks:
- net-m8
volumes:
laravel-app:
driver: local
networks:
net-m8:
driver: bridge
🔍 Explicación:
- El servicio
dns
usa la imagen oficialubuntu/bind9
. - Mapea los puertos estándar de DNS (53 TCP y UDP).
- Monta los archivos de configuración de la zona y del servicio desde el directorio local
bind9/
. - Se conecta a la red
net-m8
, lo que permite resolver nombres de los demás contenedores.
🧪 Pruebas
Una vez todo esté en marcha (docker compose up -d
), puedes hacer pruebas:
🔎 Desde el contenedor nginx
:
apk add bind-tools # instalar dig en Alpine
dig @dns www.edt.carlos
🔎 Desde el host:
dig @localhost www.edt.carlos