Cómo corregir errores al instalar Tailscale en Ubuntu
Aprende a leer el código de error de apt y corrige el nombre en clave de Ubuntu o el keyring de firma para instalar Tailscale sin errores.
Por qué los errores de instalación de Tailscale en Ubuntu son errores de apt
Los errores de instalación de Tailscale en Ubuntu casi siempre aparecen antes de que se ejecute cualquier código de Tailscale. Son errores de apt. Ubuntu no incluye un paquete tailscale propio: al comprobar el archivo de paquetes de Ubuntu en agosto de 2026, las únicas coincidencias son bibliotecas auxiliares de Go y python3-tailscale, por lo que el daemon debe proceder del repositorio apt propio de Tailscale en pkgs.tailscale.com.
La incorporación de ese repositorio escribe dos archivos. Un archivo indica a apt dónde están los paquetes. El otro contiene la clave pública que apt usa para comprobar la firma del índice del repositorio. Casi todos los fallos siguientes se deben a que uno de esos dos archivos es incorrecto o a que un dispositivo entre apt y el repositorio rechaza la solicitud.
Estos son los comandos que Tailscale publica para Ubuntu 24.04:
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
sudo apt-get update && sudo apt-get install tailscalenoble es el nombre en clave de Ubuntu 24.04 y aparece en las dos URL. El segundo comando escribe una línea de comentario y una línea deb en /etc/apt/sources.list.d/tailscale.list, y cat muestra exactamente el contenido escrito allí.
cat /etc/apt/sources.list.d/tailscale.listInterprete esa línea deb como una dirección formada por cuatro campos: la opción entre corchetes [signed-by=/usr/share/keyrings/tailscale-archive-keyring.gpg], después la base del repositorio, que es pkgs.tailscale.com/stable/ubuntu y se alcanza mediante https, luego la suite noble y, por último, el componente main. apt combina la base y la suite en una sola URL y la descarga: https://pkgs.tailscale.com/stable/ubuntu/dists/noble/InRelease. Si puede descargar esa URL manualmente, apt también puede hacerlo. Ese es todo el diagnóstico.
Lee el error de apt antes de cambiar nada
Ejecuta la actualización por separado para que ninguna otra salida desplace el error.
sudo apt updateUn repositorio de terceros con errores tiene este aspecto. El nombre en clave y la dirección IP serán diferentes en tu equipo.
E: Failed to fetch https://pkgs.tailscale.com/stable/ubuntu/dists/wilma/InRelease 404 Not Found [IP: 203.0.113.9 443]
E: Some index files failed to download. They have been ignored, or old ones used instead.Dos elementos de esa salida determinan qué debes hacer después: el código de estado y la URL completa de la línea E: Failed to fetch. No deduzcas la causa a partir de la línea de resumen inferior. Copia la URL y consulta el servidor directamente.
curl -sS -o /dev/null -w '%{http_code}\n' https://pkgs.tailscale.com/stable/ubuntu/dists/noble/InReleaseEso muestra 200 para un nombre en clave que Tailscale publica. En agosto de 2026, noble devuelve un índice firmado que contiene Origin: Tailscale y Codename: noble. Sustituye noble por el nombre en clave de tu propio error y vuelve a ejecutarlo. Si curl obtiene 200 donde apt obtuvo un error, el repositorio funciona y el problema está en la configuración de apt.
Qué indica el código de estado
404 Not Foundsignifica que el repositorio no tiene ningún archivo en esa ruta. Enpkgs.tailscale.com, casi siempre se trata del nombre en clave incluido en la URL.403 Forbiddensignifica que algo respondió y rechazó la solicitud. En agosto de 2026, este repositorio devuelve 404 para una ruta que no existe. Por tanto, un 403 apunta a un proxy, un dispositivo de filtrado o un firewall entre el servidor y Tailscale.401 Unauthorizedo407 Proxy Authentication Requiredsignifica que un proxy solicita credenciales que apt no está enviando.- Un error de conexión o de resolución de nombres significa que no se produjo ninguna comunicación HTTP. Vaya a la sección sobre IPv6.
El nombre en la URL no es uno de los que publica Tailscale
Tailscale crea un directorio independiente para cada nombre de versión de Ubuntu. Si solicita un nombre que no existe, obtiene un error 404 porque el servidor no tiene ningún dists/<codename> que pueda servir. El listado del propio proveedor en pkgs.tailscale.com/stable muestra cuáles existen. En agosto de 2026, la lista va de 16.04 a resolute, que corresponde a Ubuntu 26.04.
La forma habitual de introducir un nombre incorrecto es ejecutar lsb_release -cs en una distribución basada en Ubuntu, pero que no es Ubuntu. En Linux Mint 22, ese comando muestra wilma, el nombre de versión propio de Mint, y Tailscale no publica paquetes para él. Consulte la base de Ubuntu.
. /etc/os-release
echo "$VERSION_CODENAME $UBUNTU_CODENAME"En Ubuntu, ambos valores son iguales. En una derivada, VERSION_CODENAME es el nombre de la distribución derivada y UBUNTU_CODENAME es la versión de Ubuntu sobre la que está construida. Use UBUNTU_CODENAME en ambas URL.
La segunda forma es actualizar la versión de la distribución. La herramienta de actualización de Ubuntu deshabilita los repositorios de terceros mientras se ejecuta. Por eso, después de actualizar Ubuntu 24.04 a 26.04, encontrará /etc/apt/sources.list.d/tailscale.list comentado o todavía configurado con noble en un equipo que ahora usa resolute. Corríjalo volviendo a ejecutar los dos comandos curl con el nuevo nombre de versión. Estos comandos sobrescriben ambos archivos. Si la actualización se interrumpió, de modo que dpkg informa de paquetes parcialmente configurados y no sólo de este repositorio, recupere la actualización de versión fallida primero. Ninguna corrección de tailscale.list se mantendrá en un sistema en el que apt no puede terminar la configuración.
La tercera forma es el momento de la publicación. Durante las semanas posteriores al lanzamiento de una nueva versión de Ubuntu, el nombre de versión existe en Canonical antes de existir en Tailscale. Apuntar el archivo al nombre de versión de la LTS anterior normalmente permite instalar los paquetes porque tienen pocas dependencias, pero en ese caso ejecutará una compilación preparada para una versión anterior. Compruebe qué obtuvo realmente con apt policy tailscale y vuelva a cambiar el archivo cuando aparezca el nombre de versión correcto.
El llavero está vacío y el comando que lo escribió no mostró nada
Este caso no muestra ningún mensaje y es donde terminan la mayoría de estos problemas. Revise de nuevo el comando del llavero:
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/nullEl shell construye toda la tubería antes de ejecutar cualquiera de los dos programas, por lo que sudo tee abre la ruta del llavero y la trunca inmediatamente a cero bytes. Si curl falla, y -f hace que falle ante cualquier error HTTP, curl no escribe nada y termina con un código distinto de cero. El archivo queda con cero bytes. El estado de salida de una tubería es el estado de su último comando, que es tee y terminó correctamente. No se muestra nada y continúa con el siguiente comando creyendo que la clave está instalada.
Compruebe el archivo, no el comando que lo creó.
ls -l /usr/share/keyrings/tailscale-archive-keyring.gpg
gpg --show-keys /usr/share/keyrings/tailscale-archive-keyring.gpgUn llavero válido muestra una línea pub y una línea uid con el nombre de Tailscale. Un archivo de cero bytes muestra gpg: no valid OpenPGP data found. y nada más. Un archivo que recibió una página de error HTML muestra lo mismo; al ejecutar head -c 80 sobre él verá el inicio de una página web en lugar de datos binarios de una clave.
Si el llavero no contiene ninguna clave utilizable, sudo apt update descarga el índice y después lo rechaza. Verá una línea W: GPG error con el nombre del repositorio de Tailscale y su suite, el texto The following signatures couldn't be verified because the public key is not available: NO_PUBKEY seguido de un identificador de clave de 16 caracteres y, debajo, un error que indica que el repositorio no está firmado. Observe lo que informa apt: descargó correctamente el índice, pero no pudo comprobar la firma. Es un problema de clave, no de red. Si falta por completo el archivo del llavero, el mensaje vuelve a ser diferente e indica directamente la ruta con Could not open file /usr/share/keyrings/tailscale-archive-keyring.gpg.
Escriba la clave en dos pasos para que una descarga fallida no pueda destruir un llavero válido.
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg -o /tmp/tailscale.gpg
gpg --show-keys /tmp/tailscale.gpg
sudo install -m 0644 -o root -g root /tmp/tailscale.gpg /usr/share/keyrings/tailscale-archive-keyring.gpgLa línea intermedia es el control: si no muestra un uid de Tailscale, deténgase y no copie el archivo. El modo 0644 es importante porque apt cambia al usuario sin privilegios _apt para descargar y verificar; por tanto, un llavero que sólo root puede leer es un llavero que apt no puede utilizar.
Tanto un archivo .list como uno .sources describen el mismo repositorio
Ubuntu trasladó sus propios orígenes al formato deb822 en Ubuntu 24.10, cuando /etc/apt/sources.list se convirtió en /etc/apt/sources.list.d/ubuntu.sources. Tailscale todavía publica el formato de una sola línea. Comprobado en agosto de 2026, no existe ningún archivo .sources que descargar desde pkgs.tailscale.com: esa URL devuelve 404. Por tanto, si su equipo tiene un archivo tailscale.sources, usted o una guía lo creó manualmente. Si tailscale.list también sigue presente, apt ahora tiene el mismo repositorio descrito dos veces.
La versión leve muestra una advertencia en cada actualización:
W: Target Packages (main/binary-amd64/Packages) is configured multiple times in /etc/apt/sources.list.d/tailscale.list:1 and /etc/apt/sources.list.d/tailscale.sources:1La versión grave aparece cuando los dos archivos especifican rutas de keyring diferentes, porque apt no puede decidir qué clave controla el repositorio. Muestra E: Conflicting values set for option Signed-By regarding source, seguido del repositorio y su suite, después las dos rutas de keyring separadas por != y, finalmente, se niega a continuar:
E: The list of sources could not be read.Esto bloquea todos los comandos de apt, no sólo la actualización, hasta que se elimine uno de los archivos. El mismo fallo aparece con los repositorios propios de Ubuntu. El error de origen de apt duplicado tras una migración a deb822 explica el caso general.
Busque todos los archivos que mencionen Tailscale antes de eliminar nada.
grep -RIn tailscale /etc/apt/sources.list /etc/apt/sources.list.d/Conserve un solo archivo. Para desactivar el otro sin perderlo, cambie su nombre: apt sólo lee los archivos que terminan en .list o .sources. Por tanto, tailscale.list.bak se omite y permanece en el disco como referencia.
Escribir correctamente el archivo de fuentes deb822
Si prefiere el formato más reciente, convierta el archivo existente en lugar de volver a escribir la dirección del repositorio, porque un error tipográfico ahí es precisamente como empiezan los errores anteriores. Las versiones recientes de apt incluyen un conversor que reescribe los archivos .list en bloques deb822 y traslada la opción signed-by como Signed-By.
apt modernize-sources --help
sudo apt modernize-sourcesUbuntu 24.04 incluye una versión de apt anterior a ese subcomando, por lo que la línea de ayuda le indica en un momento si la suya lo admite. Si no lo admite, genere el bloque a partir de la línea que ya está guardada en el disco, para que la base salga del archivo del proveedor y no del teclado.
. /etc/os-release
{
echo 'Types: deb'
echo "URIs: $(awk '/^deb /{print $3}' /etc/apt/sources.list.d/tailscale.list)"
echo "Suites: $UBUNTU_CODENAME"
echo 'Components: main'
echo 'Signed-By: /usr/share/keyrings/tailscale-archive-keyring.gpg'
} | sudo tee /etc/apt/sources.list.d/tailscale.sources
sudo rm /etc/apt/sources.list.d/tailscale.listEso muestra el bloque que ha escrito, para que pueda revisar los campos antes del siguiente apt update. Conviene conocer cuatro de ellos en detalle, porque cada uno falla de una forma distinta:
URIsse detiene en la base del repositorio. Si pega en él la partedists/noble, obtiene un 404, porque apt añadedists/<suite>por su cuenta y solicitadists/noble/dists/noble.Suiteses el nombre en clave, exactamente el valor que aparecía en el centro del formato de una sola línea.Signed-Byacepta una ruta absoluta a un archivo de llaves. También acepta una llave con formato ASCII incluida debajo, con una sangría de un espacio en cada línea de la llave y cada línea vacía dentro de la llave escrita como un punto único.Enabled: nodesactiva una fuente sin eliminarla. Es más fácil de revertir que cambiarle el nombre y más fácil de explicar a la siguiente persona.
Mantenga un bloque por archivo para los repositorios de terceros y deje una línea vacía entre bloques si alguna vez mantiene varios juntos. El índice del repositorio incluye amd64 y arm64 entre sus arquitecturas, por lo que una VPS ARM no necesita ningún campo Architectures adicional.
Un proxy intermedio devuelve 403
Como una ruta que este repositorio no tiene responde con 404, un 403 indica que otra cosa respondió en su nombre. Empiece por la configuración propia de apt, porque un proxy definido allí se aplica a apt, pero no a su curl interactivo.
grep -RIn -i proxy /etc/apt/apt.conf.d/ /etc/apt/apt.conf
sudo apt-config dump | grep -i 'acquire::http'A continuación, supervise lo que apt envía realmente.
sudo apt -o Debug::Acquire::http=1 updateEsto muestra la línea de solicitud, las cabeceras que envió apt y el proxy mediante el que se conectó, si existe. Compárelo con un curl directo a la misma URL. Si curl devuelve 200 y apt devuelve 403, las dos solicitudes difieren en algún aspecto que el dispositivo intermedio tiene en cuenta. El candidato habitual es el agente de usuario:
curl -sS -o /dev/null -w '%{http_code}\n' -A 'Debian APT-HTTP/1.3' https://pkgs.tailscale.com/stable/ubuntu/dists/noble/InReleaseSi esa solicitud devuelve 403 mientras que el curl predeterminado devuelve 200, un dispositivo de filtrado está rechazando apt por su nombre. La corrección debe hacerse en ese dispositivo, no en su servidor. Un proxy corporativo que inspecciona TLS se comporta de otra forma: apt informa de un error de verificación del certificado en lugar de un código de estado, porque el certificado recibido fue emitido por el proxy y no por la autoridad certificadora de Tailscale. Un firewall de salida en la nube que sólo permite los mirrors de Ubuntu es otra fuente habitual. En ese caso, la corrección consiste en permitir pkgs.tailscale.com en el firewall.
Salida únicamente por IPv6 y errores que no son códigos de estado
Si apt nunca recibió una respuesta HTTP, pruebe cada protocolo por separado.
curl -4 -sS -o /dev/null -w 'v4 %{http_code}\n' https://pkgs.tailscale.com/stable/ubuntu/dists/noble/InRelease
curl -6 -sS -o /dev/null -w 'v6 %{http_code}\n' https://pkgs.tailscale.com/stable/ubuntu/dists/noble/InReleaseCuando IPv4 responde y IPv6 se queda bloqueado o informa Network is unreachable, apt falla porque la biblioteca del resolvedor da preferencia a IPv6 y el equipo no tiene una ruta IPv6 operativa. Fuerce una ejecución sobre IPv4 para confirmar la hipótesis:
sudo apt -o Acquire::ForceIPv4=true updateSi esa actualización se completa correctamente, haga el cambio permanente.
echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4Considere también el caso contrario. En un VPS que no tiene ninguna dirección IPv4, forzar IPv4 no soluciona nada porque no existe una ruta IPv4 por la que se pueda encaminar el tráfico. En ese caso necesita NAT64 con DNS64 de su proveedor, o un proxy que tenga una dirección IPv4. El síntoma es un error de conexión que muestra una dirección IPv6, por lo que la línea curl -6 es la que indica la causa real.
Las alternativas y el coste de cada una
El script de instalación del proveedor. curl -fsSL https://tailscale.com/install.sh | sh es el comando que anuncia Tailscale. Al leer el script, se observa que detecta la distribución desde /etc/os-release y después escribe las mismas dos rutas que corrige esta guía, /usr/share/keyrings/tailscale-archive-keyring.gpg y /etc/apt/sources.list.d/tailscale.list, usando las mismas URL. Esto es importante para ajustar las expectativas: no evita un repositorio que un proxy esté bloqueando. Falla de la misma forma, pero muestra menos información. Enviar un script descargado a un shell como root es una transacción, no una solución, porque implica confiar en lo que devuelva el servidor en ese momento y no conservar ninguna copia de lo que se ejecutó. Si acepta esa transacción, hágalo con toda la información:
curl -fsSL https://tailscale.com/install.sh -o install.sh
less install.sh
sh install.shLos binarios estáticos. El mismo servidor publica archivos tar sin formato en la sección de binarios estáticos de pkgs.tailscale.com/stable. En agosto de 2026, la versión estable es 1.102.2 y el archivo para x86 de 64 bits es tailscale_1.102.2_amd64.tgz. Debe colocar manualmente el cliente tailscale y el daemon tailscaled, y supervisar el daemon por su cuenta. Por tanto, no existe una ruta apt upgrade y deberá recordar descargar cada actualización futura. Esta opción resulta adecuada en un host aislado de la red o cuando debe fijar una versión exacta.
El paquete propio de Ubuntu. No existe. Ejecutar sudo apt install tailscale sin configurar el repositorio del proveedor termina en E: Unable to locate package tailscale, y ningún valor de apt update cambia ese resultado. Si lo que realmente quiere es un servidor de coordinación bajo su control en lugar del servicio alojado de Tailscale, se trata de una decisión independiente: ejecutar Headscale como su propio servidor de control lo explica, y la comparación entre Tailscale y WireGuard sin componentes adicionales explica si necesita toda esta infraestructura.
El paquete se instaló, pero tailscaled no se inicia
Una vez que apt funciona correctamente, los fallos pasan al daemon.
systemctl status tailscaled
sudo journalctl -u tailscaled -n 50En un VPS que usa virtualización mediante contenedores y comparte el kernel del host, como LXC u OpenVZ, el registro contiene una línea que indica que /dev/net/tun no existe. El daemon necesita un dispositivo TUN para crear la interfaz tailscale0, pero el contenedor no recibió ninguno. Pida a su proveedor que habilite TUN en el contenedor o cambie a un plan KVM, donde tendrá su propio kernel. En KVM funciona sin configuración adicional.
Después, sudo tailscale up muestra una URL de inicio de sesión y tailscale status debería mostrar su máquina con una dirección del rango 100.64.0.0/10. Una máquina que aparece ahí está lista para usarla como base, ya sea anunciando una subred privada desde su VPS o usando el VPS como nodo de salida.
FAQ
¿Por qué apt indica que el repositorio de Tailscale no está firmado?
Porque apt descargó el índice del repositorio y no pudo verificar su firma con /usr/share/keyrings/tailscale-archive-keyring.gpg. La causa habitual es que el keyring tiene cero bytes: sudo tee truncó el archivo antes de que curl fallara al no descargar nada, y la canalización indicó que la operación había terminado correctamente porque tee tuvo éxito. Ejecute gpg --show-keys /usr/share/keyrings/tailscale-archive-keyring.gpg. Un keyring válido muestra una línea pub y una línea uid con el nombre de Tailscale, mientras que uno vacío o dañado muestra gpg: no valid OpenPGP data found.. Descargue la clave en un archivo temporal, compruébela allí y cópiela después a su ubicación con el modo 0644 para que el usuario _apt pueda leerla.
¿Qué nombre de versión de Ubuntu debo poner en las URL de Tailscale?
Use el valor de UBUNTU_CODENAME obtenido de /etc/os-release, que es noble en Ubuntu 24.04 y resolute en Ubuntu 26.04. No use lsb_release -cs en una distribución derivada de Ubuntu: en Linux Mint 22 muestra wilma, Tailscale no publica nada con ese nombre y apt informa de un error 404 en dists/wilma/InRelease. Confirme la elección antes de editar nada. Para ello, descargue manualmente el índice con curl -sS -o /dev/null -w '%{http_code}\n' contra https://pkgs.tailscale.com/stable/ubuntu/dists/<codename>/InRelease.
¿Es seguro ejecutar el script de instalación de Tailscale canalizado a un shell?
Debe decidirlo de forma deliberada. El script procede de Tailscale y realiza los mismos pasos manuales: lee /etc/os-release, escribe el mismo keyring y el mismo /etc/apt/sources.list.d/tailscale.list y después instala el paquete. El coste es que ejecuta con root lo que el servidor devuelva en ese momento y no conserva un registro. Descárguelo con -o install.sh, léalo y ejecútelo después si quiere la comodidad sin perder visibilidad. Tampoco puede resolver un repositorio bloqueado, porque usa las mismas URL que ya fallaron.
¿Cómo instalo Tailscale en Ubuntu sin el repositorio de apt?
Use los archivos tar estáticos publicados en pkgs.tailscale.com, que en agosto de 2026 están en la versión 1.102.2 y contienen un archivo amd64 llamado tailscale_1.102.2_amd64.tgz. Debe instalar por su cuenta los programas tailscale y tailscaled y ejecutar también por su cuenta el daemon mediante systemd. El coste son las actualizaciones: no hay ningún paquete de apt que descargue una versión nueva, por lo que cada actualización es manual. El archivo de Ubuntu no contiene ningún paquete tailscale propio, así que sudo apt install tailscale en una máquina sin el repositorio del proveedor se detiene en E: Unable to locate package tailscale.