3.4. Configuración del servicio¶
3.4.1. Configuración clientes¶
3.4.1.1. Windows¶
GUI
El servicio cliente DNS debe estar en funcionamiento en el sistema(por defecto lo está). Programas -> Herramientas Administrativas -> Servicios
Las propiedades se realizan desde la configuración de las tarjetas de red, junto con el resto de parámetros de red.
Línea de comandos
En PowerShell, a través de los siguientes comandos:
PS C:\> Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses ("10.0.0.1","10.0.0.2") PS C:\> Get-DnsClientServerAddress
3.4.1.2. Linux¶
GUI
Los entornos gráficos (Gnome ,KDE….) proporcionan utilidades para la configuración de los clientes DNS en la configuración de las interfaces de red(muy parecido a Windows).
Línea de comandos
Si nuestra configuracion la realizamos sin GUI, debemos ubicar el fichero correspondiente, teniendo en cuenta que éste puede variar de una distro o version a otra.
El fichero sobre el que trabajan la mayoria de las distribuciones es /etc/resolv.conf(actualmente en muchos sistemas esto no es tan simple, y lo gestiona el demonio systemd) que guarda las direcciones IP de los servidores DNS. En nuestras distros ya sabemos que esta configuración se realiza en el fichero .yaml de netplan.
nameservers: addresses: [10.10.10.1, 1.1.1.1]
3.4.2. Configuración básica servidor¶
3.4.2.1. Windows¶
En este módulo no trataremos la instalación y configuración de controladores de dominio(AD), aunque Active Directory necesita de DNS para poder trabajar correctamente.
GUI
De manera visual a traves de la interfaz gráfica que ofrece Windows 20XX Server y la instalación de roles y características.
Puedes encontrar un ejemplo de configuración paso a paso en el siguiente video:
Línea de comandos 1
- Instalación. Podemos ejecutar el siguiente comando para buscar el nombre del rol que debemos instalar
Get-WindowsFeature | where {($_.name -like “DNS”)} #con el comando anterior averiguamos y ahora lo instalamos Install-WindowsFeature DNS -IncludeManagementTools
- Ponemos a escuchar al servidor únicamente por las interfaces que queramos(en nuestros escenarios en la tarjeta local):
dnscmd /resetlistenaddresses 192.168.200.254
- Configuramos los reenviadores(forwarders). Serán las direcciones IP a las que el servidor DNS reenvía las consultas DNS cuando no puede resolverlas de forma local.
dnscmd /resetforwarders 8.8.8.8
- Creación de una zona de búsqueda PRIMARIA y su correspondiente zona INVERSA
PS C:\> Add-DnsServerPrimaryZone -ZoneName "asir.com" -ZoneFile "asir.com.dns" -verbose -passthru PS C:\> Add-DnsServerPrimaryZone -NetworkId "192.168.200.0/24" -ZoneFile "200.168.192.in-addr.arpa.dns" -verbose -passthruCreación de los registros(RR) que deseemos
- Podemos hacer uso de la instrucción Add-DnsServerResourceRecord o del comando DNSCmd/recordadd
#añadir un NS (Servidor de nombres para zonas secundarias...) Add-DnsServerResourceRecord -Name "asir.com" -NameServer "ns2.asir.com" -NS -ZoneName "asir.com" #añadir un host(A) con su PTR para lo zona inversa correspondiente Add-DnsServerResourceRecord -ZoneName "asir.com" -A -Name "www" -IPv4Address "192.168.200.5" Add-DnsServerResourceRecordPtr -Name "5" -ZoneName "200.168.192.in-addr.arpa" -PtrDomainName "www.asir.com" #añadir un alias(CNAME) Add-DnsServerResourceRecord -CName -Name "www2" -HostNameAlias "www.asir.com" -ZoneName "asir.com" -AllowUpdateAny #añadir un servidor de correo(MX) para mi dominio con una preferencia de 10. Debo añadir un registro tipo A para que me traduzca nombre por IP. Add-DnsServerResourceRecord -ZoneName "asir.com" -A -Name "mail" -IPv4Address "192.168.200.6" Add-DnsServerResourceRecord -Name "." -MX -ZoneName "asir.com" -MailExchange "mail.asir.com" -Preference 10
- Exportar/Importar configuración de zona/s del DNS server a fichero/s de texto.
#guarda los ficheros en C:\Windows\System32\dns #también guardo la zona inversa dnscmd /zoneexport "asir.com" "asir.com.cseg" #también con Export-dnsservervzone se podría hacer dnscmd /zoneexport "asir.com" "asir.com.cseg" #para importar, renombro los ficheros anteriores a acabados en .dns (sustituyendo el .cseg) #deben estar ubicados en C:\Windows\System32\dns dnscmd /zoneadd "asir.com" /primary /file "asir.com.dns" /load dnscmd /zoneadd "200.168.192.in-addr.arpa" /primary /file "200.168.192.in-addr.arpa.dns" /load
3.4.2.2. Linux¶
BIND o DnsMasq son los paquetes utilizados en todas las distribuciones Linux, sin interfaz gráfica añadida. Su administración configuración se realiza accediendo a varios ficheros de texto (INCLUIDO EL FICHERO DE ZONA).
En nuestro caso vamos a optar con configurar el servidor BIND2. Podemos encontrar alternativas gráficas para poder configurar BIND, a través de la instalación de un panel de administración, como Webmin:
![]()
Debemos entender la estructura de ficheros que monta BIND una vez instalado, para poder realizar correctamente su configuración:
![]()
- La configuración de BIND se encuentra en named.conf, la cual se distribuye con el uso de la directiva include, entre los ficheros:
named.conf.options: Parámetros a nivel global del servidor DNS.
named.conf.local: Aquí se crean las zonas con la instrucción zone. Uno de los parámetros será la ubicación y nombre del fichero de zona.
named.conf.default-zones: Algunas zonas que incluye BIND por defecto.
db.*: ficheros de zona creadas en named.conf.default-zones. db.root=srv. Raiz.
db.empty: plantilla de fichero de zona.
Se crea un usuario bind que pertenece al grupo principal bind que también se crea. Este usuario es el que ejecuta el demonio /usr/sbin/named, al que se le pasan los argumentos especificados en /etc/default/bind9. En /var/cache/bind, referencia para todas las rutas relativas (instrucción directory en el fichero de options), es donde crearemos nuestros ficheros de zona por defecto.
Podemos gestiónar el servicio con los siguiente comandos (podemos elegir entre las dos opciones):
$sudo service bind9 [restart|start|stop|status] $sudo systemctl [restart|start|stop|status] bind9En el siguiente video encontrarás un ejemplo de configuración muy sencillo:
3.4.3. Ampliando nuestra configuración¶
A partir de aquí podemos trabajar sobre escenarios más complejos en los que podremos incluir:
Servidores maestros
Servidores esclavos
Delegaciones de zona
En el área de recursos del espacio virtual de la asignatura puedes encontrar un manual completo(Tutorial configuración servidores DNS) de como realizar esto tanto en Windows como en Linux.
3.4.4. Juntando todo(DDNS)¶
El DNS dinámico(Dynamic DNS) es un servicio que puede ser de gran utilidad en la mayoría de ocasiones en aplicaciones reales. El DNS dinámico garantiza que los usuarios puedan seguir accediendo al dispositivo o servicio mediante el nombre de dominio. No necesitan rastrear ni actualizar la dirección IP manualmente.3.
¿Se te pueden ocurrir situaciones en lo que esto sea de utilidad?¿Qué ventajas podría tener?
Los pasos a realizar para configurar DDNS en nuestro servidor DNS y DHCP son los siguientes(en el ejemplo vamos a ubicar los dos servicios en el mismo servidor Ubuntu/Debian, pero seguramente en un entorno en producción estarán en servidores diferentes)
1.- Crear clave TSIG para autenticación
Generamos la clave TSIG que usaremos para autenticar las actualizaciones dinámicas entre el servidor DHCP y el servidor DNS. Usaremos la herramienta tsig-keygen incluida en el paquete bind9utils.
cd /etc/bind tsig-keygen dhcp1-ns1 > dhcp1-ns1.key chown root:bind dhcp1-ns1.key chmod 640 dhcp1-ns1.key
Un ejemplo del contenido del archivo generado sería el siguiente:
key "dhcp1-ns1" { algorithm hmac-sha512; secret "nYa64AFEdu6sYZRnksQqVNw0nDUbELE/JBQouVZBaF4="; };
2. Mover archivos de zona a carpeta modificable
Hay que tener en cuenta que los archivos de zona que se van a modificar dinámicamente deben estar ubicados en una carpeta donde el usuario con el que se ejecuta el servicio bind9 (normalmente bind) tenga permisos de escritura. Por defecto, los archivos de zona se crean en /etc/bind, que no es una carpeta modificable por bind. Por lo tanto, debemos mover los archivos de zona a una carpeta modificable, como /var/lib/bind.
mv db.ddnslab.lan /var/lib/bind/ mv db.192.168.100 /var/lib/bind/
3. Configurar BIND9
En el fichero named.conf.local añadimos las zonas directa e inversa, incluyendo la clave generada anteriormente y permitiendo las actualizaciones dinámicas desde el servidor DHCP.
include "/etc/bind/dhcp1-ns1.key"; zone "ddnslab.lan" { type master; file "/var/lib/bind/db.ddnslab.lan"; update-policy { grant dhcp1-ns1 wildcard *.ddnslab.lan A DHCID; }; }; zone "100.168.192.in-addr.arpa" { type master; file "/var/lib/bind/db.192.168.100"; update-policy { grant dhcp1-ns1 wildcard *.168.192.in-addr.arpa PTR DHCID; }; };
Nuestros ficheros de zona sería básicamente iguales a los vistos hasta ahora, la única diferencia es la ubicación que hemos comentado antes.
4. Configurar KEA
En kea, además del servidor dhcp también debemos instalar el paquete kea-ddns para que el servidor DHCP pueda comunicarse con el servidor DNS y realizar las actualizaciones dinámicas.
El fichero kea-dhcp-ddns.conf debe contener la configuración para la comunicación con el servidor DNS, incluyendo la clave generada anteriormente.
{ "DhcpDdns": { // Normalmente kea-ddns y kea-dhcp4 se ejecutan en el mismo servidor, por lo que la IP podría ser localhost. En este ejemplo está en otro equipo.. "ip-address": "192.168.100.254", "port": 53001, "control-socket": { "socket-type": "unix", "socket-name": "kea-ddns-ctrl-socket" }, "tsig-keys": [ { "name": "dhcp1-ns1", "algorithm": "hmac-sha512", "secret": "nYa64AFEdu6sYZRnksQqVNw0nDUbELE/JBQouVZBaF4=" } ], "forward-ddns": { "ddns-domains": [ { "name": "ddnslab.lan.", "key-name": "dhcp1-ns1", "dns-servers": [ { "ip-address": "192.168.100.1" } ] } ] }, "reverse-ddns": { "ddns-domains": [ { "name": "100.168.192.in-addr.arpa.", "key-name": "dhcp1-ns1", "dns-servers": [ { "ip-address": "192.168.100.1" } ] } ] }, // Logging configuration starts here. Kea uses different loggers to log various // activities. For details (e.g. names of loggers), see Chapter 18. "loggers": [ { // This specifies the logging for D2 (DHCP-DDNS) daemon. "name": "kea-dhcp-ddns", "output-options": [ { "output": "/var/log/kea/kea-ddns.log", "maxsize": 10485760, "maxver": 3 } ], // This specifies the severity of log messages to keep. Supported values // are: FATAL, ERROR, WARN, INFO, DEBUG "severity": "INFO", "debuglevel": 0 } ] } }
El fichero kea-dhcp4.conf debe contener la configuración del servidor DHCP, añadiendo alguna opción para la actualización dinámica de DNS.
{ "Dhcp4": { "interfaces-config": { "interfaces": [ "enp0s8" ] }, "control-socket": { "socket-type": "unix", "socket-name": "kea4-ctrl-socket" }, "lease-database": { "type": "memfile", "lfc-interval": 3600 }, "expired-leases-processing": { "reclaim-timer-wait-time": 10, "flush-reclaimed-timer-wait-time": 25, "hold-reclaimed-time": 3600, "max-reclaim-leases": 100, "max-reclaim-time": 250, "unwarned-reclaim-cycles": 5 }, "renew-timer": 900, "rebind-timer": 1800, "valid-lifetime": 3600, //Direccion ip del servidor dhcp "dhcp-ddns": { "enable-updates": true, "server-ip": "192.168.100.254", "server-port": 53001 }, "ddns-qualifying-suffix": "ddnslab.lan", "ddns-override-client-update": true, // DEFINO MI ÁMBITO DHCP "subnet4": [ { "id": 1, "subnet": "192.168.100.0/24", "pools": [ { "pool": "192.168.100.50 - 192.168.100.150" } ], "option-data": [ { //Gateway "name": "routers", "data": "192.168.100.1" }, //Servidor DNS { "name": "domain-name-servers", "data": "192.168.100.1" }, //Dominio de búsqueda { "name": "domain-name", "data": "ddnslab.lan" } ] } ], // Logging configuration starts here. Kea uses different loggers to log various // activities. For details (e.g. names of loggers), see Chapter 18. "loggers": [ { // This section affects kea-dhcp4, which is the base logger for DHCPv4 // component. It tells DHCPv4 server to write all log messages (on // severity INFO or more) to a file. "name": "kea-dhcp4", "output-options": [ { "output": "/var/log/kea/kea-dhcp4.log", "maxsize": 10485760, "maxver": 3 } ], // This specifies the severity of log messages to keep. Supported values // are: FATAL, ERROR, WARN, INFO, DEBUG "severity": "INFO", "debuglevel": 0 } ] } }
5. Probar el funcionamiento de DDNS
Para probar el funcionamiento de DDNS, debemos iniciar ambos servicios (BIND9 y KEA DHCP) y luego solicitar una dirección IP a través del cliente DHCP. Una vez que el cliente recibe la dirección IP, podemos verificar que el registro DNS se ha creado correctamente en el servidor DNS.
sudo systemctl status kea-dhcp4-server sudo systemctl status kea-dhcp-ddns-server sudo systemctl status bind9 journalctl -u kea-dhcp4-server -f journalctl -u kea-dhcp-ddns-server -f
- En el cliente (por ejemplo, una máquina virtual o un equipo en la red):
Asegúrate de que el cliente DHCP esté configurado para enviar su nombre de host.
En Linux, puedes usar dhclient así:
sudo dhclient -v -H host1 enp0s8 Esto solicita una IP y envía el nombre de host host1. Si falla siempre puedes editar el fichero /etc/dhcp/dhclient.conf y añadir: send host-name "host1";
En el servidor DNS (BIND, por ejemplo), revisa si se han creado los registros:
Zona directa (ddnslab.lan): debería haber un registro host1 IN A 192.168.100.x
Zona inversa (100.168.192.in-addr.arpa): debería haber un registro x IN PTR host1.ddnslab.lan.
Puedes comprobarlo con:
cat /var/lib/bind/db.ddnslab.lan.jnl --> Este es el fichero journal donde se guardan las actualizaciones dinámicas de manera temporal cat /var/lib/bind/db.192.168.100.jnl rndc sync -clean --> Esto fuerza a que las actualizaciones dinámicas se escriban en los ficheros de zona permanentes cat /var/lib/bind/db.ddnslab.lan cat /var/lib/bind/db.192.168.100 dig host1.ddnslab.lan @localhost dig -x 192.168.100.x @localhost journalctl -xe | grep ddns
En definitiva en los logs verás algo como INFO [kea-dhcp-ddns.d2-to-dns] D2: DNS update for host1.ddnslab.lan. (A) added
-
Fuente: Podemos optar por utilizar el Módulo DnsServer PowerShell o aprovoechar la sencillez del Comando DNSCMD ↩
-
Ayuda: Puedes encontrar un manual muy completo sobre DNS y BIND el siguiente enlace↩
-
Fuente: Puedes encontrar una explicación muy buena en la documentación de AWS sobre DDNS↩




