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

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

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

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

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