Yandex Metrika

UDP туннели

Описание

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

UDP-туннелирование пересылает датаграммы между локальным UDP-сервисом и клиентами в интернете через инфраструктуру туннеля. Подходит для DNS, syslog, игровых протоколов и других сценариев, где важна низкая задержка и модель «без установления соединения», с пониманием, что потери и порядок остаются на совести UDP. Сервер выделяет публичный UDP-порт в заданном диапазоне и сопоставляет потоки по правилам сессий и ключей потока.

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

  • Разработчик публикует локальный DNS-резолвер или тестовый UDP-сервис для команды.
  • Администратор собирает syslog или метрики с удалённых хостов на локальный коллектор.
  • Пользователь подключается к игровому или стриминговому UDP-сервису за NAT.
  • Пользователь задаёт в CLI локальный UDP listen и целевой адрес на стороне сервера согласно документации.
  • Пользователь учитывает таймаут неактивности и максимальный размер датаграммы, настроенные оператором.
  • Пользователь входит в бесплатную учётную запись перед созданием UDP-туннеля; гостевой режим для UDP недоступен.
  • Отправленные и полученные датаграммы расходуют общий месячный лимит всех туннелей этой учётной записи.

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

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

Как использовать через CLI-клиент

Основной сценарий — публикация локального UDP-сервиса (как в ngrok):

fortunnels udp 9000
fortunnels udp 192.168.1.10:9000

Клиент создаёт туннель, подключается к data-plane по WebSocket/smux и пересылает входящие датаграммы с публичного UDP-порта на локальный адрес.

Расширенный режим reverse-proxy (оба флага обязательны):

fortunnels udp 53 -udp-listen :5353 -udp-dst 127.0.0.1:53

UDP всегда требует учётную запись. Передайте действующий токен либо используйте -login user@example.test -pass-stdin. Подробности флагов -udp-listen и -udp-dst — в документации CLI-клиента.

Справочник API

Создание туннеля

POST /api/tunnels

Пример:

{
  "protocol": "udp",
  "target_addr": "127.0.0.1:5353"
}

Ответ: идентификатор туннеля и публичный UDP-адрес (схема udp://host:port или поля host/port — как возвращает ваш сервер).

Создание требует действующую сессию или Bearer-токен зарегистрированной учётной записи. Бесплатного тарифа достаточно в пределах его лимитов; гостевой UDP-режим недоступен.

Статус и удаление

GET / DELETE по контракту API туннелей с идентификатором (см. актуальные пути в справочнике сервера).

CLI

fortunnels в режиме udp с флагами локального прослушивания и удалённого назначения (см. -udp-listen, -udp-dst в справке клиента).

Инспектор UDP

Просмотр записанных датаграмм: GET /api/v1/inspector/udp/datagrams (отдельная возможность продукта; требует прав зарегистрированного пользователя, не гостя).

Ошибки

Датаграмма слишком большая

Пакет превышает udp_max_payload_bytes сервера — отбрасывается или не пересылается (наблюдаемо как отсутствие ответа на стороне UDP).

Нет свободного порта

Не удаётся выделить порт из udp_port_range — создание туннеля завершается ошибкой API.

Таймаут неактивности

Поток UDP закрыт после простоя; следующая датаграмма может инициализировать новый поток или быть потеряна в зависимости от клиента.

401 / 403 на API

Создание или управление без прав или при запрете протокола политикой.

Ограничения

  • UDP не гарантирует доставку и порядок; приложение должно это учитывать.
  • NAT и файрволы могут ограничивать входящий UDP к клиенту агента.
  • Диапазон публичных портов и лимиты размера задаются конфигурацией; нет отдельного глобального «выключателя UDP» в современной модели — доступ контролируется диапазоном, ACL и протоколом туннеля.
  • Устаревшие флаги вроде -udp-enabled у сервера не используются; их наличие в скриптах приведёт к ошибке запуска.