Как открыть localhost в интернете: публичный HTTPS через SSH
Пошагово открываем локальный сайт из интернета без настройки роутера: SSH-туннель, проверка ссылки, Docker, Vite и диагностика ошибок.

Чтобы открыть локальный сайт из интернета, запустите HTTP-сервер на своём компьютере и подключите к нему обратный SSH-туннель. TunnelHunt выдаст публичный HTTPS-адрес: запросы к нему будут приходить на ваш локальный порт, пока работает SSH-соединение.
Для приложения на порту 3000 команда выглядит так:
ssh -p 2222 -R 80:localhost:3000 tunnelhunt.ru
Ниже — полный пример, который можно проверить без собственного приложения, а затем применить к своему проекту.
Что нужно перед запуском
Понадобятся интернет, SSH-клиент и локальный веб-сервер. Проверьте наличие SSH:
ssh -V
В macOS и Linux он обычно уже установлен. В Windows проверьте команду в PowerShell; если она не найдена, установите компонент OpenSSH Client в дополнительных компонентах Windows.
TunnelHunt использует аутентификацию по SSH-ключу. Если ключа ещё нет, создайте отдельный ключ командой ssh-keygen -t ed25519 и следуйте подсказкам. Не перезаписывайте существующий ключ. Если использовали нестандартное имя файла, добавьте к команде подключения -i /путь/к/ключу.
Шаг 1. Поднимите тестовый локальный сайт
Для этого примера нужен Python 3. Создайте отдельную папку с единственным публичным файлом index.html:
<!doctype html>
<html lang="ru">
<meta charset="utf-8">
<title>Проверка туннеля</title>
<h1>TunnelHunt работает</h1>
</html>
Откройте терминал в этой папке и запустите:
python3 -m http.server 3000 --bind 127.0.0.1
В Windows вместо python3 может потребоваться py -3. Откройте http://127.0.0.1:3000. Должен появиться текст «TunnelHunt работает».
Сервер Python раздаёт файлы из текущей папки. Поэтому запускайте его именно в папке тестового сайта, где нет ключей, .env, исходников или личных документов.
Шаг 2. Создайте публичный адрес
В другом терминале выполните:
ssh -p 2222 -o ExitOnForwardFailure=yes -R 80:127.0.0.1:3000 tunnelhunt.ru
При первом соединении SSH предложит проверить ключ сервера. После успешного подключения в терминале появится выданный адрес вида https://имя-туннеля.tunnelhunt.ru.
Здесь 2222 — порт SSH-сервера TunnelHunt; 80 выбирает HTTP-туннель; 127.0.0.1:3000 — локальное приложение. Публичный URL работает по HTTPS, хотя тестовый сервер принимает обычный HTTP. SSH-терминал оставьте открытым.
Шаг 3. Проверьте доступ с другой сети
Откройте выданную ссылку на телефоне через мобильный интернет. Вы должны увидеть ту же тестовую страницу. В терминале Python появится запись входящего запроса.
Можно проверить и через терминал, заменив адрес на выданный вам:
curl -i https://YOUR-SUBDOMAIN.tunnelhunt.ru/
Ожидаемый результат — статус 200 и HTML вашего файла. Заголовок Server может отличаться от локального ответа: запрос проходит через прокси.
Теперь замените тестовый сервер своим приложением или укажите его порт в SSH-команде. Для React/Vite это часто 5173, для Next.js — 3000; точный порт смотрите в выводе вашего dev-сервера.
Почему белый IP и проброс порта на роутере не нужны
SSH-клиент сам устанавливает исходящее соединение с публичным сервером. Внешние пользователи обращаются к этому серверу, а он передаёт запросы обратно по уже открытому соединению. Поэтому публичный IP нужен серверу туннелей, а вашему компьютеру достаточно возможности подключаться к нему.
Это подходит и для подключения за NAT. Однако корпоративная сеть может блокировать исходящий порт 2222: в таком случае нужно согласовать доступ или использовать разрешённую сеть.
Если приложение работает в Docker
Когда SSH запущен на хосте, сначала опубликуйте порт контейнера на loopback-интерфейсе хоста. Например, если приложение внутри контейнера слушает порт 8080:
services:
app:
image: your-app-image
ports:
- "127.0.0.1:3000:8080"
Приложение внутри контейнера должно слушать интерфейс, доступный Docker, обычно 0.0.0.0:8080. На хосте проверьте http://127.0.0.1:3000, затем используйте ту же SSH-команду. Подробнее — в руководстве по Docker.
Почему ссылка открывается, а приложение не работает
| Симптом | Что проверить |
|---|---|
Connection refused при локальной проверке |
Сервер не запущен или указан другой порт |
SSH пишет Permission denied (publickey) |
Клиент не предложил подходящий ключ; проверьте ssh -v и параметр -i |
remote port forwarding failed |
Лимит туннелей, недоступный адрес или отказ сервера; изучите вывод SSH |
Публичный адрес отвечает 502 |
Сначала повторите запрос к локальному порту; проверьте, что процесс не остановился |
Vite сообщает Blocked request |
Добавьте конкретное имя выданного домена в server.allowedHosts |
| Страница есть, запросы API не работают | В браузере посетителя localhost указывает на его компьютер. Используйте относительный /api через dev-proxy или отдельный публичный URL API |
| CORS-ошибка | Настройте разрешённый origin на API; сам туннель правила CORS не отменяет |
Для Vite указывайте точный hostname без https://. Не разрешайте все произвольные хосты ради устранения ошибки. Параметр описан в документации Vite.
Как сохранить адрес и остановить доступ
Для повторяющихся интеграций зарезервируйте доступный на вашем тарифе постоянный субдомен в панели TunnelHunt. Случайный адрес при новом соединении может измениться. Автоматическое восстановление соединения настраивается отдельно — через autossh.
Чтобы завершить демонстрацию, остановите SSH командой Ctrl+C. Проверьте публичную ссылку: она больше не должна отдавать ваш тестовый сайт. Туннель не превращает ноутбук в постоянно работающий хостинг — сон, отключение интернета и остановка приложения делают его недоступным.
Следующие сценарии: вебхуки Telegram, n8n на localhost и сравнение с ngrok.
Готовы запустить свой первый туннель?
Начните использовать TunnelHunt бесплатно уже сегодня и откройте доступ к локальному серверу всего одной командой.
Зарегистрироваться бесплатно →По теме

Альтернатива ngrok: TunnelHunt, SSH и публичный доступ к localhost
30 мая 2025 г.
Сравниваем TunnelHunt и ngrok для локальной разработки: запуск, постоянный адрес, вебхуки, TCP и ограничения. Как перенести интеграцию на SSH-туннель.

autossh: постоянный SSH-туннель, переподключение и systemd
16 июня 2026 г.
Настройка autossh с ServerAliveInterval и systemd: восстановление SSH-туннеля, проверка подключения и диагностика Broken pipe без обещаний вечного uptime.

Почему для туннелей достаточно одного лишь SSH
21 мая 2025 г.
Многие сервисы для туннелирования требуют установки специальных клиентов. Мы в TunnelHunt считаем, что это излишне, и вот почему.

Установка n8n локально через Docker Compose: запуск и данные
12 сентября 2026 г.
Запускаем n8n на компьютере через Docker Compose: постоянный том, резервная копия и восстановление, обновление контейнера и HTTPS для вебхуков.