Cómo configurar un resolvedor de DNS local con Unbound en Debian
Unbound es un software de servidor DNS gratuito y de código abierto que puede utilizarse para resolver DNS de validación, recursivos y de caché. Es un servidor DNS rico en funciones que admite DNS sobre TLS (DoT), DNS sobre HTTPS (DoH), minimización de nombres de consulta, uso agresivo de caché validada por DNSSEC y compatibilidad con zonas de autoridad. Unbound se centra en la privacidad y seguridad del DNS, pero sin sacrificar la velocidad y el rendimiento.
Unbound está desarrollado principalmente por NLnet Labs y distribuido bajo licencia BSD, y es compatible con las modernas funciones sobre estándares abiertos del Servidor DNS. Unbound ha sido rigurosamente auditado, y puede ejecutarse en Linux, BSD y macOS. Unbound está disponible para la mayoría de estos sistemas operativos y puede instalarse mediante el gestor de paquetes del sistema.
En esta guía aprenderás a configurar un servidor DNS privado con Unbound en un servidor Debian 11 y Debian 12. Configurarás Unbound como servidor DNS local con algunas funciones como servidor DNS autoritativo, activarás la caché DNS, configurarás la dirección IP local y las listas de control de acceso (ACL), configurarás los nombres de dominio locales y, a continuación, configurarás Unbound como resolver DNS con DNS sobre TLS (DoT) activado.
Además, también configurarás el registro para el servicio Unbound mediante Rsyslog y Logrotate.
Requisitos previos
Para completar esta guía, debes tener los siguientes requisitos.
- Un sistema que ejecute un servidor Debian 11 o un servidor Debian 12.
- Una cuenta de usuario con privilegios de administrador sudo/root.
Ya está. Ya puedes empezar a instalar Unbound como Servidor DNS Local.
Instalación de Unbound
Por defecto, el paquete Unbound está disponible en el repositorio de Debian. Puedes instalarlo mediante APT. En este primer paso, instalarás el paquete Unbound, que incluye el ‘dns-root-data’ en tu servidor Debian.
Antes de empezar, actualiza y refresca el índice de paquetes de Debian mediante el siguiente comando apt.
sudo apt update
Ahora ejecuta el siguiente comando apt para comprobar si el paquete ‘unbound‘ está disponible en el repositorio de Debian.
sudo apt info unbound
El siguiente resultado confirma que el paquete Unbound está disponible por defecto en el repositorio del servidor Debian con la versión actual 1.13.
Ahora ejecuta el siguiente comando apt para instalar unbound en tu sistema Debian. Cuando se te solicite, introduce y para confirmar y pulsa ENTER para continuar.
sudo apt install unbound
Salida:
Una vez instalado Unbound, ejecuta el siguiente comando systemctl para verificar el servicio Unbound y asegurarte de que el servicio está habilitado y funcionando.
sudo systemctl is-enabled unbound sudo systemctl status unbound
El servicio Unbound está activado y se iniciará automáticamente al arrancar el sistema. Y el estado del servicio Unbound es en ejecución.
Nota adicional, si has desactivado IPv6 en tu servidor Debian, el servicio Unbound no puede iniciarse. Para solucionarlo, puedes añadir el parámetro ‘do-ip6: no‘ a la sección ‘server‘ del archivo de configuración de Unbound ‘/etc/unbound/unbound.conf‘.
Con Unbound instalado, a continuación empezarás a configurar Unbound en tu sistema.
Configuración del servidor DNS de Unbound
La configuración por defecto de Unbound se encuentra en ‘/etc/unbound/unbound.conf’. En este paso, modificarás el archivo de configuración principal de Unbound ‘/etc/unbound.conf’ mediante tu editor preferido.
Ahora aprenderás la configuración básica de un servidor DNS de Unbound.
Configuración básica
Abre el archivo de configuración predeterminado de Unbound ‘ /etc/unbound/unbound.conf ‘ con tu editor preferido. Este ejemplo utiliza nano para editar el archivo de configuración ‘/etc/unbound/unbound.conf‘.
sudo nano /etc/unbound/unbound.conf
Añade las siguientes líneas al archivo. Puedes establecer configuraciones básicas de Unbound en la sección’ servidor’. En este ejemplo, ejecutarás Unbound en la dirección IP local ‘192.168.5.20‘ con el puerto 53 por defecto. Además, configurarás el registro en mensajes Syslog y desactivarás IPv6. Por último, configurarás Unbound para que consulte recursivamente cualquier nombre de host de los servidores DNS raíz a través del archivo «root-hints».
#Adding DNS-Over-TLS support server: use-syslog: yes username: "unbound" directory: "/etc/unbound" tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt do-ip6: no interface: 192.168.5.20 port: 53 prefetch: yes
root-hints: /usr/share/dns/root.hints
harden-dnssec-stripped: yes
Parámetros detallados:
- use-syslog: activar el registro en mensajes Syslog.
- username: ejecutar como usuario unbound, que es el usuario por defecto.
- directorio: el directorio de trabajo por defecto de Unbound es el directorio ‘/etc/unbound‘.
- tls-cert-bundle: Certificados que se utilizan para autenticar las conexiones que se establecen. En las distribuciones basadas en Debian, el archivo cert se encuentra en ‘/etc/ssl/certs/ca-certificates.crt’.
- do-ip6: usa ‘sí’ para ejecutar Unbound con IPv6 o pon‘no‘ para desactivar IPv6.
- interfaz: interfaz de red o dirección IP en la que se ejecutará Unbound. Puedes utilizar una dirección IP o el nombre de la interfaz, como «eth0«. También puedes ejecutar en un puerto específico añadiendo un formato como este ‘DIRECCIÓN-IP@PUERTO‘.
- puerto: especifica el puerto en el que se ejecutará Unbound y por el que se gestionarán las conexiones de los clientes. El puerto DNS por defecto es el 53.
- prefetch: establece ‘yes‘ para activar la prefetch de las entradas de la caché de mensajes casi caducadas.
- root-hints: un archivo que contiene detalles del servidor DNS raíz. El archivo ‘/usr/share/dns/root.hints’ lo proporciona el paquete ‘dns-root-data’. Y también, puedes descargar el archivo root-hints desde aquí ‘https://www.internic.net/domain/named.cache’.
- harden-dnssec-stripped: ajústalo a «yes» para evitar la recepción de datos «dnssec-stripped».
Activar la caché DNS
A continuación, añade las siguientes líneas para habilitar la consulta de caché DNS en tu instalación de Unbound.
cache-max-ttl: 14400 cache-min-ttl: 1200
Parámetros detallados:
- cache-max-ttl: TTL o Tiempo de Vida para los RRSets y mensajes en la caché DNS. El formato es en segundos.
- cache-min-ttl: Tiempo de vida mínimo para la caché. El valor por defecto es 0, pero puedes cambiarlo a tu gusto, como por ejemplo «1200» segundos. No lo configures para más de 1 hora o tendrás problemas debido a los datos obsoletos.
Privacidad y seguridad sin límites
Ahora puedes añadir las siguientes líneas para configurar la privacidad y seguridad básicas de Unbound.
aggressive-nsec: yes hide-identity: yes hide-version: yes use-caps-for-id: yes
Parámetros detallados:
- aggressive-nsec: ponlo a«yes» para activar la NSEC agresiva, que consiste en utilizar la cadena DNSSEC NSEC para sintetizar las denegaciones NXDOMAIN y otras. Consulta la página web del IETF sobre ‘NSEC‘ https://www.ietf.org/archive/id/draft-ietf-dnsop-nsec-ttl-00.html.
- hide-identity: configurado como sí para desactivar las respuestas de las consultas bind sobre id.servidor o hostname.bind.
- hide-version: establece sí para desactivar las consultas versión.servidor y versión.bind.
- use-caps-for-id: establece sí para activar el uso de «0x20-encoded» en la consulta para frustrar los intentos de suplantación.
Definir la red privada y las listas de control de acceso (ACL)
A continuación, debes definir la dirección privada de tu red y las ACL (Listas de Control de Acceso). Cambia la subred local en las líneas de abajo con tu entorno de red actual.
private-address: 192.168.0.0/16 private-address: 169.254.0.0/16 private-address: 172.16.0.0/12 private-address: 10.0.0.0/8 private-address: fd00::/8 private-address: fe80::/10 #control which clients are allowed to make (recursive) queries access-control: 127.0.0.1/32 allow_snoop access-control: ::1 allow_snoop access-control: 127.0.0.0/8 allow access-control: 192.168.5.0/24 allow
Parámetros detallados:
- dirección-privada: define subredes de red privadas en tu infraestructura. Sólo los nombres «private-domain» y «local-data » pueden tener estas direcciones privadas.
- access-control: define el control de acceso en el que se permite a los clientes hacer consultas (recursivas) al servidor de Unbound. El parámetro «allow» permitirá las recursivas, mientras que «allow_snoop» permitirá tanto las recursivas como las no recursivas.
Configurar el dominio local
Tras configurar las listas de direcciones privadas y de control de acceso, ahora definirás la zona local para tu nombre de dominio local. Esto es muy útil, sobre todo si tienes varias aplicaciones autoalojadas en tu red local. Puedes definir fácilmente tu nombre de dominio o subdominios y apuntar a la dirección IP de destino específica.
En este ejemplo se creará la zona para el dominio «garden.lan» con el tipo «static«, luego crearás múltiples subdominios mediante el parámetro «local-data». Cada subdominio apuntará a una dirección IP concreta, y también crearás registros PTR mediante el parámetro «local-data-ptr«.
# local zone local-zone: "garden.lan." static local-data: "firewall.garden.lan. IN A 10.0.0.1" local-data: "vault.garden.lan. IN A 10.0.0.2" local-data: "media.garden.lan. IN A 10.0.0.3" local-data: "docs.garden.lan. IN A 10.0.0.4" local-data: "wiki.garden.lan. IN A 10.0.0.5" local-data-ptr: "10.0.0.1 firewall.garden.lan" local-data-ptr: "10.0.0.2 vault.garden.lan" local-data-ptr: "10.0.0.3 media.garden.lan" local-data-ptr: "10.0.0.4 docs.garden.lan" local-data-ptr: "10.0.0.5 wiki.garden.lan"
Parámetros detallados:
- local-zone: define aquí el dominio local.
- local-data: define el registro A para los subdominios y qué dirección IP local se resolverá.
- local-data-ptr: define el registro ptr para tus subdominios.
Ajuste y mejora del rendimiento de Unbound
Añade las siguientes líneas para obtener más rendimiento. Puedes ajustar los siguientes parámetros a tu entorno actual.
num-threads: 4 msg-cache-slabs: 8 rrset-cache-slabs: 8 infra-cache-slabs: 8 key-cache-slabs: 8 rrset-cache-size: 256m msg-cache-size: 128m so-rcvbuf: 8m
Parámetros detallados:
- num-threads: el número de hilos que se crearán. El valor debe coincidir con los núcleos de CPU del servidor.
- msg-cache-slabs: el número de slabs a utilizar para la caché de mensajes. Establécelo en 8 para optimizar Unbound para que utilice más memoria para la caché.
- rrset-cache-slabs: el número de losas a utilizar para la caché RRset. Establécelo en 8 para optimizar Unbound para que utilice más memoria para la caché RRSet.
- infra-cache-slabs: el número de losas a utilizar para la caché de Infraestructura. Establécelo en 8 para que Unbound utilice más memoria para la caché de Infraestructura.
- key-cache-slabs: el número de losas a utilizar para la caché de claves. Establécelo en 8 para que Unbound utilice más memoria para la caché de claves.
- rrset-cache-size: especifica la cantidad de memoria para la caché RRSet. Este ejemplo utiliza 256MB, siendo el valor por defecto de sólo 4MB.
- msg-cache-size: especifica la cantidad de memoria para la caché de mensajes. Este ejemplo utiliza 128MB, siendo el valor por defecto de sólo 4MB.
- so-rcvbuf: establece el tamaño del búfer para el puerto DNS 53/udp en 8 MB.
Configurar Unbound como resolvedor DNS con DNS-sobre-TLS (DoT)
Por último, añade una nueva sección «forward-zone» para configurar Unbound como resolvedor DNS para tus redes locales. Este ejemplo utiliza servidores DNS Quad9 con DoT (DNS-over-TLS) activado.
forward-zone: name: "." forward-ssl-upstream: yes ## Also add IBM IPv6 Quad9 over TLS forward-addr: 9.9.9.9@853#dns.quad9.net forward-addr: 149.112.112.112@853#dns.quad9.net
Detalla los parámetros:
- forward-zone: define la zona de reenvío para Unbound.
- name: establece «.» para reenviar todas las consultas DNS.
- forward-addr: utiliza un reenviador específico para reenviar todas las consultas DNS. Este ejemplo utiliza Quad9 DNS con DNS sobre TLS (DoT) activado.
Guarda y sal del archivo‘/etc/unbound/unbound.conf‘ cuando hayas terminado. Con el archivo de configuración de Unbound modificado, ya puedes reiniciar el servicio Unbound y aplicar los cambios.
Ejecuta el siguiente comando de comprobación y verifica la configuración de Unbound. Si tiene éxito, deberías obtener una salida como ‘unbound-checkconf: no errors in /etc/unbound/unbound.conf’.
sudo unbound-checkconf
A continuación, ejecuta el siguiente comando systemctl para reiniciar el servicio Unbound y aplicar los cambios.
sudo systemctl restart unbound
Ahora que ya has terminado la configuración de Unbound, lo siguiente será configurar el cortafuegos UFW y abrir el puerto DNS 53 por defecto.
Configurar el cortafuegos UFW
En este paso, configurarás el cortafuegos UFW en el servidor Debian y abrirás el puerto DNS 53/udp. Pero antes, debes instalar los paquetes UFW desde el repositorio de Debian a través de APT.
Ejecuta el siguiente comando apt para instalar el cortafuegos UFW en tu servidor Debian. Introduce y cuando se te pida y pulsa ENTER para continuar.
sudo apt install ufw
Resultado:
Una vez instalado UFW, debes abrir el servicio OpenSSH en UFW mediante el siguiente comando. A continuación, puedes añadir el puerto DNS 53/udp al cortafuegos de UFW.
sudo ufw allow OpenSSH sudo ufw allow 53/udp
A continuación, ejecuta el siguiente comando para iniciar y habilitar el servicio de cortafuegos de UFW. Cuando se te solicite, introduce y para confirmar y pulsa ENTER para continuar.
sudo ufw enable
La salida«El cortafuegos está activo y habilitado al iniciar el sistema» confirma que el cortafuegos UFW se está ejecutando y está habilitado, lo que significa que el cortafuegos UFW se iniciará automáticamente al iniciar el sistema.
Resultado:
Ahora ejecuta el siguiente comando ufw para verificar el estado del cortafuegos UFW. Deberías recibir una salida que indique que el estado del UFW es «activo» con el servicio OpenSSH y el puerto DNS 53/udp habilitados.
sudo ufw status
Salida:
Registro no enlazado mediante Rsyslog y Logrotate
Tras configurar el cortafuegos de la UFW, ahora configurarás un archivo de registro para Unbound mediante rsyslog y logrotate. El servicio rsyslog creará un archivo de registro específico para Unbound y el logrotate rotará el archivo de registro de Unbound en un tiempo determinado.
Crea un nuevo archivo de configuración de rsyslog ‘/etc/rsyslog.d/unbound.conf‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/rsyslog.d/unbound.conf
Añade las siguientes líneas al archivo. Con esto, los registros de Unbound se almacenarán en ‘/var/log/unbound.log’.
# Log messages generated by unbound application if $programname == 'unbound' then /var/log/unbound.log # stop processing it further & stop
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora ejecuta el siguiente comando systemctl para reiniciar el servicio ‘rsyslog’ y aplicar los cambios.
sudo systemctl restart rsyslog
A continuación, configurarás la rotación del registro para el archivo de registro de Unbound‘/var/log/unbound.log‘. Y puedes conseguirlo mediante el servicio logrotate.
Crea un nuevo archivo de configuración de logrotate‘/etc/logrotate.d/unbound‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/logrotate.d/unbound
Añade las siguientes líneas al archivo. Esto creará la rotación del registro para el archivo de registro de Unbound‘/var/log/unbound.log‘ diariamente.
/var/log/unbound.log { daily rotate 7 missingok create 0640 root adm postrotate /usr/lib/rsyslog/rsyslog-rotate endscript }
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora ejecuta el siguiente comando systemctl para reiniciar el servicio logrotate y aplicar los cambios.
sudo systemctl restart logrotate
Con esto, ya has instalado y configurado correctamente el servidor DNS Unbound y has configurado el registro mediante Rsyslog y Logrotate. Los registros de Unbound se guardarán en el archivo ‘/var/unbound/unbound.log‘.
Configurar el resolvedor DNS en el cliente Linux
En este paso, aprenderás a configurar un resolvedor DNS en las máquinas cliente. Te mostraremos dos métodos para diferentes distribuciones de Linux.
Para clientes Ubuntu: La red en Ubuntu está gestionada por NetworkManager. Para configurar un resolver DNS, puedes combinar NetworkManager con systemd-resolved como backend.
Para clientes Debian: en los sistemas Debian (versión mínima), la red se gestiona mediante el archivo de configuración tradicional ‘/etc/network/interface’. Puedes definir el directorio DNS resolver en el archivo ‘/etc/network/interface’ o utilizar el servicio systemd-resolved, que está disponible por defecto en el servidor Debian.
Para clientes de Ubuntu con NetworkManager y Systemd-resolved
Esto es para los usuarios de Ubuntu que utilizan NetworkManager como configuración de red por defecto. Configurarás systemd-resolved como backend del servidor DNS en NetworkManager.
Abre el archivo‘/etc/NetworkManager/NetworkManager.conf‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/NetworkManager/NetworkManager.conf
Descomenta el parámetro‘dns‘ y añade el backend como‘systemd-resolved‘.
dns=systemd-resolved
Guarda el archivo y sal de él cuando hayas terminado.
Ahora ejecuta el siguiente comando systemctl para reiniciar el servicio NetworkManager y aplicar los cambios.
sudo systemctl restart NetworkManager
A continuación, definirás el DNS local no enlazado en systemd-resolved.
Abre el archivo de configuración de systemd-resolved‘/etc/systemd/resolved.conf‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/systemd/resolved.conf
En la sección ‘[Resolver]‘, descomenta el parámetro‘DNS‘ e introduce la dirección IP de tu servidor DNS No Unido.
[Resolve] DNS= 192.168.5.20
Guarda el archivo y sal de él cuando hayas terminado.
A continuación, ejecuta el siguiente comando systemctl para iniciar y activar el servicio «systemd-resolved«.
sudo systemctl start systemd-resolved sudo systemctl enable systemd-resolved
Ahora comprueba el estado del servicio «systemd-resolved» mediante el siguiente comando. Deberías ver que «systemd-resolved» está habilitado y se ejecutará automáticamente al iniciar el sistema. Y el estado del servicio «systemd-resolved» es ahora en ejecución.
sudo systemctl status systemd-resolved
También puedes verificar la configuración de tu resolver DNS mediante el siguiente comando«resolvectl«. Y deberías ver que el resolver por defecto es tu servidor DNS Unbound con la dirección IP‘192.168.5.20‘.
resolvectl status
Para clientes Debian
Para el sistema Debian, también puedes utilizar el servicio systemd-resolved para configurar un resolver DNS.
Abre el archivo de configuración de systemd-resolved ‘/etc/systemd/resolved.conf ‘ utilizando el editor nano que aparece a continuación.
sudo nano /etc/systemd/resolved.conf
Añade el parámetro‘DNS‘ seguido de la dirección IP del servidor Unbound en la sección ‘[Resolver]‘.
[Resolve] DNS=192.168.5.20
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora ejecuta el siguiente comando systemctl para iniciar y habilitar el servicio systemd-resolved.
sudo systemctl start systemd-resolved sudo systemctl enable systemd-resolved
Salida:
A continuación, comprueba el estado del servicio systemd-resolved para asegurarte de que se está ejecutando. La salida ‘activo (en ejecución)‘ confirma que systemd-resolved está en ejecución, y la salida ‘cargado ../../../systemd-resolved.service; habilitado;..‘ confirma que el servicio está habilitado.
sudo systemctl status systemd-resolved
Salida:
Puedes verificar la configuración de tu resolvedor DNS mediante el comando‘resolvectl‘ que aparece a continuación. Y deberías ver que el resolver por defecto es tu servidor DNS Unbound con la dirección IP ‘192.168.5.20‘.
resolvectl status
Resultado:
Probando el servidor DNS no enlazado
Ejecuta el comando dig que aparece a continuación para asegurarte de que el DNS Unbound funciona como un resolver DNS. El parámetro ‘@192.168.5.20’ garantiza que estás utilizando un servidor DNS Sin Encuadernar que se ejecuta en la dirección IP ‘192.168.5.20‘.
dig @192.168.5.20
Si lo consigues, recibirás una respuesta del servidor DNS raíz como la que se muestra a continuación. Además, observarás la bandera «ad» (datos auténticos) en la salida de la cabecera, lo que significa que la DNSSEC está activada.
A continuación, ejecuta el siguiente comando para asegurarte de que los clientes pueden acceder a los nombres de dominio en línea.
dig github.com dig duckduckgo.com
Cuando lo consigas, deberías recibir una salida con los detalles del registro DNS para el dominio «github.com» y «duckduckgo.com«. Puedes ver que el resolver DNS que responde a la consulta es ‘127.0.0.53#53‘, que es el systemd-resolved que utiliza Unbound como resolver por defecto. También puedes ver el ‘Tiempode consulta’ para cada consulta, el ‘Tiempo de consulta‘ al dominio ‘github.com’ es‘1367‘ y a ‘duckduckgo.com‘ es‘1059‘.
Salida para github.com:
Salida para duckduckgo.com:
Si vuelves a ejecutar el comando dig encima, el ‘Tiempo de consulta’ debería reducirse. Esto confirma que tus consultas se han almacenado en caché y que la caché DNS funciona.
dig github.com dig duckduckgo.com
Salida:
A continuación, verifica el dominio o subdominio local mediante el comando dig que aparece a continuación. Si tiene éxito, cada subdominio apuntará a la dirección IP correcta, tal y como está configurada en el archivo de configuración de Unbound‘/etc/unbound/unbound.conf‘.
dig firewall.garden.lan +short dig vault.garden.lan +short dig media.garden.lan +short
Resultado:
Ahora ejecuta el siguiente comando dig para asegurarte de que los registros PTR apuntan al nombre de dominio correcto.
dig -x 10.0.0.1 +short dig -x 10.0.0.2 +short dig -x 10.0.0.3 +short
Resultado:
Por último, también puedes verificar DoT (DNS sobre TLS) mediante tcpdump. Instala el paquete«tcpdump» en tu servidor Unbound.
sudo apt install tcpdump
Introduce y cuando te lo pida y pulsa ENTER para continuar.
Ahora ejecuta el siguiente comando tcpdump para supervisar el tráfico en la interfaz «eth0» con el puerto 853 de DoT. En este ejemplo, el DNS Unbound se ejecuta en la dirección IP «192.168.5.20» con la interfaz «eth0«.
tcpdump -vv -x -X -s 1500 -i eth0 'port 853'
Desplázate a la máquina cliente y ejecuta el siguiente comando para acceder a los nombres de dominio externos/internet mediante el comando dig que aparece a continuación.
dig google.com
Resultado:
Después de esto, vuelve al servidor Unbound y ahora deberías obtener una salida similar a ésta en la salida de tcpdump.
Con esto, ya has instalado y configurado el Servidor DNS Local a través de Unbound. Además, has configurado un resolver DNS en clientes Ubuntu mediante systemd-resolved y NetworkManager, y en clientes Debian mediante systemd-resolved.
Conclusión
En esta guía, has instalado el Servidor DNS Local de Unbound en un servidor Debian 11. Has activado la caché DNS, DNSSEC (activada por defecto), configurado la dirección privada y las ACL, añadido el dominio local mediante local-zone, y configurado Unbound como DNS resolver con DoT (DNS-over-TLS).
Además, has configurado la privacidad y seguridad básicas del DNS, has optimizado Unbound y has configurado los registros de Unbound mediante rsyslog y logrotate.
Al final de esta guía, también has aprendido a configurar un resolver DNS en máquinas Ubuntu y Debian mediante NetworkManager y systemd-resolved. Y también has aprendido el uso básico del comando dig para comprobar el servidor DNS.