🐋
Apuntes Sistemas
  • ⚓Presentación
  • 📊Sistemas y Servidores
    • Personalizar el prompt de Windows
    • Utilidad de manejo de apps para Windows
    • PRACTICA: Arranque dual Windows y Ubuntu
    • 🚧SysLinuxOS: el SO para ASIX
    • Comandos Linux
      • PRACTICA - Ejercicio de práctica comandos
      • 🚧Instalación de paquetes
      • Apuntes Linux: blue/red team
      • Ejemplos de bash
      • Listado de comandos de Linux
    • Comandos Windows
      • 🚧Apuntes Powershell
      • Bucles FOR con batch
      • Scripts de práctica de Windows
    • Prácticas con Windows 10
    • Configuración de netplan
    • Terminal shell
      • SSH
      • 🚧Ghostty
      • 🚧Warp: la terminal inteligente
      • tmux: paneles de terminal
      • Tabby: Mejorar terminal
      • Conexión SSH en red NAT con VirtualBox
      • TheFuck!: Corrección de comandos
      • Wave: Mejorar terminal Linux
      • 🚧Registros de sesiones
    • Instalación manual de Wordpress en CDMON
    • 🏗️Proxmox
    • 🚧TrueNAS
    • Docker
      • Instalación de Docker
      • Dockerfiles
      • Volúmenes de docker
      • Deployment web con Docker con ejemplos
        • 🚧PRACTICA: Node.js con docker
      • Docker Compose
        • Ejemplo 1: Implantación de Wordpress
        • Ejemplo 2: Implementación de servidor con Nginx, Flask y mySQL
        • Ejemplo 3: Implantación de onlyoffice
        • 🚧Ejemplo 4: Passbolt
        • 🚧PRACTICA: Creando una web de emulación de juegos con docker-compose
      • Monitorización con Grafana en Docker
      • Pi-hole con docker
      • Actividad clase: Deployment app
      • Proyectos self-hosted de docker
    • 🚧Ansible
      • Configuración de laboratorio de ansible
    • 🚧Monitorización de servicios y redes
      • Servicios y cronjobs
      • 1Panel
      • 🚧WatchYourLAN
      • 🚧Uptime-kuma
      • 🚧Netdata
      • 🚧Prometheus + Grafana + Loki
    • LDAP
      • 🚧Gestión gráfica de LDAP
      • Carpetas compartidas NFS
      • PRACTICA: Infraestructura LDAP
  • 🗃️Servicios
    • 🚧Servidor hosting público
    • DHCP
      • DHCP con Ubuntu
      • 🦖DHCP & DNS script
      • DHCP con Alpine
        • Alpine - configuración de red
    • DNS
      • 😡Comprobación DNS
      • Script para enumeración DNS
      • DNS con ubuntu server
      • 🏗️DNSmasq
      • 🚧Securizar servidor DNS
    • Web
      • IIS con Windows server
      • Apache
        • Instalación de LAMP en Ubuntu
          • Prueba de servidor LAMP
          • 🚧Configuración de seguridad de Ubuntu
          • Creación de un VirtualHost en LAMP
          • Creación de varios VirtualHosts en LAMP
          • 🚧Instalación por script de LAMP
        • Aplicaciones con LAMP
          • Instalación de WP en entorno LAMP
          • 🚧Instalación de MantisBT en LAMP
            • 👷Guía de MantisBT
          • 🚧Instalación de QDPM con LAMP
      • Nginx
        • Virtualhosts
        • Instalando Wordpress en nginx
      • 👷MEAN stack
      • 👷‍♂️Caddy
      • 🚧Plesk
      • 🚧Ajenti -Web interface
    • 🏗️Proxy
      • Nginx como proxy inverso y balanceador
      • 🚧Zoraxy
    • Mailing
      • 🚧Servidor Mail con cloudfare
      • 🚧Reenvío de correos de root
      • 🚧Roundcube como MUA
      • Comprobación ESMTP
      • 🚧Seguridad en mailing
      • 🚧Mailhog
    • 🏗️File transfer
      • 🚧FTP
      • Git
    • Sistemas de comunicación instantánea
      • Comunicación mediante CLI
      • Ejabberd - XMPP
        • 🚧Ejabberd con docker
      • 🚧Openfire - XMPP
      • 🚧Comunicaciones servidor-móvil
    • 🏗️Multimedia services
      • Stremio
      • Ver anime por CLI
      • Jellyfin
      • 🚧HLS sobre Apache
      • 🚧Servicio autohospedado de videoconferencia
      • 🚧Morphos: Conversor docs
      • 🚧Reproductores de música en CLI
      • 🚧Icecast - música en streaming
      • 🚧RTMP-HLS server
      • 🚧Guacamole
  • 🖱️Hardware
    • 🚧Identificando conectores
    • Curso de electrónica analógica
    • Alcanzar los 3200MHz con la RAM
    • Calculadora de cuellos de botella
    • 🚧PXE: Bootear sistemas en red
    • 🚧PRÁCTICA - Clonación de disco con Clonezilla
    • Logitech iFixit
  • 🕸️Redes
    • Apuntes IPv4 Alina
    • ¿Cómo diferenciar tantos elementos de red?
    • 🚧IPv6
    • PRÁCTICA - Subneteo con IPcalc en Linux
    • PRÁCTICA - Comandos de red en Windows
    • 🚧PRÁCTICA - Comandos de red en Linux
    • Herramientas de red
      • 🚧TCPDump: analizado de paquetes en red
      • PRÁCTICA - Netsh
      • 🚧PRÁCTICA - mtr.ping.pe
      • 🚧Netcat
    • Wireshark
    • VPN y escritorio remoto
      • Comunicación punto a punto con ngrok
      • 🚧VPN
    • Escaneo de red
      • PRÁCTICA - Mapeado de red con Draw.io
      • 🚧PRÁCTICA - Nmap/Zenmap
    • Redes inalámbricas
      • Wi-fi
        • 🚧PRÁCTICA - Configuración de router
        • 🚧PRÁCTICA - Como hacer un Wifi Heatmap
        • 🚧Seguridad de redes inalámbricas
        • PRÁCTICA - Crackear la contraseña del Wifi con WPA/WPA2
    • PRÁCTICA - Usar SSH en Cisco packet tracer
  • 🛑Ciberseguridad
    • 🚧Securizando un servidor Linux
      • Protégete de ataques de fuerza bruta con Fail2ban
      • Firewall
        • UFW (uncomplicated firewall)
          • GUFW - Interfaz gráfica de ufw
        • 🚧IPTables
        • 🚧PFsense
          • 🚧DMZ con PFsense
      • 🚧Passbolt: gestor de contraseñas autohospedado
      • 🚧Hashes y encriptación
      • 🚧Certificados SSL/TLS
      • Copias de seguridad
    • 🚧Alerta de escaneo de puertos
    • 🚧Google dorks
    • 🚧Enumeración DNS
    • Comandos destructivos de linux
    • Webs enseñanza cyber
    • Wireless Pentesting CheatSheet Github
    • The password game!
    • Personal Security Checklist
  • 🔌Arduino
    • Termómetro e higrómetros digitales y online con Arduino
    • Construyendo un coche multipropósito
      • Multi
      • Montaje del auto
    • Arduino con Sigfox para IoT
    • 10 proyectos de Arduino
  • 📚Recursos y libros
    • Media library: libros varios
    • Herramientas básicas de sysadmin
  • 🌍Sostenibilidad y digitalización
    • Portfolio curso digitalización MOOC
    • 🚧Explotación de recursos por IA
    • 🚧Nuevas tecnologias y comunicaciones
    • 🚧Enlaces sobre Inteligencia artificial
Con tecnología de GitBook
En esta página
  • Instalación paquetes
  • Configuración de DNS
  • Índice
  • 1. Configuramos las opciones
  • 2. Configuramos las zonas:
  • 3. Configuramos el archivo de zona directa:
  • 4. Configuramos el archivo de zona inversa:
  • 5. Verificamos la red:
  • 6. Verificación de respuesta autoritativa
  1. Servicios
  2. DNS

DNS con ubuntu server

De la misma forma que configuramos el DHCP, el servicio de DNS irá junto a este. Utilizaremos en esta ocasión el paquete de isc Bind9

AnteriorScript para enumeración DNSSiguienteDNSmasq

Última actualización hace 3 meses

Veremos cómo configurar un servidor DNS primario con zonas directa e inversa para la resolución de nombres en nuestra red local. Configuraremos el uso de forwarders para las consultas externas y dicho servidor DNS será autoritativo para nuestra red.

  • Zona directa: Utilizada para resolver nombres de dominio a direcciones IP. La mayoría de las configuraciones de DNS en entornos de hosting web y servicios de red utilizan zonas directas.

  • Zona Inversa: Utilizada para realizar la búsqueda inversa y asociar direcciones IP con nombres de dominio. Es especialmente útil en situaciones donde necesitas conocer el nombre de dominio correspondiente a una dirección IP específica.

Empezaremos con una MV Ubuntu server en una red NAT con con la siguiente información:

Nombre del host: jupiter
Nombre DNS: ns1
Dominio DNS primario: alexdns.local
FQDN: ns1.alexdns.local

enp0s3
Red NAT: 10.0.0.0/24
Máscara: 255.255.255.0
IP: 10.0.0.5
GW: 10.0.0.1
Rango DHCP: 10.0.0.10 - 10.0.0.50

Instalación paquetes

Actualizamos los repositorios de nuestro sistema:

sudo apt update
sudo apt upgrade

Una vez hecho esto, procedemos a instalar el paquete Bind9 y sus utilidades:

sudo apt install bind9 bind9-utils bind9-doc -y

Podemos comprobar si se ha instalado correctamente con:

systemctl status bind9

Configuración de DNS

Empezamos con la configuración:

El primer fichero a editar sería: /etc/bind/named.conf.local

Aquí será donde definiremos las zonas: directa e inversa, para el dominio alexdns.local haciendo uso de la cláusula zone.

  • Cada bloque de zona incluirá de que tipo será la zona y el fichero en el que estarán definidas las características, propiedades y entidades del dominio, para cada zona.

Una práctica adecuada sería hacer una copia de seguridad de los archivos de configuración, como es el caso del archivo named.conf.local para lo cual podemos hacer:

sudo cp /etc/bind/named.conf.local /etc/bind/named.conf.BKP

Índice

1. Configuramos las opciones

Editamos el siguiente archivo:

sudo nano /etc/bind/named.conf.options

El archivo debe contener lo siguiente:

// creamos ACL que permita solo el tráfico LAN de 10.0.0.0 - 10.0.0.255
options {
    listen-on { any; };
    directory "/var/cache/bind";
    allow-query { localhost; LAN; }; 
    recursion yes; 
    forwarders { 1.1.1.1; };
    
};

acl LAN {
    10.0.0.0/24;
};
  • listen-on { }: la dirección donde estará escuchando Bind9, si no sabes con exactitud, utiliza la opción any.

  • allow-query { }: desde que redes o ip es posible realizar consultas, normalmente la misma red a la que pertenece el servidor DNS.

  • forwarders { }: define servidores DNS a los cuales Bind9 reenviará las consultas que el no pueda resolver.

  • recursion: define la recursión en la búsqueda de registros

Editamos el archivo de configuración para forzar las peticiones IPv4 y evitarnos resoluciones de IPv6. Para ello vamos a:

sudo nano /etc/default/named

Y editamos el archivo:

RESOLVCONF=no

//Modificar la línea dejándola así:
OPTIONS="-u bind -4"

Antes de continuar conviene revisar que no haya problemas:

sudo named-checkconf /etc/bind/named.conf.options
sudo systemctl restart bind9
systemctl status bind9

Si todo rula bien, ahora deberíamos poder hacer ping desde la máquina cliente a un dominio cualquiera y debería funcionar:

ping google.es

Vamos ahora a configurar nuestros propios archivos y registros de zona para el servidor!

2. Configuramos las zonas:

Edita el archivo de configuración principal de zonas de BIND9:

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

Agrega una sección para tu zona directa y otra para la inversa. Por ejemplo, para el dominio "alexdns.local":

//zona directa
zone "alexdns.local" in {
    type master;
    file "/etc/bind/zonas/db.alexdns.local";
};

//Zona inversa
zone "0.0.10.in-addr.arpa" {
    type master;
    file "/etc/bind/zonas/db.0.0.10";
};

Donde:

  1. zone "XXXXXX": define la zona directa o inversa en notación de dominio o dirección IP inversa para la red 10.0.0.0.

  2. type master;: Esto le indica que este servidor DNS es el servidor maestro (master) para esta zona.

  3. file "/etc/bind/zonas/db.XXXXX";: Especifica la ubicación del archivo de zona que contiene la información de resolución directa o inversa.

Para comprobar que la configuración es la correcta y no hayamos cometido errores en la sintaxis, usamos el comando:

sudo named-checkconf /etc/bind/named.conf.local

3. Configuramos el archivo de zona directa:

Partiendo de los ficheros de zona predeterminados como es el de db.empty o db.127 podemos editarlos o crear nuevos:

sudo mkdir /etc/bind/zonas

sudo cp /etc/bind/db.empty /etc/bind/zonas/db.alexdns.local
sudo cp /etc/bind/db.127 /etc/bind/zonas/db.0.0.10

Al terminar, entramos a editar el archivo de zona directa:

sudo nano /etc/bind/zonas/db.alexdns.local

Añade registros de recursos (A, MX, etc.) según tus necesidades. Aquí hay un ejemplo básico:

$TTL    86400
@       IN      SOA     alexdns.local. root.alexdns.local. (
                              2024100701 ; Serial (Formato AAMMDDnn)
                              604800     ; Refresh (cada 7 días)
                              86400      ; Retry (cada 1 día)
                              2419200    ; Expire (28 días)
                              604800 )   ; Negative Cache TTL (7 días)
                              
; Registro NS
@       IN      NS      ns1.alexdns.local.

; Registro A para el dominio base
@       IN      A       10.0.0.5

; Registros A adicionales
ns1        IN      A       10.0.0.5
www        IN      CNAME   alexdns.local. ;Esto apuntara www.alexdns.local a la IP del dominio base
mail       IN      A       10.0.0.5

; Registro MX para correos
@       IN      MX  10  mail.alexdns.local.

; Cliente
client    IN      A   10.0.0.10

Este ejemplo configura un servidor DNS para el dominio "alexdns.local" con direcciones IP asociadas a "bindserver.alexdns.local" .

La línea etiquetada como ‘serial‘ recoge un número que deberá incrementarse manualmente cada vez que editemos este archivo, ya sea para modificar nombres o añadir nuevos.

Puedes verificar que la configuración sea correcta usando la herramienta named-checkzone:

sudo named-checkzone alexdns.local /etc/bind/zonas/db.alexdns.local

Si no hay errores, deberías ver un mensaje indicando "zone alexdns.local/IN: loaded serial 1 OK".

4. Configuramos el archivo de zona inversa:

Si deseas configurar la zona inversa para asociar direcciones IP con nombres de dominio, ahora debemos editar el otro archivo copiado anteriormente:

sudo nano /etc/bind/zonas/db.0.0.10

Añade registros de recursos (A, MX, etc.) según tus necesidades. Aquí tienes el ejemplo básico:

$TTL    604800 ;
@       IN      SOA     alexdns.local. root.alexdns.local. (
                        1               ; Serial
                        12h             ; Refresh
                        15m             ; Retry
                        3w              ; Expire
                        2h      )       ; Negative Cache TTL

;Registros de zona inversa
@       IN      NS      ns1.alexdns.local.
ns1     IN      A       10.0.0.5

; Registros con IP servidor y 1 cliente
5       IN      PTR     ns1.alexdns.local.
10      IN      PTR     client.alexdns.local.

Fíjate que en el registro de IP ponemos el numero correspondiente al host de nuestra IP.

Ahora puedes proceder a probar la configuración con named-checkzone:

sudo named-checkzone alexdns.local /etc/bind/zonas/db.0.0.10

5. Verificamos la red:

Asegúrate de que tu máquina esté configurada para usar el servidor DNS local. Edita tu archivo /etc/resolv.conf y agrega la siguiente línea:

sudo nano /etc/resolv.conf
nameserver 127.0.0.1
nameserver 10.0.0.5

Reinicia el Servicio BIND9:

sudo systemctl restart bind9
sudo systemctl status bind9

Recuerda que para que esto funcione correctamente ahora deberás incluir la IP del servidor como DNS en el cliente.

Para verificar que la configuración funciona correctamente, usa el comando nslookup para buscar los dominios configurados, por ejemplo:

  • nslookup client

  • nslookup bindserver

  • nslookup client.alexdns.local

  • nslookup bindserver.alexdns.local

Esto debería resolverse correctamente y mostrar un output parecido a esto:

Server:         127.0.0.53
Address:        127.0.0.53 #53

Non-authoritative answer:
Name:   client.alexdns.local
Address: 10.0.0.10

6. Verificación de respuesta autoritativa

Gracias a Alina por hacerlo notar y buscar la solución al problema

Como habrás visto arriba, el servidor sigue mostrándonos respuestas no-autoritativas. Esto es debido a que las aplicaciones que hacen uso del resolver de systemd-resolved escuchan en la interfaz de loopback en la dirección 127.0.0.53, no a nuestro DNS.

El archivo /etc/resolv.conf es un enlace simbólico a otro fichero de configuración. Si revisamos sus enlaces:

ls -l /etc/resolv.conf

Veremos que el systemd-resolved, apunta a un archivo en:

/run/systemd/resolve/stub-resolv.conf

Entonces, modificamos el enlace simbólico haciendo lo siguiente para hacerlo apuntar al fichero adecuado:

sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

Ahora, comprueba haciendo:

cat /etc/resolv.conf

Vuelve a probar el nslookup ahora y verás que la IP es correcta.

Recuerda adaptar los nombres de dominio y las direcciones IP según tu configuración. Después de completar estos pasos, tu máquina Ubuntu Desktop actuará como un servidor DNS local para el dominio que hayas configurado. Puedes agregar entradas adicionales a tu zona directa según sea necesario.

Para comprobar si funciona el DNS, prueba a conectar la máquina virtual cliente en la misma red interna y darle servicio de DHCP con la IP del DNS y resolver una petición nslookup google.es y revisa la IP y resolución si funciona.

Bibliografía:

Para editar el archivo de zonas de forma más cómoda puedes usar VSCode con la extensión

DHCP ya instalado
Configuramos opciones
Configuramos las zonas
Creamos el archivo de zona directa
Creamos el archivo de zona inversa
Verificamos la red
Verificación de respuesta autoritativa
vscode-zonefile
https://bind9.readthedocs.io/en/v9_18_12/
🗃️
Page cover image