Як виправити помилки встановлення Tailscale в Ubuntu
Помилка apt під час встановлення Tailscale зазвичай вказує на неправильний codename Ubuntu або keyring. Перевірте точний статус і виправте репозиторій.
Чому помилки встановлення Tailscale в Ubuntu є помилками apt
Помилки встановлення Tailscale в Ubuntu майже завжди виникають до запуску будь-якого коду Tailscale. Це помилки apt. Ubuntu не постачає власного пакета tailscale: станом на перевірку архіву пакетів Ubuntu у серпні 2026 року є лише бібліотеки-помічники Go та python3-tailscale, тому daemon має надходити з власного apt-репозиторію Tailscale за адресою pkgs.tailscale.com.
Додавання цього репозиторію записує два файли. Один файл указує apt, де розташовані пакети. Інший містить публічний ключ, який 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 tailscalenoble — це кодова назва Ubuntu 24.04. Вона міститься в обох URL. Друга команда записує в /etc/apt/sources.list.d/tailscale.list рядок-коментар і один рядок deb, а 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.У цьому виводі є два параметри, які визначають подальші дії: код стану та повна 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означає, що на запит хтось відповів і відмовив. Станом на August 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 із новим кодовим ім’ям. Вони перезапишуть обидва файли.
Третій спосіб — часова затримка. У перші тижні після випуску нової версії Ubuntu кодове ім’я вже існує в Canonical, але ще не з’явилося в Tailscale. Якщо вказати в цьому файлі кодове ім’я попередньої LTS-версії, пакети зазвичай установлюються, оскільки мають мало залежностей. Проте ви використовуватимете збірку, створену для старішого випуску. Перевірте, що саме встановлено, за допомогою apt policy tailscale, а після появи справжнього кодового імені поверніть його у файл.
База ключів порожня, а команда, яка її записала, нічого не вивела
Ця проблема неочевидна, і саме на цьому етапі найчастіше припиняється діагностика. Ще раз перегляньте команду для бази ключів:
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/nullОболонка формує весь конвеєр до запуску будь-якої програми, тому sudo tee одразу відкриває шлях до бази ключів і обрізає файл до нульової довжини. Якщо curl завершується з помилкою, а -f змушує його завершуватися з помилкою для будь-якої помилки HTTP, curl нічого не записує та завершується з ненульовим кодом. Файл залишається порожнім. Код завершення конвеєра дорівнює коду завершення останньої команди — tee, яка завершилася успішно. Нічого не виводиться, і ви переходите до наступної команди, вважаючи, що ключ встановлено.
Перевіряйте файл, а не команду, яка його створила.
ls -l /usr/share/keyrings/tailscale-archive-keyring.gpg
gpg --show-keys /usr/share/keyrings/tailscale-archive-keyring.gpgСправна база ключів виводить рядок pub і рядок uid з назвою Tailscale. Файл нульового розміру виводить gpg: no valid OpenPGP data found. і більше нічого. Файл, у який потрапила HTML-сторінка з помилкою, дає такий самий результат, а head -c 80 показує її початок замість двійкових даних ключа.
Якщо база ключів не містить придатного ключа, 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: індекс успішно завантажено, але його підпис неможливо перевірити. Це проблема з ключем, а не з мережею. Якщо файл бази ключів відсутній повністю, повідомлення буде іншим: у ньому шлях безпосередньо вказано за допомогою Could not open file /usr/share/keyrings/tailscale-archive-keyring.gpg.
Записуйте ключ у два кроки, щоб невдале завантаження не знищило справну базу ключів.
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 для завантаження та перевірки, а базу ключів, яку може читати лише root, apt використовувати не може.
І /etc/apt/sources.list-файл, і /etc/apt/sources.list.d/ubuntu.sources-файл описують той самий репозиторій
Ubuntu перевела власні джерела пакетів у формат deb822 в Ubuntu 24.10, де /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, а не лише update, доки один із файлів не буде видалено. Та сама помилка виникає з власними репозиторіями 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— це кодова назва випуску, тобто саме значення, яке було в середині однорядкового формату.Signed-Byприймає абсолютний шлях до файлу keyring. Також під ним можна вбудувати ключ у броньованому форматі. Кожен рядок ключа потрібно відступити на один пробіл, а кожен порожній рядок усередині ключа записати як одну крапку.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, ці запити відрізняються за параметром, важливим для проміжного мережевого пристрою. Найчастіше це 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. Іншим поширеним джерелом проблеми є хмарний firewall для вихідного трафіку, який дозволяє лише дзеркала Ubuntu. У такому разі на 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 від провайдера або проксі з 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-архіви в розділі static binaries на pkgs.tailscale.com/stable. Станом на August 2026 стабільною є версія 1.102.2, а файл для 64-bit x86 має назву tailscale_1.102.2_amd64.tgz. Клієнт tailscale і daemon tailscaled потрібно розмістити самостійно. Daemon також потрібно запускати та контролювати самостійно, тому шляху apt upgrade не буде, а кожне майбутнє оновлення потрібно буде завантажувати вручну. Це доречно для ізольованого від мережі хоста або коли потрібно зафіксувати одну точну версію.
Власний пакет Ubuntu. Його немає. Виконання sudo apt install tailscale без налаштованого репозиторію постачальника завершується повідомленням E: Unable to locate package tailscale, і жодне виконання apt update цього не змінить. Якщо насправді вам потрібен сервер координації під вашим контролем, а не hosted-сервер Tailscale, це окреме рішення: у матеріалі про запуск Headscale як власного control server описано відповідний варіант, а в матеріалі про порівняння Tailscale та звичайного WireGuard пояснено, чи потрібна вам уся ця інфраструктура.
Пакет установлено, але tailscaled не запускається
Після успішного виконання apt проблеми переміщуються до демона.
systemctl status tailscaled
sudo journalctl -u tailscaled -n 50На VPS із контейнерною віртуалізацією, яка використовує спільне ядро хоста, наприклад LXC або OpenVZ, у журналі з’являється повідомлення про відсутність /dev/net/tun. Демону потрібен пристрій TUN, щоб створити інтерфейс tailscale0, але контейнер його не отримав. Попросіть провайдера увімкнути 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: для Ubuntu 24.04 це noble, а для Ubuntu 26.04 — resolute. Не використовуйте 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. Станом на August 2026 вони мають версію 1.102.2, а файл для amd64 називається tailscale_1.102.2_amd64.tgz. Програми tailscale і tailscaled потрібно встановити вручну, а daemon самостійно запускати через systemd. Недолік — оновлення: пакета apt для завантаження нової версії немає, тому кожне оновлення виконується вручну. В архіві Ubuntu немає власного пакета tailscale, тому sudo apt install tailscale на машині без репозиторію постачальника зупиняється на E: Unable to locate package tailscale.