Headscale: все возможности Tailscale БЕЗ платных подписок!

BBetter Stack
AI/미래기술재택/원격 근무컴퓨터/소프트웨어

Transcript

00:00:00Это Headscale — бесплатная версия Tailscale с открытым исходным кодом, которую можно установить на любой сервер.
00:00:06Она дает вам полный контроль над вашей зашифрованной сетью на случай сбоев в интернете или резкого повышения цен в Tailscale.
00:00:13Но самое странное, что Headscale был создан сотрудником самой компании Tailscale.
00:00:18Зачем им платить кому-то за создание собственного конкурента?
00:00:22Жмите «подписаться», и давайте выясним.
00:00:25Прежде чем переходить к деталям, давайте быстро посмотрим на Headscale в действии.
00:00:30Итак, сейчас у меня есть три сервера Hetzner: один для управления Headscale и два узла здесь, которые я хочу соединить между собой.
00:00:40На данный момент эти два узла являются частью моей зашифрованной сети.
00:00:44Если я запущу эту команду, так как все работает в Docker, я смогу увидеть текущие узлы: Ubuntu Test и Ubuntu Test 2.
00:00:53А вот IP-адреса, которые я могу использовать для подключения к ним.
00:00:56Для начала давайте подключимся к этим двум узлам друг из друга.
00:00:59Сначала я скопирую этот IP-адрес.
00:01:02Теперь на Ubuntu Test 2 я зайду по SSH под пользователем root.
00:01:07Да, заходить под root не стоит, но это чисто для теста.
00:01:09И вот IP-адрес из Headscale.
00:01:11Нажимаю Enter, очищаю экран, и, как видите, я уже на Ubuntu Test 1.
00:01:17То есть я зашел на первый сервер со второго, и теперь могу выйти обратно.
00:01:24То же самое можно сделать и на Ubuntu Test 1, если прописать SSH root и вставить IP-адрес Ubuntu Test 2.
00:01:31Очищаем экран, и мы видим, что зашли на Ubuntu Test 2 с первого сервера.
00:01:36Но если я нахожусь вне сети tailnet... создам новую вкладку, это мой Mac... и попробую зайти по SSH на Ubuntu Test 2.
00:01:48Видите, соединение просто висит, потому что я нахожусь вне сети.
00:01:52Как вы только что видели, Headscale дает вам полный доступ к вашей сети.
00:01:56Вы контролируете каждую мелочь и можете добавлять сколько угодно узлов без привязки к конкретному поставщику.
00:02:03Система может работать без интернета, если подключить ее к NAS или старому Raspberry Pi.
00:02:08Но настройка здесь довольно сложная.
00:02:11Собственно, давайте я покажу вам, как это работает.
00:02:13Я создал новый сервер под названием Ubuntu Test 3 и собираюсь создать новую сеть с новым пользователем, чтобы соединить два узла.
00:02:24Это будут Ubuntu Test 3 и Ubuntu Test 1 — чисто для тестирования.
00:02:29На моем управляющем сервере Headscale уже установлен, но я пройдусь по всему процессу, как я это делал.
00:02:37Сейчас у меня запущены три Docker-контейнера.
00:02:40Один — это Headscale UI, второй — сам Headscale, и третий — Caddy.
00:02:45Если мы взглянем на файл Docker compose, то увидим, что конфигурация очень похожа на ту, что в документации Headscale.
00:02:56Хотя я кое-что изменил, например, версию Headscale и пути к моим директориям.
00:03:03Также у меня есть контейнер для Headscale UI — это один из многих веб-интерфейсов с открытым кодом для Headscale.
00:03:11Я покажу его чуть позже.
00:03:13Затем идет Caddy, который выступает в роли обратного прокси.
00:03:16Ссылку на этот конкретный файл Docker compose я оставлю в описании, если вам интересно.
00:03:21Также в этой директории у нас есть папки lib и config.
00:03:26Папка lib, как вы видите, нужна в основном для базы данных SQLite, где хранятся данные пользователей, узлов, DNS и прочее.
00:03:36Но в настройках вы можете сменить ее на Postgres, если не хотите использовать SQLite.
00:03:43В папке config лежат настройки Tailscale и список управления доступом (ACL) в формате JSON.
00:03:52Об этом мы поговорим позже, а пока глянем сюда: этот файл можно взять из документации или просто загрузить через curl, как сделал я.
00:04:01В примере конфигурации на GitHub можно увидеть всё, что доступно для изменений: от сервера до префиксов и пути к файлу политик.
00:04:11Моя конфигурация почти такая же, я только изменил URL сервера на домен Cloudflare, чтобы узлы знали, где искать друг друга.
00:04:23Еще я добавил путь к файлу политик, и на этом, собственно, всё.
00:04:28Домен обычный, в Cloudflare создана A-запись, связывающая поддомен headscale с IP-адресом моего управляющего сервера.
00:04:37Когда всё готово, в файле Caddy можно увидеть два используемых URL: один для интерфейса в папке /web, другой для прокси Headscale.
00:04:49После этого первым делом нужно создать нового пользователя. Это делается вот такой командой.
00:04:56Я создам пользователя Tom, но имя может быть любым.
00:05:00Пользователь создан, теперь командой users list мы видим, что в списке появился новый пользователь с ID 6.
00:05:08Но пока к этому пользователю не привязано ни одного узла.
00:05:11Так что давайте добавим Тому парочку узлов.
00:05:13На новом сервере Ubuntu Test 3 первым делом нужно установить клиент Tailscale. Для этого запускаем в терминале эту команду.
00:05:23Теперь у нас есть доступ к исполняемому файлу Tailscale.
00:05:27Учтите, если вы не под root, вам придется использовать sudo для запуска Tailscale.
00:05:31Но перед тем как запускать Tailscale или логиниться, нужно сделать это особым способом, чтобы всё заработало с Headscale.
00:05:38Для этого нам понадобятся ключи предварительной авторизации. Команду для них можно найти в документации Headscale.
00:05:46Прокручиваю страницу вниз и копирую команду.
00:05:49Затем на сервере управления Headscale я пишу docker exec и вставляю команду.
00:05:54Там, где указан ID пользователя, вводим ID Тома — 6.
00:05:59И перед запуском я добавлю еще одно слово headscale, так как мы заходим внутрь контейнера.
00:06:04И вот наш ключ предварительной авторизации.
00:06:07Теперь копируем эту команду и вставляем ее на сервере Ubuntu Test 3.
00:06:11Копируем наш ключ и вставляем его здесь.
00:06:15Затем нужно изменить адрес сервера логина на наш сервер Headscale, который мы настроили как headscale.pandor.css.
00:06:23Домен Pandora был занят, так что пришлось импровизировать.
00:06:26Нажимаем Enter, и теперь в нашей сети Headscale должен появиться новый узел.
00:06:31Возвращаемся на сервер управления, запускаем nodes list и видим Ubuntu Test 3, принадлежащий Тому, с его IP-адресами.
00:06:44Теперь давайте перенесем Ubuntu Test 1 к пользователю Тому.
00:06:47Но сначала я удалю старый узел Ubuntu Test с ID 1, причем сделаю это принудительно, чтобы не тратить время на подтверждения.
00:06:56Готово. Теперь создаю новый ключ авторизации для Ubuntu Test, не забыв включить SSH флагом --ssh, так как он там уже настроен.
00:07:06Также зайдем на Ubuntu Test 3 и включим SSH там, чтобы иметь возможность подключаться удаленно.
00:07:13Теперь в списке доступных узлов у меня есть Ubuntu Test 1 и Ubuntu Test 3, оба закреплены за Томом.
00:07:20Попробуем соединиться.
00:07:21Беру IP-адрес Ubuntu Test 3, иду на Ubuntu Test 1 и запускаю SSH root с этим IP.
00:07:30Принимаю ключ, и вот — я на сервере Ubuntu Test 3, подключившись с Ubuntu Test 1.
00:07:35И то же самое можно проделать в обратном направлении — со третьего сервера на первый.
00:07:41Если вы в точности повторяли мои действия, велик шанс, что у вас ничего не заработало, потому что нужно настроить правила доступа (ACL).
00:07:49Давайте я покажу свои.
00:07:51Очищу экран и зайду в директорию Headscale. В папке config у нас лежит JSON-файл с правилами ACL.
00:08:01Откроем его. Здесь простейшая конфигурация: разрешить любому источнику в моей сети доступ к любому назначению и порту.
00:08:11Также в разделе SSH разрешено любому узлу в сети подключаться к любому другому по SSH без подтверждения, но только под пользователем root.
00:08:24Конечно, в зависимости от вашей сети, вы можете захотеть ужесточить эти правила, ограничив доступ конкретными узлами или портами.
00:08:33Но для начала такой простой конфигурации вполне достаточно.
00:08:37И опять же, ссылку на этот файл я оставлю в описании.
00:08:40Вы спросите: а как же интерфейс Headscale UI? Упрощает ли он весь этот процесс?
00:08:43Я бы сказал, и да, и нет.
00:08:45Сейчас покажу.
00:08:47Вот адрес моего Headscale UI. Сейчас вы видите обоих моих пользователей, Tess и Tom, и информацию о них.
00:08:48Тут видны ключи и подключенные узлы.
00:08:57Для работы этого интерфейса сначала нужно добавить API-ключ Headscale, который можно получить специальной командой.
00:09:01Но главной проблемой для меня стал вид устройств (device view).
00:09:06Как видите, информации тут немного, и в консоли вылетает ошибка TypeScript — это явно не моя вина, ведь я не менял код.
00:09:09В этот момент приложение обычно зависает, и ничего не работает.
00:09:22По идее, отсюда можно добавлять устройства и менять настройки.
00:09:26Но из-за багов этот инструмент оказался для меня малополезным.
00:09:32Существуют и другие интерфейсы для Headscale, некоторые из них даже упрощают настройку правил доступа.
00:09:35Но лично я пока не нашел Headscale UI, который был бы действительно удобен.
00:09:42Так что да, настройка здесь довольно мудреная.
00:09:46Ладно, она ОЧЕНЬ мудреная.
00:09:49Человеку без технического бэкграунда или даже начинающему разработчику будет сложно настроить это самостоятельно.
00:09:51Наверное, поэтому команда Tailscale позволяет своему сотруднику работать над этим проектом — сейчас он не несет угрозы их бизнесу.
00:09:57Хотя, если кто-то додумается использовать Claude Opus для создания крутого интерфейса, у них может получиться что-то стоящее...
00:10:07Правда, это может упереться в лицензионные ограничения.
00:10:18Но когда всё уже настроено и запущено, Headscale работает просто потрясающе.
00:10:22Хотя некоторых функций всё еще не хватает, например, команд funnel и serve для публикации сервера в интернет или внутри сети.
00:10:32Также нет поддержки нескольких сетей (tailnets), эфемерных узлов и нативных логов сетевого трафика.
00:10:38Но для бесплатного инструмента это действительно впечатляющий уровень.
00:10:42И если я когда-нибудь решу перевести свою систему OpenClaw на полностью автономную работу с локальной нейросетью, то обязательно рассмотрю этот вариант.

Key Takeaway

Headscale предоставляет пользователям полный контроль над частной зашифрованной сетью без ограничений платных подписок, хотя и требует продвинутых технических навыков для развертывания и администрирования.

Highlights

Headscale — это полностью бесплатная альтернатива Tailscale с открытым исходным кодом для создания зашифрованных сетей.

Проект разработан сотрудником Tailscale, что обеспечивает глубокую совместимость, но сохраняет независимость от платных подписок.

Headscale позволяет объединять узлы (серверы, ПК, Raspberry Pi) в единую сеть даже без доступа к публичному интернету.

Установка и настройка системы довольно сложны и требуют навыков работы с Docker, командной строкой и конфигурационными файлами.

Существующие графические интерфейсы (UI) для Headscale пока нестабильны и содержат баги, поэтому основным инструментом управления остается терминал.

Бесплатная версия поддерживает неограниченное количество узлов, что является главным преимуществом перед лимитами бесплатного тарифа Tailscale.

Некоторые продвинутые функции Tailscale, такие как Funnel, Serve и нативные логи трафика, пока недоступны в текущей версии Headscale.

Timeline

Введение и демонстрация работы

Автор представляет Headscale как открытую реализацию сервера управления для Tailscale, позволяющую избежать платных подписок и рисков изменения цен. В начале ролика демонстрируется практический пример соединения двух серверов Ubuntu через зашифрованный туннель. Мы видим, как устройства получают внутренние IP-адреса и позволяют подключаться по SSH друг к другу, при этом оставаясь недоступными из внешней сети. Спикер подчеркивает, что это решение идеально подходит для работы внутри локальной сети или на собственном оборудовании вроде NAS. Основной акцент сделан на полном контроле над данными и отсутствии привязки к конкретному облачному провайдеру.

Архитектура и процесс установки через Docker

В этой части подробно разбирается технический стек, используемый для запуска системы на базе Docker. Автор показывает структуру файла Docker Compose, который включает три контейнера: сам Headscale, графический интерфейс Headscale UI и обратный прокси-сервер Caddy. Рассматривается организация файловой структуры, где в папке lib хранится база данных SQLite, а в папке config — настройки и правила доступа. Особое внимание уделяется конфигурационному файлу, в котором необходимо прописать публичный домен, привязанный через Cloudflare. Этот этап критически важен для того, чтобы узлы сети могли найти сервер управления в интернете.

Создание пользователей и подключение узлов

Раздел посвящен практическим шагам по управлению пользователями и добавлению новых устройств в сеть через командную строку. Сначала создается новый пользователь с помощью команды внутри контейнера, после чего генерируются специальные ключи предварительной авторизации. Автор пошагово показывает процесс установки клиента Tailscale на целевой сервер и его регистрацию на собственном сервере Headscale. Важным моментом является использование флагов для включения встроенного SSH, что упрощает дальнейшее администрирование. В итоге демонстрируется успешное соединение между новыми узлами, подтверждающее работоспособность созданной конфигурации.

Настройка правил доступа (ACL) и проблемы интерфейса

Автор объясняет, почему сеть может не работать без правильно настроенных правил контроля доступа (ACL) в формате JSON. Представлен пример конфигурации, которая разрешает трафик между всеми узлами и автоматическую авторизацию SSH для пользователя root. Далее следует критический обзор Headscale UI, который, несмотря на внешнюю привлекательность, оказывается крайне нестабильным из-за ошибок TypeScript. Спикер отмечает, что на данный момент управление через консоль остается наиболее надежным методом работы. Поднимается вопрос о том, почему оригинальная компания позволяет развиваться этому проекту, указывая на высокий порог входа для обычных пользователей.

Ограничения и потенциал проекта

В заключительной части обсуждаются текущие недостатки Headscale в сравнении с коммерческой версией Tailscale. Упоминается отсутствие таких функций, как публикация сервисов во внешнюю сеть (Funnel) и поддержка нескольких изолированных подсетей. Также отсутствуют механизмы эфемерных узлов и детальное логирование трафика, что может быть критично для корпоративных сред. Тем не менее, автор называет инструмент впечатляющим и планирует использовать его для своих будущих автономных проектов с локальными нейросетями. Видео завершается выводом о том, что для опытных разработчиков это лучший способ получить функционал Tailscale бесплатно.

Community Posts

View all posts