Приватные HTTP-туннели

Приватный режим закрывает HTTP- или HTTPS-туннель для анонимных посетителей. Доступ сохраняется у владельца и у ролей, которым он разрешён правилами сервиса.

Описание

Общее описание функционала

Приватные HTTP-туннели позволяют владельцу скрыть туннель от анонимного доступа по URL туннеля. Пока туннель помечен как приватный, входящие запросы без действующего токена доступа (ссылка-приглашение или cookie после перехода по такой ссылке) получают отказ. В публичном режиме (по умолчанию) любой, кто знает URL туннеля, может обратиться к нему с учётом общих ограничений сервиса (лимиты, списки IP и тариф). Владелец может вернуть туннель в публичный режим; при этом все ранее выданные ссылки доступа отзываются. Функция доступна только для протоколов HTTP/HTTPS и на тарифах с правом приватных туннелей.

Панель управления

В личном кабинете на странице Туннели у каждого активного HTTP- или HTTPS-туннеля отображается колонка «Публичный» с переключателем:

| Положение | Режим | Кто может открыть URL туннеля |

|-----------|--------|-------------------------------|

| Включено | Публичный (по умолчанию) | Любой посетитель по известному URL (с учётом лимитов и политик доступа) |

| Выключено | Приватный | Владелец, администратор и гости с действующей ссылкой доступа; анонимные запросы отклоняются |

Тариф: перевести туннель из публичного в приватный могут пользователи с правом «приватные туннели» на платном тарифе. На бесплатном тарифе переключатель в положении «публичный» заблокирован; при наведении показывается подсказка со ссылкой на смену тарифа. Вернуть приватный туннель в публичный режим можно на любом тарифе.

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

Тот же переключатель доступен в админ-консоли в списке всех туннелей.

Как пользователь может использовать

  • Разработчик на платном тарифе создаёт HTTP-туннель и в дашборде выключает «Публичный», чтобы случайные посетители не видели локальный сервис.
  • Владелец выдаёт коллеге ссылку доступа через API (см. справочник API) и отзывает её после демо.
  • Пользователь возвращает туннель в публичный режим для открытого тестирования — после подтверждения в дашборде.
  • Пользователь на бесплатном тарифе видит заблокированный переключатель и подсказку о смене тарифа; при создании туннель остаётся публичным.

Как это реализовано в сервисе

При создании или изменении туннеля сервер применяет эффективную видимость: без права на тарифе запрос на приватность принудительно переводит туннель в публичный режим. Команда смены видимости через API или переключатель в дашборде меняет флаг публичности; переход в приватный режим проверяет тариф. Прокси для приватного туннеля проверяет токен в параметре запроса, заголовке или cookie. Ссылки создаются и отзываются через API. При смене тарифа без права сервер синхронизирует приватные туннели в публичные и очищает токены.

Справочник API

API (приватные туннели)

Смена видимости

Через дашборд: колонка «Публичный» на странице Туннели (то же в админ-консоли). Переключатель вызывает ту же операцию, что и API ниже.

PATCH /api/tunnels с телом:

{
  "id": "<tunnel_id>",
  "action": "set_visibility",
  "is_public": false
}
  • is_public: false — сделать туннель приватным (только HTTP/HTTPS).
  • is_public: true — вернуть публичный режим; все share-токены отзываются.

Требуется аутентификация владельца или администратора. На тарифе без private-tunnels — 403 с code: feature_disabled.

Ссылки доступа

  • GET /api/tunnels/{id}/share-links — список активных ссылок (только владелец).
  • POST /api/tunnels/{id}/share-links — создать ссылку (тело: label, опционально expires_at).
  • DELETE /api/tunnels/{id}/share-links/{token_id} — отозвать ссылку.

Создание ссылок разрешено только для приватных HTTP/HTTPS туннелей.

Доступ гостя

Гость открывает URL с параметром токена или проходит bootstrap; сервис выставляет cookie доступа до истечения срока ссылки.

Ошибки

Ошибки (приватные туннели)

| Ситуация | HTTP | Сообщение / код |

|----------|------|-----------------|

| Тариф без приватных туннелей (PATCH set_visibility → private) | 403 | feature_disabled, feature_id: private-tunnels |

| Приватность для TCP/UDP | 400 | private visibility requires http or https tunnel |

| Создание share-link для публичного туннеля | 400 | share links only for private tunnels |

| Анонимный доступ к приватному туннелю | 403 | forbidden (без валидного токена) |

| Просроченный или отозванный токен | 403 | forbidden |

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

Ограничения

Известные ограничения

  • Приватный режим поддерживается только для HTTP и HTTPS; TCP-туннели всегда публичны по политике сервиса.
  • Переключатель «Публичный» в дашборде показывается только для активных HTTP/HTTPS-туннелей; для туннелей на паузе или неактивных колонка пуста.
  • На тарифе без права приватных туннелей новый туннель при создании остаётся публичным; переключатель в дашборде не позволяет сделать его приватным.
  • Переход в публичный режим безвозвратно отзывает все активные ссылки доступа для туннеля.
  • Управление ссылками доступа (создание и отзыв) в дашборде не предусмотрено — только через API; в интерфейсе доступна смена режима публичный/приватный.