SSD Nodes Learn Hosting plans →
Посібники Matt ConnorВід Matt Connor

Як виправити помилки встановлення Tailscale в Ubuntu

Дізнайтеся, як читати код помилки apt в Ubuntu та виправляти неправильний codename релізу або signing keyring під час встановлення Tailscale.

Чому помилки встановлення Tailscale в Ubuntu є помилками apt

Помилки встановлення Tailscale в Ubuntu майже завжди виникають до запуску будь-якого коду Tailscale. Це помилки apt. Ubuntu не постачає власного пакета tailscale: станом на перевірку архіву пакетів Ubuntu у жовтні 2026 року єдиними збігами були допоміжні бібліотеки Go та python3-tailscale, тому daemon потрібно отримувати з власного apt-репозиторію Tailscale за адресою pkgs.tailscale.com.

Додавання цього репозиторію записує два файли. Один файл повідомляє apt, де розташовані пакети. Інший містить public key, за допомогою якого apt перевіряє підпис індексу репозиторію. Майже кожна описана нижче помилка означає, що один із цих двох файлів має неправильний вміст або пристрій між apt і репозиторієм відхиляє запит.

Ось команди, які Tailscale публікує для 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 tailscale

noble — це codename для Ubuntu 24.04, і він міститься в обох URL. Друга команда записує рядок коментаря та один рядок deb у /etc/apt/sources.list.d/tailscale.list, а cat показує точний вміст записаного файлу.

cat /etc/apt/sources.list.d/tailscale.list

Читайте цей рядок deb як адресу з чотирьох полів: параметр у квадратних дужках [signed-by=/usr/share/keyrings/tailscale-archive-keyring.gpg], потім базова адреса репозиторію pkgs.tailscale.com/stable/ubuntu, доступна через https, далі suite noble і компонент main. apt об’єднує базову адресу та suite в один URL і завантажує його: https://pkgs.tailscale.com/stable/ubuntu/dists/noble/InRelease. Якщо ви можете вручну отримати цей URL, apt також зможе його отримати. У цьому полягає вся діагностика.

Прочитайте помилку apt, перш ніж щось змінювати

Запустіть оновлення окремо, щоб інший вивід не прокрутив помилку.

sudo apt update

Несправний сторонній репозиторій має такий вигляд. Кодове ім’я та IP-адреса на вашій машині будуть іншими.

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.

Подальші дії визначають 2 параметри у цьому виводі: код стану та повна URL-адреса в рядку E: Failed to fetch. Не робіть висновків за підсумковим рядком унизу. Скопіюйте URL-адресу та самостійно виконайте запит до сервера.

curl -sS -o /dev/null -w '%{http_code}\n' https://pkgs.tailscale.com/stable/ubuntu/dists/noble/InRelease

Команда виведе 200 для кодового імені, для якого Tailscale публікує репозиторій. Станом на жовтень 2026 року noble повертає підписаний індекс із Origin: Tailscale і Codename: noble. Замініть noble на кодове ім’я з власної помилки та повторіть команду. Якщо curl отримує 200, тоді як apt отримав помилку, репозиторій працює, а проблема полягає у власній конфігурації apt.

Що повідомляє код стану

  • 404 Not Found означає, що в репозиторії немає файлу за цим шляхом. У pkgs.tailscale.com це майже завжди codename в URL.
  • 403 Forbidden означає, що сервер відповів і відмовив у доступі. Станом на October 2026 цей репозиторій повертає 404 для шляху, якого не існує, тому 403 вказує на proxy, filtering appliance або firewall між вашим сервером і Tailscale.
  • 401 Unauthorized або 407 Proxy Authentication Required означає, що proxy запитує облікові дані, які apt не передає.
  • Помилка підключення або помилка розв’язання імен означає, що HTTP-обміну взагалі не відбулося. Перейдіть до розділу про IPv6.

Кодове ім’я в URL не публікується Tailscale

Tailscale створює окремий каталог для кожного кодового імені Ubuntu. Якщо вказати кодове ім’я, якого немає в списку, сервер поверне 404, оскільки на сервері немає dists/<codename>, який можна було б віддати. Власний список постачальника на pkgs.tailscale.com/stable показує доступні значення. У жовтні 2026 року список охоплює версії від 16.04 до resolute, тобто Ubuntu 26.04.

Зазвичай неправильне кодове ім’я з’являється через lsb_release -cs у дистрибутиві, створеному на основі Ubuntu, але не ідентичному Ubuntu. У Linux Mint 22 ця команда виводить wilma — власне кодове ім’я Mint, для якого Tailscale нічого не публікує. Натомість потрібно визначити базову версію Ubuntu.

. /etc/os-release
echo "$VERSION_CODENAME $UBUNTU_CODENAME"

В Ubuntu обидва значення однакові. У похідному дистрибутиві VERSION_CODENAME — це назва похідного дистрибутива, а UBUNTU_CODENAME — версія Ubuntu, на якій його створено. Використовуйте UBUNTU_CODENAME в обох URL.

Другий варіант — оновлення дистрибутива. Засіб оновлення Ubuntu під час роботи вимикає сторонні джерела. Тому після оновлення Ubuntu 24.04 до 26.04 ви побачите, що /etc/apt/sources.list.d/tailscale.list або закоментовано, або все ще містить noble на машині, де вже встановлено resolute. Виправте це, повторно виконавши дві команди curl з новим кодовим ім’ям. Вони перезапишуть обидва файли. Якщо саме оновлення зупинилося на півдорозі, і dpkg повідомляє про частково налаштовані пакети, а не лише про цю репозиторію, спочатку відновіть невдале оновлення дистрибутива. Виправлення tailscale.list не буде надійним у системі, де apt не може завершити налаштування.

Третій варіант — невідповідний момент. Протягом кількох тижнів після виходу нової версії Ubuntu кодове ім’я вже існує в Canonical, але ще не з’явилося в Tailscale. Якщо вказати у файлі кодове ім’я попередньої LTS-версії, інсталяція зазвичай виконується, оскільки ці пакети мають мало залежностей. Однак у такому разі ви запускаєте збірку, створену для старішого випуску. Перевірте фактично встановлену версію за допомогою apt policy tailscale і поверніть у файл потрібне кодове ім’я, щойно воно з’явиться.

Keyring порожній, а команда, яка його записувала, нічого не вивела

Ця проблема не супроводжується повідомленнями, і саме так завершується більшість таких випадків. Ще раз перегляньте команду для keyring:

curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null

Shell формує весь pipeline до запуску будь-якої програми, тому sudo tee одразу відкриває шлях до keyring і обрізає файл до нульової довжини. Якщо curl завершується помилкою, а -f змушує його завершуватися з помилкою за будь-якої помилки HTTP, curl нічого не записує та завершується з ненульовим кодом. Файл залишається порожнім. Код завершення pipeline — це код завершення останньої команди, тобто tee, яка завершилася успішно. Нічого не виводиться, і ви переходите до наступної команди, вважаючи, що ключ встановлено.

Перевіряйте файл, а не команду, яка його створила.

ls -l /usr/share/keyrings/tailscale-archive-keyring.gpg
gpg --show-keys /usr/share/keyrings/tailscale-archive-keyring.gpg

Справний keyring виводить рядок pub і рядок uid з назвою Tailscale. Файл нульової довжини виводить gpg: no valid OpenPGP data found. і більше нічого. Файл, у який потрапила HTML-сторінка з помилкою, поводиться так само, а head -c 80 показує її початок замість бінарних даних ключа.

Якщо keyring не містить придатного ключа, sudo apt update завантажує індекс, а потім відмовляється його використовувати. Ви отримуєте рядок W: GPG error із назвою репозиторію Tailscale та його suite, текст The following signatures couldn't be verified because the public key is not available: NO_PUBKEY, за яким іде 16-символьний ідентифікатор ключа, а нижче — повідомлення про те, що репозиторій не підписаний. Зверніть увагу, що саме повідомляє apt: індекс завантажено успішно, але перевірити підпис не вдалося. Це проблема з ключем, а не з мережею. Якщо файл keyring повністю відсутній, повідомлення знову буде іншим і безпосередньо міститиме шлях, указаний у Could not open file /usr/share/keyrings/tailscale-archive-keyring.gpg.

Записуйте ключ у два кроки, щоб невдале завантаження не знищило справний keyring.

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.gpg

Середній рядок є перевіркою: якщо він не виводить Tailscale uid, зупиніться й не копіюйте файл. Режим 0644 важливий, оскільки apt переходить до непривілейованого користувача _apt для завантаження та перевірки, тому keyring, який може читати лише root, непридатний для apt.

Файли .list і .sources описують той самий репозиторій

Ubuntu перевела власні джерела пакетів у формат deb822 в Ubuntu 24.04 LTS, де /etc/apt/sources.list стало /etc/apt/sources.list.d/ubuntu.sources. Tailscale досі публікує однорядковий формат. Станом на жовтень 2026 року файлу .sources для завантаження з pkgs.tailscale.com немає: це URL повертає 404. Тому якщо на вашій машині є tailscale.sources, його створили ви або інструкція вручну. Якщо tailscale.list також досі існує, apt тепер має подвійний опис того самого репозиторію.

У легшому випадку під час кожного оновлення з’являється попередження:

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:1

Серйозніша проблема виникає, коли у двох файлах указано різні шляхи до keyring, оскільки apt не може визначити, який ключ керує репозиторієм. Він виводить E: Conflicting values set for option Signed-By regarding source, потім репозиторій і його suite, далі два шляхи до keyring із != між ними, а потім припиняє роботу:

E: The list of sources could not be read.

Це блокує всі команди apt, а не лише оновлення, доки один із файлів не буде видалено. Та сама помилка виникає з власними репозиторіями Ubuntu. У статті про помилку дубльованого джерела apt після міграції на deb822 розглянуто загальний випадок.

Перш ніж щось видаляти, знайдіть кожен файл, у якому згадується Tailscale.

grep -RIn tailscale /etc/apt/sources.list /etc/apt/sources.list.d/

Залиште один файл. Щоб вимкнути інший і не втратити його, перейменуйте його: apt читає лише файли, що закінчуються на .list або .sources. Тому tailscale.list.bak буде пропущено, але залишиться на диску для довідки.

Правильне створення файлу джерела у форматі deb822

Якщо ви надаєте перевагу новішому формату, перетворіть уже наявний файл, а не вводьте адресу репозиторію повторно. Саме помилка в цій адресі зазвичай спричиняє наведені вище помилки. Нові версії apt містять конвертер, який переписує файли .list у блоки deb822 і переносить параметр signed-by у Signed-By.

apt modernize-sources --help
sudo apt modernize-sources

В Ubuntu 24.04 використовується apt, у якому ця підкоманда з’явилася пізніше. Рядок довідки одразу покаже, чи підтримується вона у вашій версії. Якщо підкоманди немає, створіть блок на основі рядка, який уже записаний на диску. Так базова адреса буде взята з файлу постачальника, а не введена вручну.

. /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.list

Команда виведе створений блок, щоб ви могли перевірити поля перед наступним apt update. Чотири поля потрібно знати детально, оскільки помилки в них мають різні причини:

  • URIs містить лише базову адресу репозиторію. Якщо вставити в нього частину dists/noble, apt поверне 404, оскільки сам додає dists/<suite> і запитує dists/noble/dists/noble.
  • Suites — це codename, тобто те саме значення, яке містилося посередині рядка в однорядковому форматі.
  • Signed-By приймає абсолютний шлях до файлу keyring. Також під ним можна вбудувати ключ у форматі ASCII armor. У такому разі кожен рядок ключа потрібно відступити на один пробіл, а кожен порожній рядок усередині ключа записати як одну крапку.
  • Enabled: no вимикає джерело, не видаляючи його. Це простіше скасувати, ніж перейменування, і простіше пояснити наступному адміністратору.

Для сторонніх репозиторіїв зберігайте один блок у кожному файлі. Якщо в одному файлі потрібно зберігати кілька блоків, розділяйте їх порожнім рядком. Індекс репозиторію містить amd64 і arm64 серед своїх архітектур, тому для ARM VPS додаткове поле Architectures не потрібне.

Посередині є проксі, який повертає 403

Оскільки цей репозиторій відповідає 404 на шлях, якого не існує, код 403 означає, що від його імені відповів інший компонент. Почніть із конфігурації самого apt, оскільки встановлений там проксі застосовується до apt, але не до інтерактивного curl.

grep -RIn -i proxy /etc/apt/apt.conf.d/ /etc/apt/apt.conf
sudo apt-config dump | grep -i 'acquire::http'

Потім перевірте, що саме надсилає apt.

sudo apt -o Debug::Acquire::http=1 update

Ця команда виводить рядок запиту, заголовки, які надіслав apt, і проксі, через який він підключився, якщо такий є. Порівняйте результат зі звичайним curl для тієї самої URL-адреси. Якщо curl повертає 200, а apt — 403, запити відрізняються в параметрі, який має значення для middlebox. Найчастіше це user agent:

curl -sS -o /dev/null -w '%{http_code}\n' -A 'Debian APT-HTTP/1.3' https://pkgs.tailscale.com/stable/ubuntu/dists/noble/InRelease

Якщо цей запит повертає 403, а curl за замовчуванням — 200, пристрій фільтрації відхиляє apt за назвою. Виправлення потрібно вносити на цьому пристрої, а не на вашому сервері. Корпоративний проксі, який перевіряє TLS, поводиться інакше: apt повідомляє про помилку перевірки сертифіката, а не про код стану, оскільки отриманий сертифікат видано проксі, а не центром сертифікації Tailscale. Іншим поширеним джерелом проблеми є хмарний egress firewall, який дозволяє лише Ubuntu mirrors. У такому разі на firewall потрібно дозволити pkgs.tailscale.com.

Лише вихідний IPv6-трафік і помилки, які не є кодами стану

Якщо apt не отримав жодної HTTP-відповіді, перевірте кожен протокол окремо.

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/InRelease

Якщо IPv4 відповідає, а IPv6 зависає або повертає Network is unreachable, apt не працює, оскільки бібліотека розпізнавання імен надає перевагу IPv6, а сервер не має робочого маршруту IPv6. Примусово виконайте один запуск через IPv4, щоб перевірити цю версію:

sudo apt -o Acquire::ForceIPv4=true update

Якщо це оновлення завершиться успішно, зробіть налаштування постійним.

echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4

Врахуйте і протилежний випадок. На VPS, який взагалі не має IPv4-адреси, примусове використання IPv4 нічого не змінить, оскільки немає маршруту IPv4, через який можна передати трафік. У такому разі потрібні NAT64 з DNS64 від вашого провайдера або proxy, що має IPv4-адресу. Ознакою є помилка підключення із зазначенням IPv6-адреси, тому саме рядок curl -6 показує фактичну причину.

Резервні варіанти та вартість кожного з них

Скрипт встановлення від розробника. curl -fsSL https://tailscale.com/install.sh | sh — це команда, яку рекламує Tailscale. Скрипт визначає ваш дистрибутив із /etc/os-release, а потім записує ті самі два шляхи, які ми виправляли в цьому посібнику, — /usr/share/keyrings/tailscale-archive-keyring.gpg і /etc/apt/sources.list.d/tailscale.list — використовуючи ті самі URL. Це важливо для правильних очікувань: скрипт не обходить репозиторій, доступ до якого блокує проксі. Він завершується з тією самою помилкою, але виводить менше інформації. Передавання завантаженого скрипту в shell від імені root — це компроміс, а не рішення, оскільки ви довіряєте всьому, що сервер повертає в цей момент, і не зберігаєте копію виконаного скрипту. Якщо ви приймаєте цей компроміс, робіть це свідомо:

curl -fsSL https://tailscale.com/install.sh -o install.sh
less install.sh
sh install.sh

Статичні бінарні файли. Той самий сервер публікує звичайні tar-архіви в розділі статичних бінарних файлів на pkgs.tailscale.com/stable. Станом на October 2026 стабільний реліз — 1.102.4, а файл для 64-bit x86 має назву tailscale_1.102.4_amd64.tgz. Ви самостійно розміщуєте клієнт tailscale і daemon tailscaled та самостійно контролюєте роботу daemon, тому шляху apt upgrade немає, а кожне майбутнє оновлення потрібно не забути завантажити. Це виправдано на ізольованому від мережі хості або коли потрібно зафіксувати одну конкретну версію.

Власний пакет Ubuntu. Такого пакета немає. Виконання sudo apt install tailscale без налаштованого репозиторію розробника завершується на E: Unable to locate package tailscale, і жодна кількість apt update цього не змінить. Якщо насправді вам потрібен керований вами coordination server, а не hosted coordination server Tailscale, це окреме рішення: у матеріалі як запустити Headscale як власний control server описано цей варіант, а в матеріалі порівняння Tailscale та звичайного WireGuard пояснено, чи потрібна вам уся ця інфраструктура.

Пакет встановлено, але tailscaled не запускається

Після успішного виконання apt проблеми переміщуються до daemon.

systemctl status tailscaled
sudo journalctl -u tailscaled -n 50

На VPS із контейнерною віртуалізацією, яка використовує ядро хоста, наприклад LXC або OpenVZ, у журналі буде рядок про відсутність /dev/net/tun. Для створення інтерфейсу tailscale0 daemon потрібен пристрій TUN, але контейнер його не отримав. Попросіть провайдера увімкнути TUN для контейнера або перейдіть на план KVM, де ви отримуєте власне ядро. У KVM це працює без додаткового налаштування.

Після цього sudo tailscale up виведе URL для входу, а tailscale status має показати вашу машину з адресою в діапазоні 100.64.0.0/10. Машина, яка відображається там, готова для подальшого використання: наприклад, можна анонсувати приватну підмережу з VPS або використовувати VPS як exit node.

FAQ

Чому apt повідомляє, що репозиторій Tailscale не підписаний?

Тому що apt завантажив індекс репозиторію та не зміг перевірити його підпис за допомогою /usr/share/keyrings/tailscale-archive-keyring.gpg. Зазвичай це означає, що keyring має нульовий розмір: sudo tee обірвав файл до того, як curl не зміг нічого завантажити, а pipeline повідомив про успіх, оскільки tee завершився успішно. Виконайте gpg --show-keys /usr/share/keyrings/tailscale-archive-keyring.gpg. Справний keyring виводить рядок pub і рядок uid з назвою Tailscale, а порожній або пошкоджений keyring виводить gpg: no valid OpenPGP data found. Завантажте ключ у тимчасовий файл, перевірте його там, а потім скопіюйте на потрібне місце з режимом 0644, щоб користувач _apt міг його читати.

Який код Ubuntu потрібно вказати в URL Tailscale?

Використовуйте значення UBUNTU_CODENAME з /etc/os-release: це noble в Ubuntu 24.04 і resolute в Ubuntu 26.04. Не використовуйте lsb_release -cs у дистрибутиві, похідному від Ubuntu: у Linux Mint 22 ця команда виводить wilma, Tailscale нічого не публікує під такою назвою, а apt повідомляє про помилку 404 для dists/wilma/InRelease. Перш ніж щось редагувати, перевірте свій вибір, вручну завантаживши індекс за допомогою curl -sS -o /dev/null -w '%{http_code}\n' для https://pkgs.tailscale.com/stable/ubuntu/dists/<codename>/InRelease.

Чи безпечно передавати скрипт встановлення Tailscale до shell через pipeline?

Це компроміс, на який слід іти свідомо. Скрипт походить від Tailscale і виконує ті самі дії, що й ручне встановлення: читає /etc/os-release, записує той самий keyring і той самий /etc/apt/sources.list.d/tailscale.list, а потім встановлює пакет. Недолік у тому, що ви запускаєте з root усе, що сервер повертає в цей момент, і не зберігаєте його копію. Завантажте скрипт за допомогою -o install.sh, прочитайте його, а потім запустіть, якщо потрібна зручність без цієї непрозорості. Скрипт також не допоможе, якщо доступ до репозиторію заблокований, оскільки використовує ті самі URL, які вже не спрацювали.

Як встановити Tailscale в Ubuntu без репозиторію apt?

Використовуйте статичні tarball, опубліковані на pkgs.tailscale.com. Станом на October 2026 вони мають версію 1.102.4, а файл для amd64 називається tailscale_1.102.4_amd64.tgz. Програми tailscale і tailscaled потрібно встановити самостійно, а daemon запускати через systemd також самостійно. Недолік — оновлення: пакета apt для автоматичного отримання нової версії немає, тому кожне оновлення виконується вручну. В архіві Ubuntu немає власного пакета tailscale, тому sudo apt install tailscale на машині без репозиторію постачальника завершується на E: Unable to locate package tailscale.