Задача: Доступ к множеству устройств по SSH по доменным именам через сервер с 1 реальным IP. Возможно ли?

Привет, хабралюди.

Столкнулся тут с одной задачей и не знаю есть ли для неё решение. Суть такова.


Есть несколько сотен устройств (что-то типа датчика, с ОС Линукс на борту), которые подключены к Интернету через сотовую сеть. Все устройства подключаются туннелем к серверу в Интернете, сервер имеет 1 реальный IP. При подключении к серверу устройству выдается внутренний IP и имя вида deviceID.mydomain.com. Вопрос. Возможно ли в данной ситуации как-то настроить сервер, чтобы он при обращении по ssh на доменое имя редиректил на внутренний IP устройства? Т.е. чтобы ssh соединение устанавливалось напрямую между пк администратора и устройством.
  • Вопрос задан
  • 5266 просмотров
Пригласить эксперта
Ответы на вопрос 11
J_o_k_e_R
@J_o_k_e_R
Вам поможет IPv6. Если реальник статический, то 6to4, иначе туннельные брокеры и 6in4. Вам выдадут подсеть, которую хватит намного больше, чем на сотни устройств. А дальше прописывайте AAAA записи в DNS так, как Вам будет угодно.
Ответ написан
artyomst
@artyomst
как вариант — посмотреть в сторону nginx с модулем proxy_pass
Ответ написан
sledopit
@sledopit
man iptables port forwarding ( ну или просто погуглить iptables проброс порта ).
upd. это в случае, если на устройстве, куда надо попасть, стоит свой ssh server.
Ответ написан
opium
@opium
Просто люблю качественно работать
а что вам мешается коннектиться к впн и обращаться по внутренним адресам?
Ответ написан
Slipeer
@Slipeer
Читать здесь про проброс авторизации.
Ответ написан
@joneleth
Ничего не понятно. Что за туннель? Каким образом выдается IP и доменное имя? Устройства и ПК администратора в одной локальной сети или нет?
Ответ написан
merlin-vrn
@merlin-vrn
Прямо «как написано», конечно, сделать нельзя. Есть коммерческие SSH, которые умеют коннектиться через-сервер — в них коннктиться к шлюзу, а с него автоматически к нужному хосту.

С OpenSSH можно сделать так: NAT и пробрасывать на разные хосты разные порты, скажем, 22000 на одно устройство, 22001 — на другое.
А чтобы порты не запоминать, имена сделать разные — прописать в .ssh/config
Host: bla1
Port: 22100

Host: bla2
Port: 22101

и так далее, а сами bla1 и bla2 сделать алиасами одного и того же белого адреса. Вот вам и будет — ssh bla1 попадёт на порт 22100 и пробросится на одно устройство, ssh bla2 — на порт 22001 и попадёт на второе, но, конечно, только на том компе, где config настроили.

Лучше не сделаете.
Ответ написан
@zibada
Можно сделать через authorized_keys.

Заводим специального пользователя, ему в ~/.ssh/authorized_keys добавляем ключи всех клиентов.
Напротив каждого ключа можно прописать дополнительные параметры ssh, в том числе есть параметр command, который принудительно запускает команду при авторизации по этому ключу, командой делаем старт локальной ssh-сессии.
Получается что-то вроде:
command="ssh 10.0.1.1" ssh-rsa AAA...A+p1 client1
command="ssh 10.0.1.2" ssh-rsa AAA...A+p1 client2
...


После чего все клиенты просто соединяются с основным сервером на его обычный порт.

С авторизацией на самих внутренних устройствах возможны варианты, например, private-ключи для авторизации на них можно выложить на основном сервере и указывать через параметр -i в команде.
Ответ написан
@insekt Автор вопроса
Скажите, реально ли сделать так?
1. Админ с ПК делает запрос ssh deviceID.mydomain.com. За ответ на запрос отвечает только мой DNS сервер.
2. При ответе на DNS запрос сервер смотрит на поля SRC IP и PORT и создает временную запись в таблице форвардинга.
SRC IP1 PORT1 DST IP SERVER PORT 22 => SRS IP1 PORT1 DST IP HOST123 PORT 22
3. Когда придет запрос от другого ПК, то этот запрос будет иметь дургие значение SRC IP и PORT и соответственно для него будет своя запись.
Ответ написан
shadowalone
@shadowalone
По-моему самое простое, это поднять на этом сервере vpn, админ подключается по впн к серверу и запросто заходит на все адреса внутренних устройств напрямую.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы