Hola a tod@s,
En este post vamos a ver cómo instalar y configurar servidores DNS externos con bind9, estos servidores DNS externos serán los servidores públicos DNS de nuestra infraestructura, dónde vamos a publicar nuestros servicios en Internet, vamos a desplegar un servidor primario y otro secundario.
Que vamos a necesitar:
- Máquina Ubuntu Server 24.04 LTS con el Rol de DNS bind9, este será el DNS primario, ubicada en nuestro entorno on-premise
- Máquina Ubuntu Server 24.04 LTS con el Rol de DNS bind9, este será el DNS secundario, ubicada en nuestro entorno cloud de Azure
- Los dos servidores estarán en nuestra DMZ (on-premise y cloud)
- Proveedor ISP de DNS, dónde vamos a configurar nuestros propios Servidores DNS
- Un dominio DNS público contratado con un ISP, en nuestro caso, el dominio es ragasysweb.com
- En Firewall Fortigate, vamos a configurar un NAT Static y crear las reglas de acceso para la parte on-premise
- En Firewall OPNsense, vamos a configurar un NAT Static y crear las reglas de acceso para la parte cloud
Está será la infraestructura que vamos a desplegar:
- Como podemos ver, tenemos dos máquinas con Ubuntu Server 24.04 LTS, una para el DNS primario on-premise y otra para el DNS secundario en Azure:
- En las dos máquinas debemos de instalar bind9 ejecutando apt-get install bind9:
- Una vez que ya tenemos desplegado el rol de DNS en ambas máquinas, lo primero que vamos a realizar, es en nuestros firewalls fortigate on-premise y opensense en Azure, realizar las configuraciones necesarias para el acceso externo a nuestros servidores DNS públicos.
- Empezamos en el fortigate on-premise, dónde hemos creado este NAT estático, que lo que hace es mapear nuestra IP externa 192.168.1.210 con la IP interna dónde se ubica el servidor DNS, en este caso el servidor DNS primario, mapeando también el puerto TCP/UDP 53 externo con el puerto TCP/UDP 53 interno, que es el que utiliza el servicio DNS:
- Una vez creado el NAT estático, configuramos la siguiente política en nuestro fortigate, dónde le indicamos que desde cualquier origen externo y con destino al servicio DNS Externo de nuestra infraestructura, le vamos a permitir el acceso:
- Seguimos en el opnsense de Azure, dónde hemos creado este NAT estático, que lo que hace es mapear nuestra interface WAN externa con la IP interna dónde se ubica el servidor DNS, en este caso el servidor DNS secundario, mapeando también el puerto TCP/UDP 53 externo con el puerto TCP/UDP 53 interno, que es el que utiliza el servicio DNS:
- Una vez creado el NAT estático, configuramos la siguiente política en nuestro opnsense, dónde le indicamos que desde cualquier origen externo y con destino al servicio DNS Externo de nuestra infraestructura, le vamos a permitir el acceso:
- Una vez que ya tenemos desplegado bind9 en ambas máquinas y los accesos configurados en nuestros firewalls, vamos a trabajar sobre el servidor primario DNS01, y nos creamos una zona primaria de resolución directa «ragasysweb.com» cuyo archivo de zona se llamará «db.ragasysweb.com» y se almacenará en «/var/lib/bind»:
nano /etc/bind/named.conf.local
zone «ragasysweb.com» {
type master;
file «/var/lib/bind/db.ragasysweb.com»;
};
- Ahora, nos vamos a crear una zona primaria de resolución inversa (esta parte de la resolución inversa, es solo a modo de ejemplo), para que resuelva direcciones IP pertenecientes a la dirección de red 80.31.203.0/24, el nombre del archivo de zona será db.80.31.203.rev y se almacenará en «/var/lib/bind»:
nano /etc/bind/named.conf.local
zone «203.31.80.in-addr.arpa» {
type master;
file «/var/lib/bind/db.80.31.203.rev»;
};
- Ahora, en nuestro servidor secundario DNS02, vamos a crear una zona secundaria de resolución directa «ragasysweb.com» cuyo archivo de zona se llamará «db.slave.ragasysweb.com» y se almacenará en «/var/lib/bind», en esta zona debemos de indicar cual es el servidor DNS primario:
nano /etc/bind/named.conf.local
zone «ragasysweb.com» {
type slave;
file «/var/lib/bind/db.slave.ragasysweb.com»;
masters { 80.31.203.9; };
};
- Nos creamos también, una zona secundaria de resolución inversa, para que resuelva direcciones IP pertenecientes a la dirección de red 80.31.203.0/24, el nombre del archivo de zona será db.slave.80.31.203.rev y se almacenará en «/var/lib/bind»:
nano /etc/bind/named.conf.local
zone «203.31.80.in-addr.arpa» {
type slave;
file «/var/lib/bind/db.slave.80.31.203.rev «;
masters { 80.31.203.9; };
};
- Lo siguiente será configurar, la transferencia de zona en el servidor primario DNS01, para que las zonas primarias se transfieran a la zonas secundarias, para ello, volvemos editar, nano /etc/bind/named.conf.local y añadimos el servidor secundario al que tiene que transferir la zona, tanto para la zona directa como para la inversa, allow-transfer { 13.X.X.X; }; Mi ip pública de Azure:
- Una vez configuradas las zonas, vamos a acceder a nuestro proveedor ISP de DNS, y en nuestro dominio público (ragasysweb.com) vamos a configurar nuestros servidores DNS propios o personalizados con nuestras IPs públicas:
- Con esto ya tendríamos configuradas las zonas de resolución directa e inversa, en el servidor primario y en el secundario.
- Para continuar, vamos a crear los registros de las zonas, para indicar que DNS01 y DNS02 son servidores DNS en la zona «ragasysweb.com» y que el servidor autoritativo o con autoridad sobre la zona es DNS01.
- Zona primaria para la resolución directa:
nano /var/lib/bind/db.ragasysweb.com
$ttl 604800
ragasysweb.com. IN SOA ns1.ragasysweb.com. it.ragasys.eu (
2025012401 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS ns1.ragasysweb.com.
@ IN NS ns2.ragasysweb.com.
- Zona primaria para la resolución inversa:
nano /var/lib/bind/db.80.31.203.rev
$ttl 604800
203.31.80.in-addr.arpa. IN SOA ns1.ragasysweb.com. it.ragasys.eu (
2025012401 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
203.31.80.in-addr.arpa. IN NS ns1.ragasysweb.com.
203.31.80.in-addr.arpa. IN NS ns2.ragasysweb.com.
- Para que las zonas primarias (directa e inversa) se transfieran sobre las secundarias, debemos de crear los registros tipo A y PTR para los dos servidores DNS:
- Hacemos un systemctl restart bind9 y un systemctl status bind9, a ambos servidores, y como podemos ver ya se están replicando las zonas correctamente, haciendo ls /var/lib/bind en el servidor secundario podemos ver como se han creado los ficheros para las zonas secundarias:
- NOTA: La configuración de zona para la resolución inversa, cuando estamos configurando DNS público, realmente no es así, la he mostrando aquí en este lab de esta manera, para que se viese también, a modo de ejemplo, como se replica una zona primaria de resolución inversa en un servidor secundario, para la configuración del PTR debe configurarse, solicitando al proveedor de Internet que ponga un nombre de host a la IP pública, es probable que si contratamos servidores cloud, tengamos una opción para poner el PTR a las IPs públicas.
- Para verificar que todo funciona correctamente, desde cualquier equipo con conexión a Internet le vamos a hacer un ping a uno de los registros DNS de nuestro servidor, y cómo podemos ver, nos responde correctamente:
Saludos y espero que os sea de ayuda 😉