TunnelHunt

Как открыть localhost в интернете: публичный HTTPS через SSH

4 мин чтения

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

Как открыть localhost в интернете: публичный HTTPS через SSH

Чтобы открыть локальный сайт из интернета, запустите 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

Альтернатива ngrok: TunnelHunt, SSH и публичный доступ к localhost

30 мая 2025 г.

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

Читать далее →
autossh: постоянный SSH-туннель, переподключение и systemd

autossh: постоянный SSH-туннель, переподключение и systemd

16 июня 2026 г.

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

Читать далее →
Почему для туннелей достаточно одного лишь SSH

Почему для туннелей достаточно одного лишь SSH

21 мая 2025 г.

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

Читать далее →
Контейнер n8n и отдельное хранилище данных

Установка n8n локально через Docker Compose: запуск и данные

12 сентября 2026 г.

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

Читать далее →