Jump to content
From ArchWiki

Esta traducción de dnsmasq fue revisada el 2019-11-06. Si existen cambios puede actualizarla o avisar al equipo de traducción.

Artículos relacionados

- Domain name resolution

dnsmasq proporciona un servidor DNS, un servidor DHCP con soporte para DHCPv6 y PXE, y un servidor TFTP. Está diseñado para ser liviano y consumir poco, adecuado para enrutadores y cortafuegos con recursos limitados. dnsmasq también se puede configurar para almacenar en caché las consultas a DNS con el fin mejorar las velocidades de búsqueda de DNS de los sitios visitados con anterioridad.

## Instalación

Instale el paquete dnsmasq.

## Iniciar el demonio

Inicie/active el servicio `dnsmasq.service`.

Para ver si dnsmasq se inició correctamente, consulte el «journal» de systemd:

    # journalctl -u dnsmasq.service

La red también deberá reiniciarse para que el cliente DHCP pueda crear un nuevo archivo `/etc/resolv.conf`.

## Configuración

Para configurar dnsmasq, necesita editar `/etc/dnsmasq.conf`. El archivo contiene extensos comentarios que explican sus opciones. Para todas las opciones disponibles, consulte dnsmasq(8).

Advertencia: dnsmasq activa de forma predeterminada su servidor DNS. Si no lo necesita, debe desactivarlo explícitamente definiendo el puerto DNS en `0`:

    port=0

Sugerencia: Para verificar la sintaxis de los archivos de configuración, ejecute:

    $ dnsmasq --test

### Servidor DNS

Para configurar dnsmasq como un demonio para el almacenamiento de DNS en un solo equipo, especifique una directiva `listen-address`, añadiendo la dirección IP del equipo local:

    listen-address=::1,127.0.0.1

Para utilizar este equipo con el fin de que su dirección IP de LAN escuche otros equipos en la red. Se recomienda utilizar una IP LAN estática en este caso. Por ejemplo:

    listen-address=::1,127.0.0.1,192.168.1.1

Establezca el número de nombres de dominio almacenables en caché con la opción `cache-size=size` (el valor predeterminado es `150`):

    cache-size=1000

Para validar con DNSSEC cargue los anclajes de confianza de DNSSEC proporcionados por el paquete dnsmasq y configure la opción `dnssec`:

    conf-file=/usr/share/dnsmasq/trust-anchors.conf
    dnssec

Consulte dnsmasq(8) para ver más opciones que quizás pueda querer usar.

#### Archivo de direcciones DNS y de reenvío

Después de configurar dnsmasq, necesita añadir las direcciones del equipo local como los únicos servidores de nombres en `/etc/resolv.conf`. Esto hace que todas las consultas se envíen a dnsmasq.

Como dnsmasq no es un servidor DNS recursivo, debe configurar el reenvío a un servidor DNS externo. Esto se puede hacer automáticamente usando openresolv o especificando manualmente la dirección del servidor DNS en la configuración de dnsmasq.

##### openresolv

Si su administrador de red admite resolvconf, en lugar de modificar directamente `/etc/resolv.conf`, puede utilizar openresolv para generar archivos de configuración para dnsmasq. [1]

Edite `/etc/resolvconf.conf` y añada las direcciones de loopback como servidores de nombres, y configure openresolv para escribir la configuración de dnsmasq:

    /etc/resolvconf.conf

    # Utilizar el servidor de nombre local
    name_servers="::1 127.0.0.1"

    # Escribir los archivos de configuración extendida y de resolución de dnsmasq
    dnsmasq_conf=/etc/dnsmasq-openresolv.conf
    dnsmasq_resolv=/etc/dnsmasq-resolv.conf

Ejecute `resolvconf -u` para que se creen los archivos de configuración. Si los archivos no existen `dnsmasq.service` no podrá iniciarse.

Edite el archivo de configuración de dnsmasq para usar la configuración generada de openresolv:

    # Leer la configuración generada por openresolv
    conf-file=/etc/dnsmasq-openresolv.conf
    resolv-file=/etc/dnsmasq-resolv.conf

##### Reenvío manual

Primero debe establecer las direcciones del servidor local como los únicos servidores de nombres en `/etc/resolv.conf`:

    /etc/resolv.conf

    nameserver ::1
    nameserver 127.0.0.1

Consulte Domain name resolution#Overwriting of /etc/resolv.conf sobre cómo proteger el archivo `/etc/resolv.conf` de ser modificado.

Las direcciones del servidor DNS ascendente deben especificarse en el archivo de configuración de dnsmasq como `server=server_address`. También añada `no-resolv` para que dnsmasq no lea innecesariamente `/etc/resolv.conf`, que solo contiene las direcciones del equipo local.

    no-resolv

    # Servidores de nombres de Google, por ejemplo
    server=8.8.8.8
    server=8.8.4.4

Ahora las consultas DNS se resolverán con dnsmasq, solo se verificará si los servidores externos no pueden responder a la consulta desde su caché.

#### Añadir un dominio personalizado

Es posible agregar un dominio personalizado a los equipos de nuestra red (local):

    local=/lan/
    domain=lan

En este ejemplo, es posible enviar un ping a un servidor/dispositivo (por ejemplo, definido en el archivo `/etc/hosts` como `hostname.Lan`.

Descomente `expand-hosts` para añadir el dominio personalizado a las entradas del equipo:

    expand-hosts

Sin esta configuración, deberá añadir el dominio a las entradas de `/etc/hosts`.

#### Prueba

Para realizar una prueba de velocidad de búsqueda, elija un sitio web que no se haya visitado desde que se inició dnsmasq (drill es parte del paquete ldns):

    $ drill archlinux.org | grep "Query time"

Al ejecutar nuevamente la orden, se usará la IP del DNS almacenada en la caché y se obtendrá un tiempo de búsqueda más rápido si dnsmasq está configurado correctamente:

    $ drill archlinux.org | grep "Query time"

    ;; Query time: 18 msec

    $ drill archlinux.org | grep "Query time"

    ;; Query time: 2 msec

Para comprobar si la validación de DNSSEC funciona, consulte DNSSEC#Testing.

### Servidor DHCP

De manera predeterminada, dnsmasq tiene la funcionalidad DHCP desactivada; si desea usarla, debe activarla. Aquí están las configuraciones importantes:

    # Solo escucha la interfaz LAN de los enrutadores.
    # Al hacerlo, se abre el puerto 53 para tcp/udp (para localhost)
    # y el 67 para udp (para el resto):
    interface=<LAN-NIC>

    # dnsmasq abrirá el puerto 53 tcp/udp y el puerto 67 udp (para el resto)
    # para ayudar con las interfaces dinámicas (asignación de ip dinámicas).
    # Dnsmasq descartará el resto de solicitudes,
    # aunque al sistema «paranoid» le gustaría cerrarlos
    # y dejar al kernel manejarlas:
    bind-interfaces

    # Opcionalmente, establecer un nombre de dominio.
    domain=example.com

    # Establecer la puerta de enlace predeterminada.
    dhcp-option=3,0.0.0.0

    # Establecer servidores DNS para anunciar
    dhcp-option=6,0.0.0.0

    # Si su servidor dnsmasq también está haciendo el enrutamiento para su red,
    # puede usar la opción 121 para forzar una ruta estática.
    # x.x.x.x es la LAN de destino, yy es la notación CIDR (generalmente /24),
    # y z.z.z.z es el host que hará el enrutamiento.
    dhcp-option=121,x.x.x.x/yy,z.z.z.z

    # Rango dinámico de direcciones IP para poner a disposición
    # de la interfaz LAN del equipo y el tiempo de «lease».
    # Lo ideal es establecer el tiempo de «lease» en 5 m solo al principio
    # para probar que todo funciona bien antes de establecer registros más largos.
    dhcp-range=192.168.111.50,192.168.111.100,12h

    # Proporcionar contratos de «lease» de DHCP para IPv6 a través de Router Advertisements (RAs) para la máscara de subred aaaa:bbbb:cccc:dddd::/64
    dhcp-range=aaaa:bbbb:cccc:dddd::,ra-only,infinite

    # Si desea que dnsmasq asigne direcciones IP estáticas a algunos clientes,
    # vincule las interfaces LAN de los equipos.
    # Direcciones MAC:
    dhcp-host=aa:bb:cc:dd:ee:ff,192.168.111.50
    dhcp-host=aa:bb:cc:ff:dd:ee,192.168.111.51

Consulte dnsmasq(8) para conocer más detalles.

#### Prueba

Desde un equipo que está conectado al que tiene dnsmasq, configúrelo para utilizar DHCP para la asignación automática de direcciones IP, luego intente iniciar sesión normalmente en la red.

Si inspecciona el archivo `/var/lib/misc/dnsmasq.leases` en el servidor, debería poder ver su asignación.

### Servidor TFTP

dnsmasq tiene un servidor TFTP incorporado.

Para utilizarlo, cree un directorio para la raíz de TFTP (por ejemplo `/srv/tftp`) para colocar los archivos transferibles.

Para mayor seguridad, se recomienda utilizar el modo seguro TFTP de dnsmasq. En modo seguro, solo los archivos propiedad del usuario `dnsmasq` pasarán a través de TFTP. Necesitará hacer chown a la raís de TFTP y a todos los archivos para que pertenezcan al usuario `dnsmasq` a fin de que pueda usar esta característica.

Active TFTP:

    enable-tftp
    tftp-root=/srv/tftp
    tftp-secure

Consulte dnsmasq(8) para más opciones.

### Servidor PXE

PXE requiere servidores DHCP y TFTP, ambas funciones pueden ser provistas por dnsmasq.

Sugerencia: dnsmasq puede ejecutarse en modo «proxy-DHCP» y agregar opciones de arranque PXE a una red con un servidor DHCP en ejecución:

    interface=enp0s0
    bind-dynamic
    dhcp-range=192.168.0.1,proxy

1. configurar #Servidor TFTP y #Servidor DHCP;
2. copiar y configurar un gestor de arranque compatible con PXE (por ejemplo, PXELINUX) sobre la raíz TFTP;
3. active PXE en `/etc/dnsmasq.conf`:

Nota:

- Las rutas de archivos son relativas a la raíz TFTP
- Si el archivo tiene un sufijo de `.0`, debe excluir el sufijo en las opciones de `pxe-service`

Para enviar simplemente un archivo:

    dhcp-boot=lpxelinux.0

Para enviar un archivo dependiendo de la arquitectura del cliente:

    pxe-service=x86PC, "PXELINUX (BIOS)", "bios/lpxelinux"
    pxe-service=X86-64_EFI, "PXELINUX (EFI)", "efi64/syslinux.efi"

Nota: En caso de que `pxe-service` no funcione (especialmente para clientes basados ​​en UEFI), la combinación de `dhcp-match` y `dhcp-boot` puede hacer que funcione. Consulte RFC4578 para obtener más números `client-arch` para utilizarlos con el protocolo de arranque dhcp.

    dhcp-match=set:efi-x86_64,option:client-arch,7
    dhcp-match=set:efi-x86_64,option:client-arch,9
    dhcp-match=set:efi-x86,option:client-arch,6
    dhcp-match=set:bios,option:client-arch,0
    dhcp-boot=tag:efi-x86_64,"efi64/syslinux.efi"
    dhcp-boot=tag:efi-x86,"efi32/syslinux.efi"
    dhcp-boot=tag:bios,"bios/lpxelinux.0"

Consulte dnsmasq(8) para conocer más opciones.

El resto depende del gestor de arranque.

## Consejos y trucos

### Impedir que OpenDNS redirija las consultas de Google

Para evitar que OpenDNS redirija todas las consultas de Google a su propio servidor de búsqueda, añada a `/etc/dnsmasq.conf`:

    server=/www.google.com/<ISP DNS IP>

### Anular direcciones

En algunos casos, como cuando esté operando un portal cautivo, puede ser útil resolver nombres de dominios específicos en un conjunto de direcciones codificadas. Esto se hace con la configuración `address`:

    address=/example.com/1.2.3.4

Además, es posible devolver una dirección específica para todos los nombres de dominio que no son contestados desde `/etc/hosts` o DHCP utilizando un comodín especial:

    address=/#/1.2.3.4

### Tener más de una instancia

Si queremos que dos o más servidores dnsmasq funcionen por interfaz(ces).

#### Estático

Para hacer esto de forma estática, servidor por interfaz, utilice las opciones `interface` y `bind-interface`. Esto obliga a dnsmasq a iniciarse en segundo lugar.

#### Dinámico

En este caso, podemos excluir por interfaz y enlazar cualquier otra:

    except-interface=lo
    bind-dynamic

Nota: Esto está predeterminado en libvirt.

### Lista negra de dominios

Para poner en la lista negra dominios, es decir, responder consultas para ellos con NXDOMAIN, utilice la opción `address` sin especificar la dirección IP:

    address=/blacklisted.example/
    address=/another.blacklisted.example/

Para facilitar su uso, coloque la lista negra en un archivo separado, por ejemplo `/etc/dnsmasq.d/blacklist.conf` y cárguelo desde `/etc/dnsmasq.conf` con `conf-file=/etc/dnsmasq.d/blacklist.conf` o `conf-dir=conf-dir=/etc/dnsmasq.d/,*.conf`.

Sugerencia: Se puede encontrar una lista de posibles fuentes para la lista negra en OpenWrt's adblock package's README.

## Véase también

- Caching Nameserver using dnsmasq, and a few other tips and tricks.

Categories:

- Domain Name System (Español)
- DHCP (Español)