LINUX.ORG.RU
ФорумAdmin

Подскажите, есть ли какой способ спроксировать SSH по хостнейму?


0

2

Что-то аналогичное виртуальным хостам в веб-серверах.

К примеру:

external_ip virt1.example.com
external_ip virt2.example.com
external_ip virt3.example.com

в nginx я могу настроить виртуальыне хосты на external_ip и проксировать их на виртуальные машины virt1, virt2, virt3

можно ли что-то такое сделать с SSH?

ssh virt1.example.com -> ssh -> external_ip -> 192.168.x.x:22

★★★★★

Не совсем понятно, что нужно, но не подойдут ли опции ProxyCommand в ssh_config(5) или ForceCommand в sshd_config(5)?

anonymous
()

Я это делаю iptables'ом.

Есть машины virt1, virt2, ..., virt10.

У них внутренние ip-адреса: 10.0.0.1, 10.0.0.2, ..., 10.0.0.10.

Все они слушают 22-ой порт.

А в iptables делаю редиректы

-A PREROUTING -i eth0 -p tcp -m tcp --dport 10001 -j DNAT --to-destination 10.0.0.1:22
-A PREROUTING -i eth0 -p tcp -m tcp --dport 10002 -j DNAT --to-destination 10.0.0.2:22
...
-A PREROUTING -i eth0 -p tcp -m tcp --dport 10010 -j DNAT --to-destination 10.0.0.10:22
eth0 в данном случае - мой внешний интерфейс с реальным ip.

Таким образом, чтобы попасть на 10-ую виртмашину, к примеру, достаточно набрать ssh -l username -p 10010 server.hostname

shell-script ★★★★★
()

ssh протокол в этом плане сродни ftp - работают только с ip адресами, в отличие от http? который, кроме ip-адресов, может так же работать с доменными именами.

leave

Я это делаю iptables'ом.

тоже первое, что пришло в голову

или использовать ssh LocalForward

leader32
()
Ответ на: комментарий от shell-script

Я это делаю iptables'ом.

у меня тоже сейчас так, но есть дебильный софт, который не позволяет указать порт и при этом игнорирует ~/.ssh/config. Т.е. тупо на 22 лезет и хоть тресни.


IP'шники покупать тоже не вариант =(

ЗЫ: софт виндовый.

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

Я вот тут почитал сейчас man iptables, там написано, что опции -s и -d понимает как ip-адреса, так и доменные имена. Что если попробовать сделать что-то типа такого?

-A PREROUTING -i eth0 -p tcp -d virt1.server.hostname --dport 22 -j DNAT --to-destination 10.0.0.1:22
-A PREROUTING -i eth0 -p tcp -d virt2.server.hostname --dport 22 -j DNAT --to-destination 10.0.0.2:22
Мне Вот самому интересно, заработает ли или нет. Сам я только позже смогу проверить.

Т.е. интересно, iptables именно на основе имени принимает решение, или он сперва резолвит его в ip, а потом думает?

shell-script ★★★★★
()
Последнее исправление: shell-script (всего исправлений: 2)

Хост браузер высылает в заголовке. SSH нет. Либо патчи и сможешь заходить только ты.

ziemin ★★
()
Ответ на: комментарий от BaBL

Есть подозрение что софт Ваш всегда будет делать резолв и только потом стучать на ip на 22 порт, так что либо ip, либо тунели/VPN в каждый сервер.

chenger ★★
()
Ответ на: комментарий от shell-script

Я вот тут почитал сейчас man iptables, там написано, что опции -s и -d понимает как ip-адреса, так и доменные имена. Что если попробовать сделать что-то типа такого?

он, скорее всего, возьмет первый ip данного хоста, который найдет в A записи DNS и подставит его. В протоколе IP никаких хостнеймов не шлется, это уже уровень выше, типа того же HTTP.

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

он, скорее всего, возьмет первый ip данного хоста

man iptables ! Он создаст кучу правил — по одному для каждой A-записи, причём можно записать:

iptables -A -d mail.ru,ya.ru

и получить 39 правил. Всё будет разрезолвено в момент загрузки правила.

2TC Можно попробовать сделать, чтобы каждый из хостов резолвился в свой ip-адрес (левый), а потом на маршрутизаторе сделать DNAT на нужный ip/порт. Правда, это получается что нужно настраивать внешний маршрутизатор, винда ведь не умеет DNAT.

mky ★★★★★
()
Ответ на: комментарий от shell-script

Я вот тут почитал сейчас man iptables, там написано, что опции -s и -d понимает как ip-адреса, так и доменные имена. Что если попробовать сделать что-то типа такого?

-A PREROUTING -i eth0 -p tcp -d virt1.server.hostname --dport 22 -j DNAT --to-destination 10.0.0.1:22
-A PREROUTING -i eth0 -p tcp -d virt2.server.hostname --dport 22 -j DNAT --to-destination 10.0.0.2:22
Мне Вот самому интересно, заработает ли или нет. Сам я только позже смогу проверить.
Т.е. интересно, iptables именно на основе имени принимает решение, или он сперва резолвит его в ip, а потом думает?

не пашет =( коннектит к той виртуалке, на которую форвардим, не зависимо от хостнейма.

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

такое через VPN надо делать

Pinkbyte ★★★★★
()
Ответ на: комментарий от Komintern

Да нету же в протоколе ssh хост нэйма, даже если бы он там был он бы передавался зашифрованным, а по какому условию тогда разделять? Не по url же..

pyatak123
()
Ответ на: комментарий от Komintern

хм. а что если nginx попросить проксировать запросы на ссш-порт?


nginx же не тупой прокси, он сначала ждет GET / и по нему уже определяет куда. Сомневаюсь что SSH его шлет.

Попробую с айтишниками договориться, может VPN придется поднять действительно.

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