>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
CSS

Как открыть локальный порт в интернет без лишних хлопот

Знакомая ситуация: вы поднимаете бэкенд на локальной машине, настраиваете интеграцию с внешним сервисом вроде Stripe или Telegram, и тут нужно протестировать вебхук. Внешнего доступа к вашему localhost:8000 нет, заказывать статический IP кажется слишком сложным, а поднимать staging-окружение ради пары запросов — слишком долго.

Обычно в такие моменты рука инстинктивно тянется к ngrok или подобным сервисам. Но коммерческие альтернативы всегда идут с неприятными ограничениями: лимиты на трафик, меняющийся при каждом рестарте URL или платная подписка на базовые функции. Недавно я наткнулся на tunnelto — open-source утилиту на Rust, которая делает ровно то, что обещает, без лишних хлопот.

Что это за инструмент

Проект tunnelto позволяет открыть локальный веб-сервер для публичного доступа в интернете через туннель. Вы запускаете одну команду в терминале, получаете рабочий публичный URL и передаёте его внешним сервисам или клиентам для демонстрации.

Главная особенность — клиент и сервер написаны на Rust с использованием асинхронного tokio-движка. Это обеспечивает скромное потребление памяти и быструю обработку входящих соединений. Никаких тяжёлых рантаймов или фоновых процессов, съедающих гигабайты ОЗУ.

Репозиторий проекта доступен по адресу https://github.com/tunneltodev/tunnelto.

Как это работает на практике

Установка занимает пару минут. Если у вас macOS, утилита ставится через Homebrew:

brew install agrinman/tap/tunnelto

Если у вас уже установлен Rust toolchain, можно собрать пакет через Cargo:

cargo install tunnelto

Для остальных систем автор подготовил скомпилированные бинарники в разделе Releases на GitHub.

Быстрый старт

Допустим, у вас веб-приложение запущено локально на порту 8000. Открыть его для внешнего мира можно командой:

tunnelto --port 8000

После выполнения утилита открывает туннель и сразу выдаёт рабочий адрес. Любые запросы из интернета на этот адрес мгновенно перенаправляются на ваш локальный порт.

Полезные параметры

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

  • --subdomain задаёт фиксированное имя поддомена, чтобы не менять URL в настройках вебхука после каждого рестарта
  • --scheme переключает протокол между http и https, если локальный сервис требует защищённого соединения
  • --dashboard-address поднимает локальный интерфейс для инспектирования и просмотра входящих запросов
  • --key принимает API-ключ для авторизации туннеля

Пример команды с явным указанием поддомена:

tunnelto --port 3000 --subdomain my-test-app

Для чего это пригодится

В разработке есть несколько сценариев, где туннелирование экономит часы работы:

  1. Отладка входящих вебхуков от платёжных систем, мессенджеров или OAuth-провайдеров прямо в локальном дебаггере с брейкпоинтами.
  2. Тестирование мобильного приложения на реальном смартфоне, подключённом к мобильной сети, без настройки Wi-Fi роутера.
  3. Быстрая демонстрация макетов или прототипов коллегам, пока код ещё не запушен в репозиторий и не задеплоен на тестовый сервер.
  4. Проверка HTTPS-сертификатов и security-заголовков перед релизом.

Личные впечатления

В README упоминается возможность самостоятельно хостить серверную часть, однако документация не содержит подробных инструкций. Если важна полная конфиденциальность трафика, придётся разбираться в коде и разворачивать релей на своём VPS.

У проекта немного звёзд (около 400), коммиты приходят не каждый день, но для базовых задач утилита работает надёжно. Быстрый старт, не требует регистрации для базового туннелирования и делает ровно одну понятную вещь. Если нужен простой open-source аналог ngrok — стоит глянуть репозиторий и попробовать.

Projets similaires