Next: , Previous: , Up: Servicios   [Contents][Index]


11.10.22 Servicios DNS

El módulo (gnu services dns) proporciona servicios relacionados con el sistema de nombres de dominio (DNS). Proporciona un servicio de servidor para el alojamiento de un servidor autorizado DNS para múltiples zonas, esclavo o maestro. Este servicio usa Knot DNS. Y también un servidor de caché y reenvío de DNS para la red local, que usa dnsmasq.

Servicio Knot

Esta es una configuración de ejemplo de un servidor de autoridad para dos zonas, una maestra y otra esclava:

(define-zone-entries example.org.zone
;; Name TTL Class Type Data
  ("@"  ""  "IN"  "A"  "127.0.0.1")
  ("@"  ""  "IN"  "NS" "ns")
  ("ns" ""  "IN"  "A"  "127.0.0.1"))

(define master-zone
  (knot-zone-configuration
    (domain "example.org")
    (zone (zone-file
            (origin "example.org")
            (entries example.org.zone)))))

(define slave-zone
  (knot-zone-configuration
    (domain "plop.org")
    (dnssec-policy "default")
    (master (list "plop-master"))))

(define plop-master
  (knot-remote-configuration
    (id "plop-master")
    (address (list "208.76.58.171"))))

(operating-system
  ;; ...
  (services (cons* (service knot-service-type
                     (knot-configuration
                       (remotes (list plop-master))
                       (zones (list master-zone slave-zone))))
                   ;; ...
                   %base-services)))
Variable: knot-service-type

Este es el tipo de datos para el servidor DNS Knot.

Knot DNS es un servidor de autoridad de DNS, lo que significa que puede servir múltiples zonas, es decir, nombres de dominio que compraría a una autoridad de registro de nombres. Este servidor no es un resolvedor, lo que significa que sólo puede resolver nombres para los que tiene autoridad. Este servidor puede configurarse para servir zonas como servidor maestro o como servidor esclavo con una granularidad al nivel de zona. Las zonas esclavas obtendrán sus datos de los servidores maestros, y las proporcionarán como un servidor de autoridad. Desde el punto de vista de un resolvedor, no hay diferencia entre servidor maestro y esclavo.

Los siguientes tipos de datos se usan para configurar el servidor DNS Knot:

Tipo de datos: knot-key-configuration

Tipo de datos que representa una clave. Este tipo tiene los siguientes parámetros:

id (predeterminado: "")

An identifier for other configuration fields to refer to this key. IDs must be unique and must not be empty.

algorithm (predeterminado: #f)

El algoritmo usado. Debe seleccionarse entre #f, 'hmac-md5, 'hmac-sha1, 'hmac-sha224, 'hmac-sha256, 'hmac-sha384 y 'hmac-sha512.

secret (predeterminado: "")

La clave secreta en sí.

Tipo de datos: knot-acl-configuration

Tipo de datos que representa una configuración de lista de control de acceso (ACL). Este tipo tiene los siguientes parámetros:

id (predeterminado: "")

An identifier for other configuration fields to refer to this key. IDs must be unique and must not be empty.

address (predeterminada: '())

Lista ordenada de direcciones IP, subredes o rangos de red representadas como cadenas. La búsqueda debe corresponder con alguna. El valor vacío significa que la comprobación de correspondencia de la dirección no es necesaria.

key (predeterminada: '())

Lista ordenada de referencias a claves representadas como cadenas. La cadena debe corresponder con un ID de clave definido en knot-key-configuration. Ninguna clave significa que la comprobación de claves no es necesaria para este control de acceso (ACL).

action (predeterminada: '())

An ordered list of actions that are permitted or forbidden by this ACL. Possible values are lists of zero or more elements from 'transfer, 'notify and 'update.

deny? (predeterminado: #f)

Cuando es verdadero, este ACL define restricciones. Las acciones enumeradas no se permiten. Cuando es falso, las acciones enumeradas se permiten.

Tipo de datos: zone-entry

Tipo de datos que representa una entrada de registro en un archivo de zona. Este tipo tiene los siguientes parámetros:

name (predeterminado: "@")

El nombre del registro. "@" hace referencia al origen de la zona. Los nombres son relativos al origen de la zona. Por ejemplo, en la zona example.org, "ns.example.org" en realidad hace referencia a ns.example.org.example.org. Los nombres que terminan en un punto se consideran absolutos, lo que significa que "ns.example.org." hace referencia a ns.example.org.

ttl (predeterminado: "")

El tiempo de vida (TTL) de este registro. Si no se proporciona, se usa el TTL predeterminado.

class (predeterminada: "IN")

La clase del registro. Actualmente Knot implementa únicamente "IN" y parcialmente "CH".

type (predeterminado: "A")

El tipo del registro. Los tipos comunes incluyen A (dirección IPv4), AAAA (dirección IPv6), NS (servidor de nombres41) y MX (pasarela de correo42). Otros muchos tipos distintos se encuentran definidos.

data (predeterminados: "")

Los datos que contiene el registro. Por ejemplo, una dirección IP asociada con un registro A, o un nombre de dominio asociado con un registro NS. Recuerde que los nombres de dominio son relativos al origen a menos que terminen con punto.

Tipo de datos: zone-file

Tipo de datos que representa el contenido de un archivo de zona. Este tipo tiene los siguientes parámetros:

entries (predeterminadas: '())

La lista de entradas. El registro SOA se genera automáticamente, por lo que no necesita ponerlo en la lista de entradas. Esta lista probablemente debería contener una entrada apuntando a su servidor DNS de autoridad. En vez de usar una lista de entradas directamente, puede usar define-zone-entries para definir un objeto que contenga la lista de entradas más fácilmente, que posteriormente puede proporcionar en el campo entries del archivo zone-file.

origin (predeterminado: "")

El nombre de su zona. Este parámetro no puede estar vacío.

ns (predeterminado: "ns")

El dominio de su servidor DNS primario de autoridad. El nombre es relativo al origen, a menos que termine en punto. Es obligatorio que este servidor DNS primario corresponda con un registro NS en la zona y que esté asociado a una dirección IP en la lista de entradas.

mail (predeterminado: "hostmaster")

Dirección de correo a través de la cual la gente puede contactar con usted, como propietaria de la zona. Se traduce a <mail>@<origin>.

serial (predeterminado: 1)

Número serie de la zona. Como se usa para tener constancia de los cambios tanto en servidores esclavos como en resolvedores, es obligatorio que nunca decremente. Incremente su valor siempre que haga cambios en su zona.

refresh (predeterminado: (* 2 24 3600))

La frecuencia con la que los servidores esclavos realizarán una transferencia de zona. Este valor es un número de segundos. Puede calcularse con multiplicaciones o con (string->duration).

retry (predeterminado: (* 15 60))

El periodo tras el cual un servidor esclavo reintentará el contacto con su maestro cuando falle al intentarlo la primera vez.

expiry (predeterminado: (* 14 24 3600))

Tiempo de vida (TTL) predeterminado de los registros. Los registros existentes se consideran correctos durante al menos este periodo de tiempo. Tras este periodo, los resolvedores invalidarán su caché y comprobarán de nuevo que todavía exista.

nx (predeterminado: 3600)

Default TTL of inexistent records. This delay is usually short because you want your new domains to reach everyone quickly.

Tipo de datos: knot-remote-configuration

Tipo de datos que representa una configuración remota. Este tipo tiene los siguientes parámetros:

id (predeterminado: "")

An identifier for other configuration fields to refer to this remote. IDs must be unique and must not be empty.

address (predeterminada: '())

Una lista ordenada de direcciones IP de destino. Las direcciones se prueban en secuencia. Opcionalmente se puede proporcionar el puerto con el separador @. Por ejemplo: (list "1.2.3.4" "2.3.4.5@53"). El puerto predeterminado es el 53.

via (predeterminada: '())

An ordered list of source IP addresses. An empty list will have Knot choose an appropriate source IP. An optional port can be given with the @ separator. The default is to choose at random.

key (predeterminada: #f)

Referencia a una clave, esto es una cadena que contiene el identificador de una clave definida en el campo knot-key-configuration.

Tipo de datos: knot-keystore-configuration

Tipo de datos que representa un almacén de claves para alojar claves de dnssec. Este tipo tiene los siguientes parámetros:

id (predeterminado: "")

El identificador del almacén de claves. No debe estar vacío.

backend (predeterminado: 'pem)

El motor en el que se almacenan las claves. Puede ser 'pem o 'pkcs11.

config (predeterminada: "/var/lib/knot/keys/keys")

La cadena de configuración del motor. Un ejemplo para PKCS#11 es: "pkcs11:token=knot;pin-value=1234 /gnu/store/.../lib/pkcs11/libsofthsm2.so". La cadena representa una ruta en el sistema de archivos para el motor pem.

Tipo de datos: knot-policy-configuration

Tipo de datos que representa una política de dnssec. El DNS Knot es capaz de firmar automáticamente sus zonas. Puede generar y gestionar sus claves de manera automática o usar las claves que usted genere.

Dnssec se implementa habitualmente usando dos claves: una clave para firma de claves (KSK) que se usa para firmar la segunda, y una clave para firma de zona (ZSK) que se usa para firmar la zona. Para establecer la confianza, la KSK necesita estar presente en la zona padre (habitualmente un dominio de nivel superior). Si su entidad de registro permite dnssec, debe mandarle el hash de su KSK de manera que puedan añadir un registro DS en su zona. No es automático y debe realizarse cada vez que cambie su KSK.

La política también define el tiempo de vida de las claves. Habitualmente, la ZSK puede cambiarse fácilmente y usa funciones criptográficas más débiles (usa parámetros de menor magnitud) para firmar los registros rápidamente, ya que cambian habitualmente. No obstante, la KSK requiere interacción manual con la entidad de registro, por lo que se cambia menos habitualmente y usa parámetros más fuertes debido a que únicamente firma un registro.

Este tipo tiene los siguientes parámetros:

id (predeterminado: "")

El identificador de la política. No debe estar vacío.

keystore (predeterminado: "default")

Referencia a un almacén de claves, es decir una cadena que contiene el identificador de un almacén de claves definido en un campo de knot-keystore-configuration. El identificador predeterminado "default" implica el uso del almacén de claves predeterminado (una base de datos kasp que se configura para este servicio).

manual? (predeterminado: #f)

Si la gestión de claves es manual o automática.

single-type-signing? (predeterminado: #f)

Cuando sea #t, usa el esquema de firma de tipo único (Single-Type Signing Scheme).

algorithm (predeterminado: "ecdsap256sha256")

Algoritmo para las claves de firma y las firmas emitidas.

ksk-size (predeterminado: 256)

The length of the KSK. Note that this value is correct for the default algorithm, but would be unsecure for other algorithms.

zsk-size (predeterminado: 256)

The length of the ZSK. Note that this value is correct for the default algorithm, but would be unsecure for other algorithms.

dnskey-ttl (predeterminado: 'default)

El valor del tiempo de vida (TTL) de los registros DNSKEY añadidos al “apex” de la zona. El valor especial 'default significa el mismo valor que el TTL del SOA de la zona.

zsk-lifetime (predeterminado: (* 30 24 3600))

El periodo entre la publicación de la ZSK y el inicio del siguiente ciclo de renovación.

propagation-delay (predeterminado: (* 24 3600))

Retraso adicional añadido por cada paso del ciclo de renovación de clave. Este valor debe ser suficientemente alto para cubrir la propagación de datos del servidor maestro a todos los esclavos.

rrsig-lifetime (predeterminado: (* 14 24 3600))

Periodo de validez para las nuevas firmas emitidas.

rrsig-refresh (predeterminado: (* 7 24 3600))

Periodo de antelación con el que se realiza el refresco de la firma antes de una expiración de la misma.

nsec3? (predeterminado: #f)

Si es #t, se usa NSEC3 en vez de NSEC.

nsec3-iterations (predeterminado: 5)

Número de ejecuciones adicionales de la operación de hash.

nsec3-salt-length (predeterminado: 8)

La longitud del campo “salt” en octetos, que se añade al nombre de la propietaria original antes de ejecutar la operación de hash.

nsec3-salt-lifetime (predeterminado: (* 30 24 3600))

El periodo de validez de los campos “salt” que se generen.

Tipo de datos: knot-zone-configuration

Tipo de datos que representa una zona ofrecida por Knot. Este tipo tiene los siguientes parámetros:

domain (predeterminado: "")

El dominio ofrecido con esta configuración. No debe estar vacío.

file (predeterminado: "")

El archivo donde se almacena esta zona. Este parámetro se ignora para zonas maestras. Vacío significa la ruta predeterminada que depende del nombre del dominio.

zone (predeterminado: (zone-file))

El contenido del archivo de zona. Este parámetro se ignora para zonas esclavas. Debe contener un registro de archivo de zona.

master (predeterminado: '())

Lista de maestros remotos. Cuando está vacía, esta zona es maestra. Cuando tiene contenido, esta zona es esclava. Es una lista de identificadores remotos.

ddns-master (predeterminado: #f)

Maestro principal. Cuando está vacío, apunta de manera predeterminada al primer maestro en la lista de maestros.

notify (predeterminado: '())

Una lista de identificadores remotos de esclavos.

acl (predeterminado: '())

Lista de identificadores acl.

semantic-checks? (predeterminado: #f)

Cuando es verdadero, añade más comprobaciones semánticas a la zona.

zonefile-sync (predeterminado: 0)

El retraso entre una modificación en memoria y en disco. 0 significa sincronización inmediata.

zonefile-load (predeterminado: #f)

La forma en la que los contenidos del archivo de zona se aplican durante la carga de la zona. Los valores posibles son:

  • #f para obtener el valor predeterminado de Knot,
  • 'none para no usar el archivo de zona en absoluto,
  • 'difference para calcular la diferencia entre los contenidos disponibles actualmente y los contenidos de la zona y los aplica a los contenidos actuales de la zona actual,
  • 'difference-no-serial es igual que 'difference, pero ignora el código serie SOA en el archivo de zona, mientras que el servidor se hace cargo de él de manera automática.
  • 'whole para cargar los contenidos de la zona del archivo de zona.
journal-content (predeterminado: '())

La forma en la que se usa el diario para almacenar la zona y sus cambios. Los posibles valores son 'none para no usarlo en absoluto, 'changes para almacenar los cambios y 'all para almacenar los contenidos. #f proporciona un valor a esta opción, por lo que se usa el valor predeterminado de Knot.

max-journal-usage (predeterminado: #f)

Tamaño máximo del diario en disco. #f no proporciona un valor a esta opción, por lo que se usa el valor predeterminado de Knot.

max-journal-depth (predeterminado: #f)

Tamaño máximo de la historia. #f proporciona un valor a esta opción, por lo que se usa el valor predeterminado de Knot.

max-zone-size (predeterminado: #f)

Tamaño máximo del archivo de zona. Este límite se usa para transferencias entrantes y actualizaciones. #f no proporciona un valor a esta opción, por lo que se usa el valor predeterminado de Knot.

dnssec-policy (predeterminado: #f)

Una referencia a un registro de knot-policy-configuration, o el nombre especial "default". Si el valor es #f, no se realiza firma dnssec en esta zona.

serial-policy (predeterminado: 'increment)

Una política entre 'increment y 'unixtime.

Tipo de datos: knot-configuration

Tipo de datos que representa la configuración Knot. Este tipo tiene los siguientes parámetros:

knot (predeterminado: knot)

El paquete Knot.

run-directory (predeterminado: "/var/run/knot")

El directorio de ejecución. Este directorio se usará para los archivos de PID y de sockets.

includes (predeterminada: '())

Una lista de cadenas u objetos “tipo-archivo” que denota otros archivos que deben incluirse al inicio del archivo de configuración.

Puede usarse para gestionar secretos en un canal separado. Por ejemplo, las claves secretas pueden almacenarse en un archivo fuera de banda no gestionado por Guix, y por tanto no visible en /gnu/store—por ejemplo, puede almacenar su configuración de clave secreta en /etc/knot/secrets.conf e incluir este archivo en la lista includes.

Se puede generar una clave secreta tsig (para nsupdate y transferencias de zona) con la orden keymgr del paquete knot. Tenga en cuenta que el paquete no se instala automáticamente con el servicio. El ejemplo siguiente muestra como generar una clave tsig nueva:

keymgr -t misecreto > /etc/knot/secrets.conf
chmod 600 /etc/knot/secrets.conf

Tenga también en cuenta que la clave generada se llamará misecreto, de modo que ese nombre es el que debe usarse en el campo key del registro knot-acl-configuration y en otros lugares que hagan referencia a esa clave.

También puede usarse para añadir configuración no implementada por esta interfaz.

listen-v4 (predeterminada: "0.0.0.0")

La dirección IP en la que escuchar.

listen-v6 (predeterminada: "::")

La dirección IP en la que escuchar.

listen-port (predeterminado: 53)

El puerto en el que escuchar.

keys (predeterminada: '())

La lista de configuraciones knot-key-configuration usadas por esta configuración.

acls (predeterminado: '())

La lista de configuraciones knot-acl-configuration usadas por esta configuración.

remotes (predeterminada: '())

La lista de configuraciones knot-remote-configuration usadas por esta configuración.

zones (predeterminada: '())

La lista de configuraciones knot-zone-configuration usadas por esta configuración.

Servicio de resolución de Knot

Variable: knot-resolver-service-type

This is the type of the knot resolver service, whose value should be a knot-resolver-configuration object as in this example:

(service knot-resolver-service-type
         (knot-resolver-configuration
           (kresd-config-file (plain-file "kresd.conf" "
net.listen('192.168.0.1', 5353)
user('knot-resolver', 'knot-resolver')
modules = { 'hints > iterate', 'stats', 'predict' }
cache.size = 100 * MB
"))))

For more information, refer its manual.

Tipo de datos: knot-resolver-configuration

Tipo de datos que representa la configuración de knot-resolver.

package (predeterminado: knot-resolver)

El objeto paquete de la resolución de DNS de knot.

kresd-config-file (predeterminado: %kresd.conf)

Objeto “tipo-archivo” con el archivo de configuración de kresd usado, de manera predeterminada escucha en 127.0.0.1 y ::1.

garbage-collection-interval (predeterminado: 1000)

Número de milisegundos tras los que kres-cache-gc realiza una limpieza periódica de la caché.

Servicio Dnsmasq

Variable: dnsmasq-service-type

This is the type of the dnsmasq service, whose value should be a dnsmasq-configuration object as in this example:

(service dnsmasq-service-type
         (dnsmasq-configuration
           (no-resolv? #t)
           (servers '("192.168.1.1"))))
Tipo de datos: dnsmasq-configuration

Tipo de datos que representa la configuración de dnsmasq.

package (predeterminado: dnsmasq)

El objeto paquete del servidor dnsmasq.

no-hosts? (predeterminado: #f)

Cuando es verdadero, no lee los nombres de máquina en /etc/hosts.

port (predeterminado: 53)

El puerto sobre el que se escucha. Proporcionar el valor cero deshabilita las respuestas DNS completamente, dejando las funciones DHCP y/o TFTP únicamente.

local-service? (predeterminado: #t)

Acepta peticiones DNS únicamente de máquinas cuya dirección esté en una subred local, es decir, subred para la que existe una interfaz en el servidor.

listen-addresses (predeterminadas: '())

Escucha en las direcciones IP proporcionadas.

resolv-file (predeterminado: "/etc/resolv.conf")

Archivo en el que se obtienen las direcciones IP de los servidores de nombres desde los que se obtienen datos.

no-resolv? (predeterminado: #f)

Cuando tiene valor verdadero, no se lee resolv-file.

forward-private-reverse-lookup? (default: #t)

When false, all reverse lookups for private IP ranges are answered with "no such domain" rather than being forwarded upstream.

query-servers-in-order? (default: #f)

When true, dnsmasq queries the servers in the same order as they appear in servers.

servers (predeterminados: '())

Especifica directamente la dirección IP de los servidores proveedores.

servers-file (default: #f)

Specify file containing upstream servers. This file is re-read when dnsmasq receives SIGHUP. Could be either a string or a file-like object.

addresses (predeterminado: '())

Cada entrada especifica una dirección IP devuelta por cualquiera de las máquinas en los dominios proporcionados. Las búsquedas dentro de los dominios nunca se redirigen y siempre se devuelve la dirección IP especificada.

Es útil para redirigir máquinas localmente, como en este ejemplo:

(service dnsmasq-service-type
         (dnsmasq-configuration
           (addresses
             '(; Redirecciona a un servidor web local.
               "/example.org/127.0.0.1"
               ; Redirecciona un dominio a una IP específica.
               "/subdomain.example.org/192.168.1.42"))))

Tenga en cuenta que las reglas en el archivo /etc/hosts tienen precedencia sobre esto.

cache-size (predeterminado: 150)

Establece el tamaño de la caché de dnsmasq. Proporcionar el valor cero desactiva el almacenamiento en caché.

negative-cache? (predeterminado: #t)

Cuando es falso, desactiva la caché negativa.

cpe-id (default: #f)

If set, add a CPE (Customer-Premises Equipment) identifier to DNS queries which are forwarded upstream.

tftp-enable? (predeterminado: #f)

Determina si se activa el servidor TFTP incluido.

tftp-no-fail? (predeterminado: #f)

Si es verdadero, dnsmasq no falla si el servidor TFTP no se ha podido arrancar.

tftp-single-port? (predeterminado: #f)

Determina si se un único puerto para TFTP.

tftp-secure? (predeterminado: #f)

Si es verdadero, únicamente los archivos propiedad de la cuenta que ejecuta el proceso dnsmasq están accesibles.

Si se ejecuta dnsmasq como “root”, se aplican diferentes reglas: tftp-secure? no tiene efecto, únicamente los archivos que tengan permiso de lectura global el mundo serán accesibles.

tftp-max (predeterminado: #f)

Cuando se proporciona un valor indica el número máximo de conexiones simultáneas permitidas.

tftp-mtu (predeterminado: #f)

Si se proporciona un valor, establece el tamaño de la unidad de transmisión de mensajes (MTU) para los paquetes TFTP a dicho valor.

tftp-no-blocksize? (predeterminado: #f)

Si es verdadero, impide al servidor TFTP la negociación del tamaño del bloque con un cliente.

tftp-lowercase? (predeterminado: #f)

Determina si se convierten a minúsculas todos los nombres de archivo en peticiones TFTP.

tftp-port-range (predeterminado: #f)

Si se proporciona un valor, este establece el rango ("<inicio>,<fin>") de puertos dinámicos (uno por cliente) usados.

tftp-root (predeterminado: /var/empty,lo)

Look for files to transfer using TFTP relative to the given directory. When this is set, TFTP paths which include ‘..’ are rejected, to stop clients getting outside the specified root. Absolute paths (starting with ‘/’) are allowed, but they must be within the TFTP-root. If the optional interface argument is given, the directory is only used for TFTP requests via that interface.

tftp-unique-root (predeterminado: #f)

Si se proporciona un valor, añade la dirección IP o hardware del cliente TFTP como un componente de la ruta tras el final de tftp-root. Es válido únicamente si se proporciona una raíz para TFTP y el directorio existe. El valor predeterminado añade la dirección IP (en el formato estándar de cuatro cifras separadas por puntos).

For instance, if --tftp-root is ‘/tftp’ and client ‘1.2.3.4’ requests file myfile then the effective path will be /tftp/1.2.3.4/myfile if /tftp/1.2.3.4 exists or /tftp/myfile otherwise. When ‘=mac’ is specified it will append the MAC address instead, using lowercase zero padded digits separated by dashes, e.g.: ‘01-02-03-04-aa-bb’. Note that resolving MAC addresses is only possible if the client is in the local network or obtained a DHCP lease from dnsmasq.


Footnotes

(41)

Name Server en inglés.

(42)

Mail eXchange en inglés


Next: VNC Services, Previous: Servicios de certificados, Up: Servicios   [Contents][Index]