
Открытая, самостоятельно размещаемая реализация сервера управления Tailscale

Открытая реализация контрольного сервера Tailscale для самостоятельного размещения.
Присоединяйтесь к нашему серверу Discord для общения.
Примечание: Всегда выбирайте тот же тег GitHub, что и используемая вами версия
релиза, чтобы убедиться, что у вас правильная конфигурация из примеров. Ветка main может
содержать невыпущенные изменения. Документация доступна для стабильной и
разрабатываемой версий:
Tailscale — это современный VPN, построенный на основе Wireguard. Он работает как оверлейная сеть между компьютерами ваших сетей — используя обход NAT.
Всё в Tailscale имеет открытый исходный код, кроме GUI-клиентов для проприетарных ОС (Windows и macOS/iOS) и контрольного сервера.
Контрольный сервер работает как точка обмена публичными ключами Wireguard для узлов в сети Tailscale. Он назначает IP-адреса клиентам, создаёт границы между каждым пользователем, позволяет делиться машинами между пользователями и публикует анонсированные маршруты ваших узлов.
Сеть Tailscale (tailnet) — это частная сеть, которую Tailscale назначает пользователю в терминах частных пользователей или организации.
Headscale стремится реализовать открытую альтернативу контрольному серверу Tailscale для самостоятельного размещения. Цель Headscale — предоставить самостоятельным хостерам и энтузиастам открытый сервер, который они могут использовать для своих проектов и лабораторий. Он реализует узкую область применения — единую сеть Tailscale (tailnet), подходящую для личного использования или небольшой открытой организации.
Если вам нравится headscale и вы находите его полезным, в репозитории доступны
кнопки спонсорства и пожертвований.
См. раздел "Features" в документации.
См. раздел "Client and operating system support" в документации.
Обратите внимание, что мы не поддерживаем и не поощряем использование обратных прокси и контейнеров для запуска Headscale.
Пожалуйста, ознакомьтесь с документацией.
Для пользователей NixOS доступен модуль в nix/.
mainСборки для разработки из ветки main доступны в виде образов контейнеров и
бинарных файлов. Подробности см. в документации по сборкам для разработки.
Этот проект не связан с Tailscale Inc.
Однако один из активных мейнтейнеров Headscale работает в Tailscale, и ему разрешено тратить рабочие часы на вклад в проект. Вклад этого мейнтейнера проверяется другими мейнтейнерами.
Мейнтейнеры совместно определяют направление развития проекта. Основополагающий принцип — служить сообществу самостоятельных хостеров, энтузиастов и любителей, сохраняя при этом устойчивый проект.
Пожалуйста, прочитайте файл CONTRIBUTING.md.
Также ознакомьтесь с нашим AI_POLICY.md.
Чтобы внести вклад в headscale, вам понадобится последняя версия Go и Buf (генератор Protobuf).
Мы рекомендуем использовать Nix для настройки среды разработки. Это можно
сделать с помощью nix develop, которая установит инструменты и предоставит вам оболочку.
Это гарантирует, что у вас будет та же среда разработки, что и у сопровождающих headscale.
Чтобы обеспечить некоторую согласованность при растущем числе вкладов, этот проект принял правила линтинга и стиля/форматирования:
Код на Go проверяется линтером golangci-lint и
форматируется форматтерами golangci-lint
(gofumpt, gci, goimports).
Пожалуйста, настройте свой редактор на запуск инструментов во время разработки и обязательно
запускайте make lint и make fmt перед коммитом любого кода.
Код на Proto проверяется линтером buf и
форматируется с помощью clang-format.
Документация форматируется с помощью mdformat.
Остальное (Markdown, YAML и т. д.) форматируется с помощью prettier.
Ознакомьтесь с .golangci.yaml и Makefile, чтобы увидеть конкретную конфигурацию.
Установка и активация:
nix develop
Некоторые части проекта требуют генерации кода Go из Protobuf
(если в proto/ внесены изменения), и его необходимо (пере)генерировать с помощью:
make generate
Примечание: Пожалуйста, вносите изменения из gen/ отдельным коммитом, чтобы их было легче проверять.
Чтобы запустить тесты:
make test
Для сборки программы:
make build
Мы рекомендуем использовать Nix для управления зависимостями, чтобы гарантировать наличие всех необходимых инструментов. Если вы предпочитаете управлять зависимостями самостоятельно, вы можете использовать Make напрямую:
С Nix (рекомендуется):
nix develop
make test
make build
С собственными зависимостями:
make test
make build
Makefile предупредит вас, если какие-либо необходимые инструменты отсутствуют, и предложит запустить nix develop. Запустите make help, чтобы увидеть все доступные цели.
Сделано с помощью contrib.rocks.