Configuración del servicio ============================== Configuración clientes ---------------------- Windows ^^^^^^^ **GUI** El servicio cliente DNS debe estar en funcionamiento en el sistema(por defecto lo está). *Programas -> Herramientas Administrativas -> Servicios* .. image:: img/srvWinGui.png :width: 400 px :alt: NAS Diagram :align: center Las propiedades se realizan desde la configuración de las tarjetas de red, junto con el resto de parámetros de red. .. image:: img/propdnstarjeta.png :width: 300 px :alt: Conf. DNS windows GUI :align: center **Línea de comandos** En PowerShell, a través de los siguientes comandos: .. code-block:: shell-session PS C:\> Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses ("10.0.0.1","10.0.0.2") PS C:\> Get-DnsClientServerAddress 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). .. image:: img/confdnsguilinux.png :width: 300 px :alt: conf. DNS Linux GUI :align: center **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**. .. code-block:: shell-session nameservers: addresses: [10.10.10.1, 1.1.1.1] Configuración básica servidor ----------------------------- 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: .. raw:: html .. raw:: html
Línea de comandos 1
* Instalación. Podemos ejecutar el siguiente comando para buscar el nombre del rol que debemos instalar .. code-block:: shell-session 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): .. code-block:: shell-session 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. .. code-block:: shell-session dnscmd /resetforwarders 8.8.8.8 * Creación de una zona de búsqueda PRIMARIA y su correspondiente zona INVERSA .. code-block:: shell-session 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 -passthru * Creación de los **registros(RR)** que deseemos Podemos hacer uso de la instrucción `Add-DnsServerResourceRecordEn 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:
.. image:: img/dnswebmin.png :width: 400 px :alt: Pantalla webmin administración BIND :align: center Debemos entender la estructura de ficheros que monta BIND una vez instalado, para poder realizar correctamente su configuración: .. image:: img/ficherosbind.png :width: 200 px :alt: Ficheros instalador por BIND :align: center 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): .. code-block:: shell-session $sudo service bind9 [restart|start|stop|status] $sudo systemctl [restart|start|stop|status] bind9 En el siguiente video encontrarás un ejemplo de configuración muy sencillo: .. raw:: html .. raw:: htmlEl 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.
.. image:: img/ddns_image.png :width: 900 px :alt: conf. DNS Linux GUI :align: center **¿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. .. code-block:: shell-session 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: .. code-block:: none 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. .. code-block:: shell-session 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. .. code-block:: shell-session 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. .. code-block:: shell-session { "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. .. code-block:: shell-session { "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. .. code-block:: shell-session 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í: .. code-block:: shell-session 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: .. code-block:: shell-session 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** .. raw:: htmlFuente: 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↩