Как открыть локальный порт в интернет без лишних хлопот
Знакомая ситуация: вы поднимаете бэкенд на локальной машине, настраиваете интеграцию с внешним сервисом вроде 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
Для чего это пригодится
В разработке есть несколько сценариев, где туннелирование экономит часы работы:
- Отладка входящих вебхуков от платёжных систем, мессенджеров или OAuth-провайдеров прямо в локальном дебаггере с брейкпоинтами.
- Тестирование мобильного приложения на реальном смартфоне, подключённом к мобильной сети, без настройки Wi-Fi роутера.
- Быстрая демонстрация макетов или прототипов коллегам, пока код ещё не запушен в репозиторий и не задеплоен на тестовый сервер.
- Проверка HTTPS-сертификатов и security-заголовков перед релизом.
Личные впечатления
В README упоминается возможность самостоятельно хостить серверную часть, однако документация не содержит подробных инструкций. Если важна полная конфиденциальность трафика, придётся разбираться в коде и разворачивать релей на своём VPS.
У проекта немного звёзд (около 400), коммиты приходят не каждый день, но для базовых задач утилита работает надёжно. Быстрый старт, не требует регистрации для базового туннелирования и делает ровно одну понятную вещь. Если нужен простой open-source аналог ngrok — стоит глянуть репозиторий и попробовать.
Projets similaires