LINUX.ORG.RU
ФорумAdmin

routing traffic

 , , ,


0

1

Добрый день. Есть сервер с external IP и 2 вирталками(вируталки на internal ip) Нужно из вне ходить на вируталки по SSH... На dns прописал что 2 вируталки (srv1.local.com, srv2.local.com) имеют внешний IP сервера.

Думал использовать nginx, но чет не работает... конф:

stream {

        map $remote_addr $name {
           srv1.local.com srv1;
           srv2.local.com srv2;
                               }

        upstream srv1 {
                server 10.10.1.2:22;
                       }
        upstream srv2 {
                server 10.10.1.3:22;
                       }
        server {
                listen 2222;
                proxy_pass $name;
               }
    }
Есть еще варианты как можно реализовать? Заранее спасибо!



Последнее исправление: Nolfik (всего исправлений: 1)

SSH over HTTP? Оригинально однако. Да, но нет, работать это не будет.

Такие вещи делаются средствами самого SSH.

Допустим, что мы имеем:

  • jump.example.com (public IP и в той же сети, что и 2 следующих)
  • app1.internal (private IP)
  • app2.internal (private IP)

Делается следующий ~/.ssh/config (локально дома):

Host app*.internal
    ProxyCommand ssh jump.example.com nc %h %p

И дальше уже у себя дома просто:

ssh user1@app1.internal
beastie ★★★★★
()
Ответ на: комментарий от beastie

Спасибо. Но данный варинат немного не то... Хотелось сделать по аналогии как у хостинг провайдеров для виртуальных хостингов сделано. Но они скорее всего используют Unix и ipfw который умеет работать с hostname... чего не скажешь по iptables... Можно конечно и iptables использовать и с разными портами, но если их только 2 вируталки, а вот если их будет 100? Еще раз спасибо за ответ.

Nolfik
() автор топика

$remote_addr это IP адрес клиента.

в stream модулe пробросить server_name можно через $ssl_preread_server_name, но в твоем случае не катит.

хостинг провайдеры работают по HTTP(S), и витуал хост выбирается исходя из заголовка Host.

развешивай на разные порты.

drsm ★★
()
Последнее исправление: drsm (всего исправлений: 1)
Ответ на: комментарий от drsm

в stream модулe пробросить server_name можно через $ssl_preread_server_name, но в твоем случае не катит.

Согласен, пробовал но не отрабатывает... Работает только без map и на 1 сервер)))))

stream {

        upstream srv1 {
                server 10.10.1.2:22;
                       }

               server {
                listen 2222;
                proxy_pass $srv1;
               }
    }
Не умеет он парсить destination host... как и iptables...((((

хостинг провайдеры работают по HTTP(S), и витуал хост выбирается исходя из заголовка Host.

Это да, но у меня и ssh есть на вирутальном хостинге... и он работает, но там скорее всего как я писал выше unix+ipfw(вот он умеет работать с hostname)

Nolfik
() автор топика
Ответ на: комментарий от Nolfik

пробовал но не отрабатывает...

это работает когда у тебя TLS/SSL траффик, HTTPS там или что-то типа того, + запрос приходит с SNI(server name indication).

ssh есть на вирутальном хостинге...

https://serverfault.com/a/610971 (если вкратце, то можно сделать, но не на основе имени хоста, а на основе имени юзера)

drsm ★★
()
Последнее исправление: drsm (всего исправлений: 1)
Ответ на: комментарий от Nolfik

unix+ipfw(вот он умеет работать с hostname)

Интересно как? Как, простите можно догадаться если сами пакеты не содержат информации о hostname ? А libastral все еще забагованная и не умеет работать с ssh.
Насчет шаред хостингов, выше уже упомянули про использование юзернэйма. Не обращали внимание что они там уникальные?

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.