Перейти к содержанию

Без аккаунта и без ACL: чем tailcat закрывает получасовой доступ к домашней машине

Опубликовано
  • Админы
tailcat: доступ на один раз
tailcat: разовый доступ по токену

Бывает задача, у которой нет красивого решения: пустить кого-то — живого человека, задачу в CI или ИИ-агента в песочнице — на домашнюю машину за NAT, но ровно на полчаса и без последствий. Обычно тут либо поднимают постоянную точку входа, либо заводят целую сеть; и то и другое переживёт задачу на месяцы.

Инструмент, который целится именно в эту дыру, на днях выложила Tailscale. Называется он tailcat, и однострочное описание в репозитории пересказывать бессмысленно, проще процитировать: «как netcat, только поверх дата-плейна Tailscale и без её контрол-плейна». За сутки после публикации репозиторий tailscale/tailcat набрал на Hacker News больше пятисот голосов — 26 августа. Внутри собраны уже знакомые по основному продукту открытые компоненты: WireGuard в пространстве пользователя, magicsock для пробивания NAT, сетевой стек netstack из gVisor и релеи DERP. Ни аккаунта, ни прав root, ни постоянно поднятой сети от вас при этом не требуется — в README формулировка ещё лаконичнее: «Tailscale без Tailscale, от Tailscale».

Две команды, между которыми всё и происходит

Сценарий целиком укладывается в пару строк. На той машине, куда нужно пустить:

# на домашней машине
tailcat --serve=no-auth-ssh
# печатает адрес вида tcXXXXXXXX…

# на другой стороне
tailcat ssh tcXXXXXXXX

Адрес получается компактный: около 50 байт, если в нём лежит числовой идентификатор региона. Ставят бинарник через Go или Nix, лицензия — BSD-3-Clause:

go install github.com/tailscale/tailcat/cmd/tailcat@latest
nix run github:tailscale/tailcat

Соединение по возможности устанавливается напрямую, точка-точка. Когда NAT пробить не получилось, трафик уходит через релей DERP. Отзывать доступ отдельной процедурой не нужно: процесс остановлен — адреса больше не существует.

🔒 Безопасность

Флаг --serve=no-auth-ssh стоит читать буквально: это SSH без аутентификации, и единственное, что отделяет чужого от вашей консоли, — знание токена. На официальной странице проекта сказано без обиняков: адрес надо «treat it like a password» — не писать в логи, не коммитить, не пересылать тем, кому доступ не полагается. Сузить круг допущенных можно ключом узла:

tailcat --serve=22 --allow=nodekey:cfb6bf…ddfd16

На фоне двух привычных маршрутов

Одна задача — три подхода: реверс-туннель, тайлнет, tailcat
Сравнение по README tailcat и документации Tailscale, август 2026

Реверс-туннель на арендованном сервере

ssh -R 2222:localhost:22 user@vps -N

Сторонних зависимостей ноль — и в этом весь смысл варианта. Расплата идёт инфраструктурой: понадобится сам VPS, директива GatewayPorts yes в его sshd_config, ключи, юнит systemd для переподнятия туннеля после обрыва и разрешающее правило на 2222. Точка входа после этого висит на публичном адресе круглосуточно, а закрытие доступа означает возню с ключами и конфигом.

Собственный тайлнет

tailscale up --ssh

Когда доступ нужен надолго и не одному человеку, выбирать надо именно это: устройства на учёте, политики, журнал, снятие прав парой кликов в админке. Требования, впрочем, симметричны выгодам — аккаунт у вендора либо развёрнутый своими руками Headscale, машина, постоянно состоящая в сети, и продуманный ACL. Для получаса такая подготовка избыточна.

Остальное, что умеет тот же бинарник

  • --serve=8080,8443 (либо --serve=all) — проброс TCP-портов; со стороны клиента это tailcat <токен> 8080;
  • tailcat socks <токен> — SOCKS5 поверх того же туннеля;
  • --serve=exit-node — выход в интернет через удалённую машину;
  • tailcat genkey с флагами --region=nyc, --fixed-region, --client — стабильный ключ на замену эфемерному --key=new, чтобы адрес не менялся от запуска к запуску;
  • токен публикуется в DNS — my-server.example.com. 300 IN TXT "tailcat=tcXXXXXXXXX", и дальше имя принимается везде, где командная строка ждёт токен;
  • вместо публичного релея можно указать свой: tailcat genkey --region=derp.example.com.

⚠️ Осторожно

Об ограничениях авторы пишут сами, и их три. Стабильность интерфейса не обещана — ни командная строка, ни формат обмена, так что зашивать tailcat в скрипты на годы вперёд рановато. Публичные релеи идут без SLA. И самое существенное: хостинговый релей «keeps metadata logs and isn't intended for privacy», то есть метаданные соединений пишутся, а приватность попросту не заявлена. Приватный сценарий закрывается только собственным DERP.

ℹ️ Справка

Заменой Tailscale эта штука не работает, и не по недосмотру, а сознательно: управления устройствами, политик, админки и аудита здесь нет вовсе. Постоянная многопользовательская сеть по-прежнему строится тайлнетом или Headscale. За tailcat остаётся узкая полоса — «пусти сюда вот этого и вот сейчас».


Источники

💬 Вопрос к сообществу

А чем разовый доступ к домашней машине раздаёте вы — реверс-туннелем на своём VPS, тайлнетом, Cloudflare Tunnel, чем-то ещё? И рискнули бы пустить в домашнюю сеть SSH, где вся аутентификация сводится к знанию одной строки?

Featured Replies

No posts to show

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

Последние посетители 0

  • Ни одного зарегистрированного пользователя не просматривает данную страницу
Яндекс.Метрика

Account

Navigation

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.