TunnelHunt

SSH-туннель: примеры -L, -R и -D для проброса портов

3 мин чтения

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

Три направления соединения через SSH-туннель

SSH-туннель передаёт TCP-соединения через SSH. Чтобы выбрать команду, сначала определите, где приложение будет подключаться к входному порту: на вашем компьютере или на удалённом сервере.

Задача Режим Где вход
Открыть удалённый HTTP-сервис на своём компьютере -L На компьютере
Дать серверу доступ к локальному приложению -R На сервере
Направлять запросы программы через SOCKS -D На компьютере

Для примеров с user@server.example нужен ваш обычный SSH-сервер, разрешающий соответствующий forwarding. Замените имя пользователя и домен. TunnelHunt используется только в отдельном примере публичного HTTPS ниже.

Локальный туннель: ssh -L

Допустим, на сервере работает панель по адресу 127.0.0.1:8080. На своём компьютере выполните:

ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:18080:127.0.0.1:8080 user@server.example

Оставьте терминал открытым, а во втором выполните:

curl -i http://127.0.0.1:18080/

Первый 127.0.0.1 — вход на вашем компьютере. Второй относится к стороне сервера: именно сервер соединяется с целевым портом 8080. Здесь разные порты специально помогают не перепутать стороны. В браузере компьютера панель будет доступна на http://127.0.0.1:18080.

Обратный туннель: ssh -R

Теперь приложение работает на вашем компьютере на порту 3000. Сначала проверьте его локально:

curl -i http://127.0.0.1:3000/
ssh -N -o ExitOnForwardFailure=yes -R 127.0.0.1:18080:127.0.0.1:3000 user@server.example

Во второй SSH-сессии на сервере проверьте:

curl -i http://127.0.0.1:18080/

Серверный вход 18080 ведёт к приложению на компьютере. Такой пример не создаёт публичную ссылку: адрес входа привязан к loopback сервера. Доступ извне зависит от настроек sshd, включая GatewayPorts, и сетевых правил. Сам по себе -R также не выпускает сертификат HTTPS.

Динамический туннель: ssh -D

Если программа умеет SOCKS, конечный адрес можно выбирать для каждого запроса:

ssh -N -o ExitOnForwardFailure=yes -D 127.0.0.1:1080 user@server.example

Во втором терминале:

curl --socks5-hostname 127.0.0.1:1080 https://example.com/

Этот запрос пойдёт через SSH-сервер; вариант --socks5-hostname передаёт разрешение имени стороне прокси. Остальные приложения компьютера автоматически на него не переключаются. SOCKS-вход здесь доступен только локально.

Синтаксис трёх режимов и опции -N описаны в справочнике OpenSSH. -N оставляет соединение для туннелей без запуска удалённой команды.

Публичный HTTPS без своего SSH-сервера

Для демонстрации сайта или приёма вебхука нужен URL, который откроется у внешнего клиента. Если приложение слушает 127.0.0.1:3000, команда TunnelHunt выглядит так:

ssh -p 2222 -o ExitOnForwardFailure=yes -R 80:127.0.0.1:3000 tunnelhunt.ru

Сервис выведет HTTPS-адрес. Число 80 здесь выбирает HTTP-туннель TunnelHunt; это не инструкция открыть системный порт 80 на произвольном VPS. Оставьте соединение работающим и откройте выданную ссылку с телефона. Пошаговый запуск есть в руководстве по публичному localhost.

Если туннель не работает

Сообщение или симптом Что проверить
Address already in use Входной порт занят: выберите другой
administratively prohibited Forwarding запрещён настройками SSH-сервера или ключа
connect failed: Connection refused Целевой сервис не запущен или указан неверный адрес
SSH подключился, но HTTP не работает Проверьте целевой HTTP-порт с той стороны, которая к нему обращается
Туннель пропадает при простое Проверьте сон компьютера и сетевые разрывы

ExitOnForwardFailure помогает обнаружить ошибку создания проброса, но не подтверждает доступность приложения. Поэтому после запуска всегда нужен отдельный HTTP-запрос. Для журналов добавьте -v; для остановки нажмите Ctrl+C в терминале туннеля. Если требуется восстановление после обрыва, используйте инструкцию по autossh.

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

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

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

По теме