![]()
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:
- 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
- Ahora puedes ejecutar el servidor DNS directamente desde la consola como una aplicación independiente.cd /opt/technitium/dns sudo ./start.sh
- 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
- 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:
- 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
- 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
- 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 :
- 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.
- Reinicie la computadora para aplicar los cambios como se muestra a continuación:sudo reboot ahora
- 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 :
- Deshabilite el servicio systemd-resolved y deténgalo:sudo systemctl deshabilitar systemd-resolved sudo systemctl stop systemd-resolved
- 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
- 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
- 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.

