Tailscale выпустила Tailcat, netcat поверх WireGuard без своего сервера

Tailscale выпустила Tailcat, переработку открытых компонентов Tailscale, которая ведёт себя как netcat, но передаёт данные через тот же уровень передачи данных (data plane), что и основной продукт компании: точка-точка WireGuard-туннели с DERP-серверами в роли ретрансляторов для обхода NAT и запасного канала связи, если прямое соединение не устанавливается. В отличие от Tailscale, инструмент не использует уровень управления (control plane) компании, вся служебная информация о соединении передаётся сторонами напрямую, любым удобным способом. Аккаунт Tailscale, root- или админ-доступ на машине не нужны: Tailcat, пользовательская библиотека и CLI-утилита, которая не меняет таблицы маршрутизации, DNS и другие сетевые настройки машины.
Работает так: одна сторона запускает tailcat-сервер (слушатель) и получает короткий токен подключения; вторая сторона передаёт этот токен клиентской команде tailcat, чтобы установить соединение. Весь трафик между сторонами шифруется end-to-end по WireGuard; первичное соединение устанавливается через DERP-сервер, после чего механизм magicsock пытается перейти на прямое P2P UDP-соединение. Токен, это префикс «tc» плюс base64-кодированный CBOR с публичным WireGuard-ключом сервера (Curve25519, 32 байта) и сведениями о DERP-релее.
Инструмент умеет: пробрасывать локальные TCP-порты клиенту (--serve=PORT), поднимать SSH-сервер без аутентификации (--serve=no-auth-ssh) либо с ограничением по конкретному клиентскому ключу (--allow=nodekey:...), работать SOCKS5-прокси через туннель (tailcat socks), выступать узлом-шлюзом в сеть сервера (--serve=exit-node), проверять соединение пингом с отчётом о том, идёт ли трафик через DERP-релей или напрямую (tailcat ping --until-direct, таймаут по умолчанию 10 секунд). Ключи бывают одноразовыми (эфемерными, генерируются заново при каждом запуске и делают адрес недействительным после завершения процесса) или сохранёнными на диске командой tailcat genkey (адрес остаётся стабильным между перезапусками). Токены можно публиковать как DNS TXT-записи и подключаться по доменному имени вместо токена. По умолчанию используются собственные бесплатные, но ограниченные по скорости DERP-релеи Tailscale; можно запустить свой DERP-сервер (через утилиту derper, включая автоматический TLS-сертификат Let's Encrypt) и не зависеть от инфраструктуры Tailscale вовсе. Tailcat доступен и как Go-библиотека (github.com/tailscale/tailcat) для встраивания в собственный код, а также как экспериментальная веб-версия, скомпилированная в WebAssembly, для отправки файлов и текста прямо из браузера, но браузерный трафик пока идёт только через DERP-релей, без прямого соединения, до появления поддержки WebRTC.
Токены регистронезависимо не работают: они чувствительны к регистру, что подходит для curl и большинства CLI-инструментов, но не для браузеров, которые приводят имена хостов к нижнему регистру.
Ключевые факты
- Tailscale выпустила open-source Tailcat, CLI и Go-библиотеку, работающую как netcat поверх WireGuard-туннелей Tailscale, но без control plane, аккаунта и root-доступа
- Соединение устанавливается по короткому токену: сервер печатает токен, клиент подключается по нему; трафик шифруется end-to-end по WireGuard, с DERP-релеем как запасным каналом и попыткой перейти на прямое P2P-соединение
- Поддерживает проброс TCP-портов, SSH без аутентификации (с опциональным ограничением по ключу клиента), SOCKS5-прокси через туннель, режим узла-шлюза и публикацию токена как DNS TXT-записи
- Ключи бывают одноразовыми (эфемерными, по умолчанию) или сохранёнными на диске для стабильного адреса; доступ можно ограничить конкретным клиентским ключом
- По умолчанию использует бесплатные, но ограниченные по скорости DERP-релеи Tailscale; можно поднять собственный DERP-сервер и работать полностью независимо от инфраструктуры Tailscale
Почему это важно
Tailscale обычно требует аккаунт и собственный control plane для управления устройствами и ключами. Tailcat убирает эту зависимость: два человека или две машины могут установить разовый зашифрованный WireGuard-туннель, используя ровно тот же уровень передачи данных (magicsock, DERP-релеи для обхода NAT), что и в основном продукте компании, но без учётной записи и без изменения сетевых настроек машины. Это открытый компонент собственной инфраструктуры Tailscale, выложенный отдельным инструментом.
Кому это важно
Разработчикам и системным администраторам, которым нужен быстрый защищённый туннель для передачи файлов, проброса портов или SSH-доступа без развёртывания VPN-инфраструктуры и без создания аккаунта у провайдера. Авторам инструментов автоматизации, как Go-библиотеку Tailcat можно встроить в собственное приложение для P2P-связи между узлами без внешней зависимости от Tailscale-аккаунта.
Как это применить
Установка: go install github.com/tailscale/tailcat/cmd/tailcat@latest или через Nix flakes (nix run github:tailscale/tailcat). Сервер запускается командой tailcat и печатает токен подключения; флаги --serve=PORT пробрасывают TCP-порт, --serve=no-auth-ssh поднимают SSH-сервер без аутентификации, --serve=exit-node превращают машину в узел-шлюз. Клиент подключается командой tailcat <токен>. Доступ можно ограничить конкретным клиентским ключом флагом --allow. Для постоянного адреса используется tailcat genkey (сохранённый ключ на диске); для проверки прямого соединения, tailcat ping --until-direct. Токен можно опубликовать как DNS TXT-запись и обращаться по доменному имени. Для независимости от инфраструктуры Tailscale можно поднять собственный DERP-релей и указать его через --derpmap-url.
Можно ли доверять
Проект открыт исходным кодом и опубликован от имени самой Tailscale на официальном GitHub-аккаунте компании (github.com/tailscale/tailcat), использует тот же протокол шифрования WireGuard и такой же по типу и размеру публичный ключ сервера (Curve25519, 32 байта), как и основной продукт. Источник, техническая документация проекта (README), без указания версии или даты релиза и без отдельного пресс-релиза или комментария представителя компании.
Риски и подводные камни
Бесплатные DERP-релеи Tailscale ограничены по скорости; для интенсивного использования нужен собственный релей. Браузерная (WebAssembly) версия работает только через DERP-релей без прямого P2P-соединения, пока не добавлена поддержка WebRTC. SSH-сервер без аутентификации (--serve=no-auth-ssh) по умолчанию открыт для входа любому, кто знает адрес (токен) этого сервера, для реальной защиты доступ нужно явно ограничивать флагом --allow. При использовании сохранённого (не одноразового) ключа любой, кому когда-либо передавали адрес, сможет подключиться и к будущим запускам сервера с этим ключом, если клиенты не ограничены явно.
«Одноразовый ключ, это безопасный вариант по умолчанию: адрес, которым вы поделились, относится только к этому одному запуску.»
— из документации проекта Tailcat на GitHub