Reverse tunnel · SSH · TCP · OAuth

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

Сервис работает на вашей машине: за NAT, без белого IP, без единого порта, открытого на роутере. Наружу выходит только имя с сертификатом, и гаснет оно в ту секунду, когда вы закрываете терминал.

Бесплатно и бессрочно. Карта не нужна.

0портов наружу
3транспорта на выбор
10поддоменов бесплатно
Мост активен direct ssh

в потоке 8 раствор 0.60

Обратный проброс по SSH-ключу. Ключ рождается на вашей машине, наружу уходит только публичная половина. Потяните сцену, чтобы осмотреть горловину.

Зачем

Показать локальный сервис снаружи обычно значит сломать себе сеть.

Как это делают

  • 01Открывают порт на роутере и вместе с сервисом открывают всё остальное.
  • 02Поднимают сервер, ставят туда копию, и теперь копий две, а расходятся они через день.
  • 03Берут чужой туннель со случайной ссылкой, которая меняется при каждом запуске и не годится ни для демонстрации, ни для обратного вызова.
  • 04Просят администратора сети, и ждут.

Как здесь

  • Никаких портов наружу: соединение всегда исходящее, от вас к нам.
  • Копий нет: снаружи виден тот самый процесс, который вы только что перезапустили.
  • Имя постоянное. Тот же адрес завтра, послезавтра и в настройках обратного вызова.
  • Никого не нужно просить: домен, ключ и готовая команда появляются в кабинете сразу.

Маршрут

Три шага. Между «зарегистрировался» и «работает» нет человека.

Всё делается в кабинете и в вашем терминале. Заявок, согласований и ожидания ответа в этом процессе не существует.

01 · ключ

Рождается у вас

Закрытая половина остаётся на диске и к нам не приезжает. Восстановить её мы не сможем, и это единственно правильное поведение для ключа.

ssh-keygen -t ed25519 \
  -f ~/.ssh/demo

02 · адрес

Имя и порт

Запись в системе доменных имён создаётся сама, сертификат выпускается сам. Вам остаётся выбрать имя и сказать, какой локальный порт публиковать.

demo.tunnellio.site
  → 127.0.0.1:3000

03 · мост

Живёт, пока идёт

Кабинет выдаёт готовую команду под вашу систему. Мост существует ровно столько, сколько выполняется команда, и ни секундой дольше.

ssh -i ~/.ssh/demo -N \
  -R demo:80:127.0.0.1:3000 \
  -p 2222 tunnel@tunnellio.site

Термины этой страницы разобраны в глоссарии: русское название, англоязычное написание и объяснение обычными словами. Полный список запросов - в справочнике API.

Транспорт

Когда SSH закрыт, мост всё равно строится.

Корпоративная сеть режет исходящий SSH. Гостевой Wi-Fi рвёт долгие сессии. Внешнему клиенту нужен OAuth, а не ключ. Поэтому транспортов три, и переключаются они одним полем в свойствах домена.

ТранспортКогда выбиратьКлючДержит разрывOAuth
Direct SSHОбратный проброс по ключу Свой сервер или машина разработчика, сеть не мешает исходящему SSH нужен переподключение нет
TCP-мостСвой протокол, порт 7835 SSH закрыт или сессия живёт минуты. Обходной путь, который проходит почти всегда не нужен да, heartbeat нет
Cloud proxyС авторизацией и проверкой токена Внешний клиент, которому доступ выдают по правилам, а не по секрету не нужен да да, PKCE

Клиент

Свой клиент. Одна команда вместо строки на восемьдесят символов.

Туннель можно поднять голым SSH, и мы показываем эту команду честно. Но в работе нужен не запуск, а то, что вокруг: перезапуск после обрыва, проверка живости адреса, несколько туннелей на машине и возможность спросить у клиента, какой адрес он в итоге получил. Это и есть наш клиент.

  • Мост на чистом Python. TCP-мост реализован внутри клиента, внешние бинарники не нужны вовсе. Один и тот же файл работает в Windows, Linux и macOS.
  • Работает без ключей. Есть API-ключ - доступно всё. Есть только SSH-ключ - доступен прямой проброс и мост. Нет ничего - остаётся мост на свой или на выданный сервером домен.
  • Присматривает за туннелем. Режим --watch поднимает соединение заново после обрыва и следит за живостью публичного адреса, а не только за тем, что процесс не умер.
  • У каждого туннеля имя. По имени смотрят состояние, останавливают туннель и забирают итоговые параметры подключения - это то, что нужно программе, которая подняла туннель и заранее не знает случайный адрес.
  • Запуск из конфига. Первый запуск с флагами запоминается, дальше клиент стартует без аргументов.
Windows:
готовый tunnellio.exe, Python на машине не нужен.
Остальные системы:
архив с исходниками, Python 3.11 и выше.
Документация:
на русском и на английском, ссылки в репозитории.
Первый туннель без единого ключа
tunnellio connect --transport tcp-bridge \
  --domain random --local-port 3000 --run
Рабочий запуск: своё имя, присмотр, журнал
tunnellio connect --domain existing:demo \
  --local-port 3000 --run --watch --name prod
Какой адрес получила программа
tunnellio show-config --name prod

Сценарии

Три причины, по которым это включают в первый раз.

Инструмент для агента

Модель обращается к инструменту, который живёт у вас на диске. Cloud proxy добавляет авторизацию, поэтому доступ выдают приложению, а не раздают секрет.

mcp.tunnellio.site

Обратные вызовы на локальный порт

Платёжный шлюз и мессенджер требуют публичный адрес с сертификатом. Постоянное имя означает, что настройку делают один раз, а не при каждом запуске.

hooks.tunnellio.site

Показать заказчику

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

preview.tunnellio.site

Цена

Бесплатного хватает надолго. Платное снимает потолок.

Free

0 ₽в месяц

Бессрочно. Карта не требуется.

  • До 10 поддоменов
  • До 3 SSH-ключей
  • До 3 OAuth-приложений
  • Direct SSH и TCP-мост, сертификат на каждый адрес
  • Программный интерфейс и временные домены
  • Пароль на TCP-мост
Создать аккаунт

Pro

300 ₽в месяц

Или $4 картой иностранного банка. Вернуться на Free можно в любой день: ресурсы остаются на месте.

  • Поддомены без ограничений
  • SSH-ключи без ограничений
  • OAuth-приложения без ограничений
  • Программный интерфейс и временные домены на сутки
  • Пароль на TCP-мост: адрес публичный, доступ закрыт
  • Cloud proxy с проверкой токена
Перейти на Pro

Оплата картой на странице платёжной системы: номер карты и код проверки сервису не передаются. Порядок оплаты, момент открытия доступа и возвраты — в документе об оплате.

Вопросы

То, о чём спрашивают до регистрации.

Нужен ли белый IP-адрес или доступ к роутеру?

Нет. Соединение всегда исходящее: его открывает ваша машина, изнутри своей сети. Портов наружу открывать не нужно, настройки маршрутизатора не меняются. Работает из домашней сети, из офисной и из-под мобильного оператора.

Что происходит с закрытым ключом?

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

Вы видите трафик, который идёт через туннель?

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

Адрес останется тем же после перезапуска?

Да. Поддомен закреплён за вашей учётной записью и не меняется, пока вы его не удалите. Именно поэтому его можно вписать в настройки обратного вызова и в документацию. Отдельно есть временные домены на сутки, для одноразовых задач.

Что делать, если исходящий SSH закрыт в моей сети?

Переключить транспорт на TCP-мост: он работает по своему протоколу на порту 7835, ключ ему не нужен, а обрыв связи он переживает сам. Адрес поддомена при смене транспорта не меняется.

Бесплатный тариф - это пробный период?

Нет, он бессрочный и карту не требует. До 10 поддоменов, до 3 SSH-ключей и до 3 OAuth-приложений. Программный интерфейс и пароль на TCP-мост доступны на Pro: 300 ₽ в месяц. Вернуться на Free можно в любой день, ресурсы сверх лимитов не удаляются, а помечаются как доступные на Pro.

Дальше

Первый адрес поднимается за минуту.

Регистрация, ключ, домен, команда. Дальше сервис работает у вас, а мы держим только вход.

Сообщение администрации

Внимание!

В настоящее время на сайте ведутся отладочные работы.

Приносим извинения за возможные неудобства!