Ejecución del servidor DNS Technitium en Ubuntu Linux

Ejecución del servidor DNS Technitium en Ubuntu Linux

Loading

Actualizado: 4 de febrero de 2025

El Servidor DNS de Technitium está diseñado para ser multiplataforma con .NET. Puede ejecutar la aplicación portátil del Servidor DNS en Windows, Linux o macOS mediante ASP.NET Core 8 Runtime . Raspberry Pi con CPU ARM7 es compatible , por lo que Raspberry Pi 1 y Raspberry Pi Zero con CPU ARM6 no lo son.

Esta publicación está escrita para Ubuntu Linux , pero puedes seguir fácilmente pasos similares en tu distribución favorita.

Esta entrada del blog se actualiza periódicamente para ofrecer las últimas instrucciones sobre la instalación del servidor DNS. Por lo tanto, consúltela cuando vaya a realizar una nueva instalación.

Uso del instalador/actualizador automático

Se puede usar un script de instalación automatizado para instalar o actualizar el servidor DNS. Este script se ha probado en las siguientes distribuciones:

  • Servidor Ubuntu (x64)
  • Escritorio Ubuntu (x64)
  • Raspbian (Buster) (ARM32)
  • CentOS 8.2 (2004) (x64)
  • Servidor Fedora 32 (x64)

El script de instalación también puede funcionar en otras distribuciones y plataformas.

curl -sSL https://download.technitium.com/dns/install.sh | sudo bash

¡NOTA! Si tiene un firewall instalado, deberá habilitar estos puertos manualmente:

  • 5380/tcp (para acceso a la consola web)
  • 53443/tcp (para acceso HTTPS a la consola web)
  • 53/udp (servicio DNS predeterminado)
  • 53/tcp (servicio DNS predeterminado)
  • 853/udp (servicio DNS sobre QUIC)
  • 853/tcp (servicio DNS sobre TLS)
  • 443/udp (servicio DNS sobre HTTPS a través de HTTP/3)
  • 443/tcp (servicio DNS sobre HTTPS a través de HTTP/1.1 y HTTP/2)
  • 80/tcp (servicio DNS sobre HTTP para proxy inverso o desafío HTTP de renovación de certificado)
  • 67/udp (si planea utilizar el servidor DHCP integrado)

Uso del desinstalador automático

Se puede usar un script de desinstalación automático para eliminar el servidor DNS instalado mediante el script de instalación automático mencionado anteriormente. Este script eliminará tanto el servidor DNS como el entorno de ejecución .NET.

curl -sSL https://download.technitium.com/dns/uninstall.sh | sudo bash

NOTA: El desinstalador configurará su archivo /etc/resolv.conf para usar los servidores DNS 8.8.8.8 y 1.1.1.1. Para restaurar la configuración predeterminada, siga los pasos correspondientes a su distribución:

  • Servidor Ubuntu, Escritorio Ubuntu, CentOS o Fedora
    sudo systemctl enable systemd-resolved sudo systemctl start systemd-resolved sudo rm /etc/resolv.conf sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf Los pasos anteriores restaurarán la configuración resuelta por systemd predeterminada .
  • Raspbian (Buster)
    sudo rm /etc/resolv.conf sudo resolvconf -ul Los pasos anteriores restaurarán la configuración predeterminada de resolvconf .

Implementación de un contenedor Docker

Puedes instalar el servidor DNS utilizando la imagen oficial de Docker disponible en Docker Hub .

Descargue el archivo docker-compose.yml y edítelo según sus requisitos de implementación. Una vez listo, ejecute los siguientes comandos para crear un nuevo contenedor Docker con él, docker-compose.ymlcomo se muestra a continuación:

docker componer -d

Para actualizar un contenedor existente, ejecute los siguientes comandos:

Docker Compose Down
imagen de Docker RM Technitium/DNS-Server
docker componer -d

¡Nota! Debe asegurarse de que el contenedor Docker esté escuchando en los puertos 53/tcp y 53/udp del sistema host. Si los puertos ya están ocupados por stub resolvers como dnsmasq o systemd-resolved , debe detenerlos como se explica más adelante en esta publicación.

Instalación manual del servidor DNS

Instala ASP.NET Core 8 Runtime desde aquí . Si quieres instalar ASP.NET Core Runtime en Raspberry Pi, sigue las instrucciones de esta entrada de blog para instalarlo manualmente.

Una vez que haya instalado ASP.NET Core Runtime, inicie la Terminal o SSH en el servidor y siga los pasos a continuación para instalar el servidor DNS en Ubuntu:

  1. Descargue la aplicación portátil DNS Server usando wget y extráigala.wget https://download.technitium.com/dns/DnsServerPortable.tar.gz sudo mkdir -p /opt/technitium/dns sudo tar -zxf DnsServerPortable.tar.gz -C /opt/technitium/dns
  2. Ahora puedes ejecutar el servidor DNS directamente desde la consola como una aplicación independiente.cd /opt/technitium/dns sudo ./start.sh
  3. O, si tu distribución usa systemd , sigue estos pasos para instalarlo como un demonio.sudo cp /opt/technitium/dns/systemd.service /etc/systemd/system/dns.service sudo systemctl enable dns.service sudo systemctl start dns.service Es posible que desees verificar las entradas del registro de systemd para encontrar el problema si el demonio no se inicia:journalctl –unit dns –follow
  4. Abra la URL http://<server-ip-address>:5380/para acceder a la consola web.

Actualización manual del servidor DNS

Asegúrate de haber descargado el entorno de ejecución de ASP.NET Core 8 desde aquí . Inicia la terminal y sigue los pasos a continuación para actualizar el servidor DNS en Ubuntu:

  1. Descargue la aplicación portátil DNS Server usando wget y extráigala.wget https://download.technitium.com/dns/DnsServerPortable.tar.gz sudo tar -zxf DnsServerPortable.tar.gz -C /opt/technitium/dns
  2. Si su distribución utiliza systemd , siga estos pasos para reiniciar el demonio del servidor DNS.sudo systemctl restart dns.service Es posible que desees verificar las entradas del registro de systemd para encontrar el problema si el demonio no se inicia:journalctl –unit dns –follow
  3. Abra la URL http://<server-ip-address>:5380/para acceder a la consola web.

¡Nota! La carpeta de instalación se ha cambiado de la antigua «/etc/dns» a «/opt/technitium/dns» en las instrucciones anteriores. Debe extraer los archivos a la carpeta donde tiene instalado el servidor DNS.

Problema común con Ubuntu

Si usa Ubuntu Desktop, es posible que el demonio dnsmasq o systemd-resolved ya se esté ejecutando en el puerto UDP 53, lo que impide que el servidor DNS escuche en ese mismo puerto. Puede consultar el archivo de registro del servidor DNS desde la consola web para confirmar el problema; para ello, busque este error:

[2019-01-01 07:30:59 UTC] [0.0.0.0:53] System.Net.Sockets.SocketException (98): Dirección ya en uso
   en System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(error de SocketError, cadena nombreDeLaCliente)
   en System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   en System.Net.Sockets.Socket.Bind(EndPoint localEP)
   en DnsServerCore.DnsServer.Start() en Z:\Technitium\Projects\DnsServer\DnsServerCore\DnsServer.cs:línea 811

Puede confirmar si se resuelve mediante dnsmasq o systemd ejecutando el comando sudo netstat -nlpu .

Siga estos pasos a continuación para deshabilitar el servicio dnsmasq :

  1. Edite el archivo NetworkManager.conf para deshabilitar el servicio dnsmasq:sudo nano /etc/NetworkManager/NetworkManager.conf Comente la línea dns=dnsmasq agregando el carácter # al comienzo de esta manera #dns=dnsmasq y salga del editor presionando CTRL+X e ingrese y para guardar el archivo.
  2. Reinicie la computadora para aplicar los cambios como se muestra a continuación:sudo reboot ahora
  3. Después de reiniciar el sistema, abra la Terminal y verifique los registros del servidor DNS nuevamente desde la consola web.

Siga estos pasos a continuación para deshabilitar el servicio systemd-resolved :

  1. Deshabilite el servicio systemd-resolved y deténgalo:sudo systemctl deshabilitar systemd-resolved sudo systemctl stop systemd-resolved
  2. Configure /etc/resolv.conf como se muestra a continuación:sudo rm /etc/resolv.conf sudo echo «servidor de nombres 127.0.0.1» > /etc/resolv.conf
  3. Si está utilizando Ubuntu Desktop, edite su archivo /etc/NetworkManager/NetworkManager.conf usando nano:sudo nano /etc/NetworkManager/NetworkManager.conf Coloque la siguiente línea en la sección [main] de su /etc/NetworkManager/NetworkManager.conf como se muestra a continuación:[principal] dns=predeterminado Reiniciar el administrador de red:sudo service network-manager restart
  4. Ahora reinicie el servidor DNS y verifique los registros nuevamente desde la consola web.sudo systemctl restart dns.service

Paquete de UCI faltante

La actualización v13.4 del servidor DNS exige que el sistema operativo tenga instalado el paquete ICU. No habrá problemas con la mayoría de los sistemas, ya que incluyen el paquete ICU por defecto, pero algunas distribuciones de Linux ligeras, como DietPi, podrían tener problemas al no incluirlo para ahorrar espacio. En estos sistemas, el servidor DNS no podrá iniciarse. Puede ejecutar el siguiente comando para averiguar el motivo exacto:

journalctl --unit dns --follow 

Si el problema se debió a la falta del paquete ICU, verá mensajes de error como los que se muestran a continuación:

$ journalctl --unit dns --follow
29 de enero 16:58:27 server1 dns-server[240812]: en System.Globalization.CultureData.get_Invariant()
29 de enero 16:58:27 server1 dns-server[240812]: en System.Globalization.CultureInfo..cctor()
29 de enero 16:58:27 server1 dns-server[240812]: en System.Globalization.CultureInfo.get_CachedCulturesByName()
29 de enero 16:58:27 server1 dns-server[240812]: en System.Globalization.CultureInfo.GetCultureInfo(System.String)
29 de enero 16:58:27 server1 dns-server[240812]: en System.Reflection.RuntimeAssembly.GetLocale()
29 de enero 16:58:27 server1 dns-server[240812]: en System.Reflection.RuntimeAssembly.GetName(Boolean)
29 de enero 16:58:27 server1 dns-server[240812]: en DnsServerCore.DnsWebService..ctor(System.String, System.Uri, System.Uri)
29 de enero 16:58:27 server1 dns-server[240812]: en DnsServerApp.Program.Main(System.String[])
29 de enero 16:58:27 server1 systemd[1]: dns.service: El proceso principal salió, código=eliminado, estado=6/ABRT
29 de enero 16:58:27 server1 systemd[1]: dns.service: Error con el resultado 'señal'.
29 de enero 16:58:37 server1 systemd[1]: dns.service: Trabajo de reinicio programado, el contador de reinicio está en 4.
29 de enero 16:58:37 server1 systemd[1]: dns.service detenido - Servidor DNS Technitium.
29 de enero 16:58:37 server1 systemd[1]: Se inició dns.service - Servidor DNS Technitium.
29 ene 16:58:37 server1 dns-server[240820]: Proceso finalizado. No se encontró un paquete ICU válido instalado en el sistema. Instale libicu (o icu-libs) con su gestor de paquetes y vuelva a intentarlo. También puede configurar el indicador System.Globalization.Invariant como verdadero si desea ejecutar sin compatibilidad con la globalización. Consulte https://aka.ms/dotnet-missing-libicu para obtener más información.
29 de enero 16:58:37 server1 dns-server[240820]: en System.Environment.FailFast(System.String)
29 de enero 16:58:37 server1 dns-server[240820]: en System.Globalization.GlobalizationMode+Settings..cctor()
29 de enero 16:58:37 server1 dns-server[240820]: en System.Globalization.CultureData.CreateCultureWithInvariantData()
29 de enero 16:58:37 server1 dns-server[240820]: en System.Globalization.CultureData.get_Invariant()
29 de enero 16:58:37 server1 dns-server[240820]: en System.Globalization.CultureInfo..cctor()
29 de enero 16:58:37 server1 dns-server[240820]: en System.Globalization.CultureInfo.get_CachedCulturesByName()
29 de enero 16:58:37 server1 dns-server[240820]: en System.Globalization.CultureInfo.GetCultureInfo(System.String)
29 de enero 16:58:37 server1 dns-server[240820]: en System.Reflection.RuntimeAssembly.GetLocale()
29 de enero 16:58:37 server1 dns-server[240820]: en System.Reflection.RuntimeAssembly.GetName(Boolean)
29 de enero 16:58:37 server1 dns-server[240820]: en DnsServerCore.DnsWebService..ctor(System.String, System.Uri, System.Uri)
29 de enero 16:58:37 server1 dns-server[240820]: en DnsServerApp.Program.Main(System.String[])
29 de enero 16:58:37 server1 systemd[1]: dns.service: El proceso principal salió, código=eliminado, estado=6/ABRT
29 de enero 16:58:37 server1 systemd[1]: dns.service: Error con el resultado 'señal'.

Puedes solucionar este problema instalando el paquete libicu que falta en tu distribución. Ejecuta el siguiente comando para encontrar el nombre exacto del paquete, como se muestra a continuación:

$ apt search libicu
Ordenando... Listo
Búsqueda de texto completo... Listo
icu-devtools/stable 72.1-3 arm64
  Utilidades de desarrollo para componentes internacionales para Unicode

libicu-dev/estable 72.1-3 arm64
  Archivos de desarrollo para componentes internacionales para Unicode

libicu4j-4.4-java/stable,stable 4.4.2.2-4 todos
  Biblioteca para compatibilidad e internacionalización de Unicode

libicu4j-java/stable,stable 72.1-1 todos
  Biblioteca para compatibilidad e internacionalización de Unicode

libicu72/stable, ahora 72.1-3 arm64 [instalado, automático]
  Componentes internacionales para Unicode

Instale el paquete libicu faltante utilizando el nombre del paquete que se encuentra en el comando anterior como se muestra a continuación:

sudo apt install libicu72

Una vez instalado el paquete libicu, el servidor DNS comenzará a funcionar como se espera.

Construir desde el código fuente

También puede construir el servidor DNS desde la fuente e instalarlo manualmente siguiendo las Instrucciones de compilación .

¡Eso es todo!

El servidor DNS se está ejecutando y usted puede configurar su red con la dirección IP de esta computadora para la resolución DNS.

Consulte la consola web para crear zonas, verificar zonas almacenadas en caché, acceder a la herramienta de cliente DNS y configurar los ajustes del servidor.

El servidor DNS crea una carpeta llamada «config» en la carpeta actual, que contiene los archivos de configuración y de zona del servidor. Asegúrese de copiar esta carpeta al mover la carpeta del servidor DNS si desea que todos los archivos de zona y de configuración se conserven.