переадресация портов nginx / туннелирование ssh

переадресация портов nginx / туннелирование ssh
  • У меня есть компьютер (назовем его А) в локальной сети без статического IP-адреса, доступного извне. (Порт SSH AAAAA)
  • У меня есть веб-сервер, к которому я хочу иметь доступ извне.
  • У меня есть сервер (B), доступный из Интернета, на котором также работает веб-сервер (порт ssh: BBBBB)
  • Я хочу иметь возможность доступа к веб-серверу на точках A-B с любого компьютера, где есть веб-браузер.

Я успешно использую удаленное туннелирование SSH со следующей настройкой:

  • на машине А:

    $> ssh -f -N -p BBBBB -R 0.0.0.0:9000:localhost:AAAAA [email protected]

  • на машине C:

    $> ssh -f -p 9000 -D 9001 -N [email protected]

  • в веб-браузере машины C,manual proxy configuration SOCKS host: localhost, port 9001, SOCKS v5

Это работает очень хорошо, но очень утомительно каждый раз запускать команду SSH на C и менять настройки в веб-браузере...

Поэтому я поговорил об этом с кем-то, и он сказал мне, что я, вероятно, мог бы упростить настройку, если бы часть, выполненную на машине C, была выполнена непосредственно на сервере B, с некоторой веб-конфигурацией в nginx на веб-сервере B. Итак, теперь я попробовал это:

  • На А, то же самое, что и раньше
  • на Б:

    $> ssh -f -p 9000 -D 9001 -N [email protected]

  • в конфигурации nginx B:

    $> cat /etc/nginx/sites-available/default:

upstream tunnel {
    server 127.0.0.1:9000;
}

server {
        listen 80;
        [...]
      location /A {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        proxy_pass http://tunnel;
  }
    [...]
}
server {
        listen 443 ssl;
        [...]
      location /A {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://tunnel;
  }
    [...]    
}

Насколько я понимаю, из веб-браузера на машине, подключенной к Интернету, запрос http://B.B.B.B/Aдолжен туннелироваться на 127.0.0.1:9000порт, перенаправленный для моей машины A, тем самым предоставляя мне доступ к веб-серверу на A.

Однако в этой настройке что-то не так, так как при попытке подключения http://B.B.B.B/Aя получаю долгую загрузку (около минуты), за которой следует пустая страница со следующим сообщением об ошибке:

SSH-2.0-OpenSSH_6.7p1 Raspbian-5+deb8u3
Protocol mismatch.

Я немного погуглил эту ошибку и нашел несколько сообщений с относительно похожими проблемами, но, честно говоря, с моими (очень) ограниченными навыками в таких вещах я теряюсь, пытаясь спроецировать их исправление на мой вариант использования... Может ли кто-нибудь мне помочь?

Связанный контент