OrbStack на macOS позволяет запускать полноценную Linux VM с собственным ядром — это даёт Tailscale доступ к стандартному /dev/net/tun, а не к обходным userspace-решениям. В статье показывают, как поднять Ubuntu VM в OrbStack и добавить её в tailnet.
Сначала OrbStack запускает временную VM, которая через cloud-init забирает конфигурацию из dev-server.yml и останавливается. Потом VM просыпается уже настроенной, входит в tailnet по auth key и включает Tailscale SSH. Подключаться к VM можно откуда угодно, не открывая порты на хосте.
Auth key нужно безопасно хранить. Из-за песочницы macOS гостевая VM не может сама прочитать ключ из Apple Keychain, поэтому его впрыскивает хост во время провижининга — этим занимается скрипт run.sh. Перед запуском надо настроить Access Control Lists (ACLs) в Tailscale: создать тег сервера (myservers) и прописать правило SSH с action: accept для пользователей (player1, player2). Затем генерируется auth key в панели администрирования Tailscale — он должен быть Reusable, Pre-authorized и привязан к тегу tag:myservers. Ключ сохраняется в Keychain через store-ts-key-keychain.sh под именем tailscale-auth-key-dev-server.
build.sh собирает и провижионит Ubuntu 25.10 по cloud-init, run.sh забирает ключ из Keychain и запускает tailscale up с SSH. После этого к VM можно подключиться по MagicDNS (ssh player1@dev-server), через встроенный SSH-прокси OrbStack (ssh player1@dev-server@orb) или через CLI (orb -m dev-server). Tailscale SSH позволяет, например, клонировать git-репозиторий с VM без лишней аутентификации: git clone player1@dev-server:~/my-proj.
Для полной очистки есть cleanup.sh — он выводит VM из tailnet, уничтожает экземпляр OrbStack и удаляет ключ из Keychain. В статье также перечислены остальные файлы: dev-server.yml (cloud-init рецепт с окружением, пакетами и установкой Tailscale), build.sh, run.sh, cleanup.sh и store-ts-key-keychain.sh.