@RyoidenshiAokigahara
Начинающий

Как настроить SSH-сервер для проброса локального порта наружу через ssh -R?

Знакомился с пробросом портов через SSH.

Есть удаленный сервер на Ubuntu 20.04, есть Windows 10 в локальной сети.
В нете полно инфы описывающей опции -R, -L и -D у ssh, однако далеко не везде есть упоминание о необходимости внесения изменений в конфиг на сервере.

Собственно с прокси (-D) и пробросом удаленного порта на локальный (-L) проблем не возникло - все работало как и описывается во многочисленных инструкциях и т.д.
Однако на пробросе локального порта на удаленный (-R) возникает проблема.
Команда в целом: ssh -R 8000:localhost:3000 remoteserv
На винде в ~/.ssh/config лежит алиас remoteserv с IP, пользователем и ключом
Соединение проходит успешно - никаких сообщений об ошибке не вылезает. У меня открывается терминальная сессия на сервере.
Запускаю команду ss -tunl и вижу что слушается TCP на 0.0.0.0:8000

На винде запускаю веб-сервер на 3000 порту. Веб-сервер крутится на 0.0.0.0:3000 - проблем с доступом к нему с других устройств в локальной сети не наблюдается. Обращаюсь к серверу по IP:8000 - по логике запрос должен проброситься через ssh на локальный 3000 порт, ну и соответственно вернуть ответ от 3000 порта винды на 8000 порт сервера.
Однако, к сожалению этого не происходит и в браузере я получаю ERR_EMPTY_RESPONSE

В той же терминальной сессии на сервере запускаю curl 0.0.0.0:8000 и получаю след. результат: curl: (52) Empty reply from server
UPD: от одного из знакомых получил замечание, что curl 0.0.0.0:8000 не работает потому что 0.0.0.0 - мета-адрес. В связи с этим уточнение - locahost вместо него дал тот же самый результат.

Уточнение: при запросе с другого устройства локальной сети, локальный веб-сервер фиксирует приходящий запрос. Когда совершается попытка достучаться по проброшенному порту (удаленный сервер и 8000 порт) никаких запросов на локальном сервере не фиксируется.

Пока листал все эти интро, в нескольких случаях натыкался на инфу о конфиге, в частности про параметры:
  • GatewayPorts
  • AllowTcpForwarding

Оба параметра имеют значение yes, после внесения изменений сервис ssh рестартился через systemctl

Уточнения:
  1. Порты на Ubuntu не блочатся. Т.е. если я зайду на сервер и там подниму веб-сервер на рандомном порту - он корректно работает при обращении по ip:port
  2. По сути в сети есть сервис https://localhost.run, который выполняет практически тот же функционал. Разве что проброс идет для веба и на 80й порт, а в рез-те подключения выводится нечто вроде motd и адреса на котором можно увидеть проброшенный веб-сервер.

На основе этого делаю (возможно ошибочное) предположение о том, что проблема где-то в конфигурации ssh-сервера, но где и в чем именно - пока, к сожалению, не знаю. Заранее спасибо всем, кто откликнется и подскажет что к чему.
  • Вопрос задан
  • 307 просмотров
Решения вопроса 1
@RyoidenshiAokigahara Автор вопроса
Начинающий
Решение проблемы нашлось здесь: localhost.run/docs/cli

В частности следующее уведомление:
NOTE
Some operating systems set localhost to the ipv6 address [::1] while some frameworks listen on 127.0.0.1, try 127.0.0.1 instead of localhost if there are connection issues.


Честно сказать не припомню, чтобы встречал упоминания этого момента. Однако при использовании 127.1 напрямую вместо localhost ssh -R 8000:127.0.0.1:3000 remoteserv проброс наконец-то заработал и запрос извне к ubuntu-серверу дошел таки до локального устройства с веб-сервером. С ответом проблемы тоже не возникло по итогу. Как оказалось, с конфигурацией SSH-сервера все было в порядке.

Надо будет поискать давно ли десятая винда localhost биндит на ipv6 адрес :/
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы