TunnelHunt

Проброс TCP-порта через SSH: удалённый доступ к локальному сервису

4 мин чтения

Как создать TCP-туннель в TunnelHunt: резервирование порта Business, команда ssh -R, тест echo-сервера и отличие от HTTPS и UDP.

Проброс TCP-порта через SSH: удалённый доступ к локальному сервису

TCP-туннель передаёт поток байт между удалённым клиентом и вашим локальным приложением. Он нужен для протоколов, которые нельзя открыть обычной HTTPS-ссылкой: собственного TCP-сервера, базы данных или gRPC с самостоятельно настроенным TLS.

В TunnelHunt сырой TCP доступен на тарифе Business и требует предварительного резервирования порта. Команда с HTTP-портом 80 создаёт другой тип туннеля и не подходит для произвольного TCP-протокола.

HTTP, TCP и UDP: какой вариант нужен

Что вы открываете Тип подключения
Сайт, REST API, webhook HTTP-туннель и публичный HTTPS-адрес
Собственный протокол поверх TCP Зарезервированный TCP-порт
PostgreSQL или другой сервер БД TCP с аутентификацией и шифрованием самого сервиса
gRPC TCP с настройкой TLS на gRPC-сервере и клиенте
Игра или приложение на UDP TCP-туннель не подходит

Если нужна ссылка на сайт, начните с публичного доступа к localhost. Далее проверим именно передачу произвольных TCP-данных.

Шаг 1. Подготовьте локальный echo-сервер

Чтобы проверить соединение без публикации базы данных, сохраните файл tcp_echo.py:

import socketserver

class Echo(socketserver.BaseRequestHandler):
    def handle(self):
        self.request.settimeout(10)
        data = self.request.recv(1024)
        self.request.sendall(b'echo: ' + data)

class Server(socketserver.ThreadingTCPServer):
    allow_reuse_address = True
    daemon_threads = True

with Server(('127.0.0.1', 9000), Echo) as server:
    server.serve_forever()

Запустите python3 tcp_echo.py. Пример принимает небольшую порцию данных и возвращает её с префиксом echo:. Он предназначен для короткой проверки, после неё остановите процесс.

Шаг 2. Зарезервируйте порт

В панели управления откройте раздел TCP-портов и зарезервируйте порт на своём Business-аккаунте. Запишите номер и используйте SSH-ключ этого аккаунта. Если резервирование привязано к конкретному ключу, подключайтесь именно им.

В примерах ниже номер 15432 условный: его нужно заменить своим. Наличие свободного порта на вашем компьютере не резервирует одноимённый порт на сервере TunnelHunt.

Шаг 3. Свяжите публичный порт с локальным

ssh -p 2222 -o ExitOnForwardFailure=yes \
  -R 15432:127.0.0.1:9000 tunnelhunt.ru

Теперь клиент должен обращаться к tunnelhunt.ru:15432, а не к случайному HTTPS-субдомену. SSH-процесс оставьте работающим.

Если сервер отказывает, проверьте тариф, владельца резервирования и выбранный SSH-ключ. Номер удалённого порта находится слева от первого двоеточия; локальный порт приложения — справа.

Шаг 4. Проверьте ответ с другого компьютера

На другом устройстве с Python 3 выполните, заменив 15432:

import socket

with socket.create_connection(('tunnelhunt.ru', 15432), timeout=10) as connection:
    connection.sendall(b'hello tunnel\n')
    print(connection.recv(1024).decode())

Ожидаемый вывод: echo: hello tunnel. Если ответа нет, сначала запустите тот же клиент на машине сервера с адресом ('127.0.0.1', 9000). Так вы отделите ошибку локального приложения от ошибки туннеля.

Как использовать с базой данных или gRPC

После теста остановите echo-туннель. Запустите новое соединение с локальным портом нужного сервиса, например 5432 для PostgreSQL:

ssh -p 2222 -o ExitOnForwardFailure=yes \
  -R 15432:127.0.0.1:5432 tunnelhunt.ru

В клиенте БД укажите публичный хост и зарезервированный порт. Туннель не изменяет логин, пароль и правила доступа базы.

SSH шифрует участок от вашего компьютера до TunnelHunt. Внешний TCP-клиент не получает TLS автоматически. Для данных и учётных записей настройте TLS в самом протоколе и проверку сертификата на клиенте. Имя, которое проверяет клиент, должно соответствовать сертификату; не отключайте проверку ради соединения.

Тот же принцип действует для gRPC: проброс передаёт протокол, а сертификаты, аутентификация и разрешённые методы остаются ответственностью gRPC-приложения.

Диагностика

Симптом Проверка
Отказ создать TCP-туннель Business, резервирование и SSH-ключ
Таймаут внешнего клиента Доступность публичного порта из сети клиента и состояние SSH
Подключение есть, ответа нет Ожидаемый формат сообщения и локальные логи приложения
Ошибка сертификата Доверенный CA, имя сервера и срок сертификата
Игра не подключается Возможно, ей нужен UDP или несколько портов

Для восстановления после разрыва настройте autossh. Для завершения доступа остановите SSH через Ctrl+C и локальный тестовый сервер. Проверка echo не доказывает работу прикладной авторизации — её проверяйте отдельно на вашем протоколе.

Готовы запустить свой первый туннель?

Начните использовать TunnelHunt бесплатно уже сегодня и откройте доступ к локальному серверу всего одной командой.

Зарегистрироваться бесплатно →

По теме

Удаленный доступ к Raspberry Pi: Как управлять IoT-устройством из любой точки мира

Удаленный доступ к Raspberry Pi: Как управлять IoT-устройством из любой точки мира

2 июля 2025 г.

Ваш Raspberry Pi собирает данные с датчиков, но находится за домашним роутером без белого IP? Узнайте, как получить доступ к его веб-интерфейсу или API с помощью одного SSH-туннеля.

Читать далее →
Тестирование мультиплеера в инди-игре: Как создать игровой сервер на своем ПК

Тестирование мультиплеера в инди-игре: Как создать игровой сервер на своем ПК

9 июля 2025 г.

Разрабатываете мультиплеерную игру и нужно протестировать сетевой код с друзьями? Узнайте, как превратить ваш компьютер в игровой сервер, доступный через интернет.

Читать далее →
Два уровня защиты: Как TunnelHunt обеспечивает безопасность вашего localhost

Два уровня защиты: Как TunnelHunt обеспечивает безопасность вашего localhost

18 июня 2025 г.

Безопасно ли выставлять свой localhost в интернет? Разбираем технические детали: как работают SSH-туннелирование и HTTPS-терминирование, чтобы защитить ваш трафик.

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

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

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

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

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