Не работает обратный ssh тунель
Создаю соединение ssh root@server_ip -R server_port:client_ip:client_port На сервере открыт этот порт для tcp, на клиенте (ноут на Windows) в firewall разрешил в обе стороны, приложение на ноуте поднят fastapi на 0.0.0.0:client_port
В общем проблема же в том, что в интернете по http://server_ip:server_port Ничего не выдает
Ответы (2 шт):
Нужно подготовить сервер к тому, чтобы обслуживать запросы на server_ip:server_port
Открыть
server_portна файерволе. Если у вас удалённый сервер на Debian/Ubuntu, то там файерволufw:sudo ufw allow server_port/tcpРазрешить
sshdокрывать порты не только на localhost. Для этого нужно отредактировать/etc/ssh/sshd_configи выставить опциюGatewayPorts yes. В этом случае sshd будет открывать серверный сокет на всех интерфейсах.
После этого ssh server_ip -R server_port:localhost:client_port откроет на server_ip:server_port ноутбучный сервис.
Проброс нелокальных сервисов на удалённый сервер
Занятно, что при -R туннеле можно открывать соединения не только с локальными сокетами А, но и вообще с любым адресом, к которому можно подключиться из А.
Пример: пробросим сайт mos.ru на сервер в Германии. Этот сайт извне России не открывается (в Германии и Корее, как минимум), зато открывается на ноутбуке в России.
Подготовим германский сервер
откроем порт 4321 на файерволе
sudo ufw allow 4321/tcpразрешим
sshdоткрывать порты не только на localhost:sudo vim /etc/ssh/sshd_configвыставим опцию
GatewayPorts yessudo service ssh restart
Прокинем
mos.ru:443на германский_сервер:4321. Выполним на российском ноутбуке командуssh -R 4321:mos.ru:443 германский_серверПроверим: на корейской виртуалке выполним команду
curl -k -i -H "Host: mos.ru" https://германский_сервер:4321HTTP/1.1 301 Moved Permanently Server: nginx Date: Sun, 06 Jul 2025 20:36:09 GMT Content-Type: text/html Content-Length: 162 Connection: keep-alive Location: https://www.mos.ru/ <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
ЧТД. Германский сервер на порту 4321 выдаёт страницу российского сервера mos.ru через туннель между российским ноутбуком и германским сервером.
Проверьте GatewayPorts yes в /etc/ssh/sshd_config.
Нужно в пробросе указать так
ssh serveraddress -R 0.0.0.0:serverport:127.0.0.1:clientport
0.0.0.0 разрешит слушать входящие на всех сетях. Без указания слушается только на lo.