Не работает обратный 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 шт):

Автор решения: Pak Uula

Нужно подготовить сервер к тому, чтобы обслуживать запросы на server_ip:server_port

  1. Открыть server_port на файерволе. Если у вас удалённый сервер на Debian/Ubuntu, то там файервол ufw:

    sudo ufw allow server_port/tcp
    
  2. Разрешить 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 на сервер в Германии. Этот сайт извне России не открывается (в Германии и Корее, как минимум), зато открывается на ноутбуке в России.

  1. Подготовим германский сервер

    • откроем порт 4321 на файерволе

      sudo ufw allow 4321/tcp
      
    • разрешим sshd открывать порты не только на localhost:

      sudo vim /etc/ssh/sshd_config
      

      выставим опцию GatewayPorts yes

      sudo service ssh restart
      
  2. Прокинем mos.ru:443 на германский_сервер:4321. Выполним на российском ноутбуке команду

    ssh -R 4321:mos.ru:443 германский_сервер
    
  3. Проверим: на корейской виртуалке выполним команду

    curl -k -i -H "Host: mos.ru" https://германский_сервер:4321
    
    HTTP/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 через туннель между российским ноутбуком и германским сервером.

→ Ссылка
Автор решения: eri

Проверьте GatewayPorts yes в /etc/ssh/sshd_config.

Нужно в пробросе указать так

ssh serveraddress -R 0.0.0.0:serverport:127.0.0.1:clientport

0.0.0.0 разрешит слушать входящие на всех сетях. Без указания слушается только на lo.

→ Ссылка