Доступ к клиентским машинам с общедоступного сервера в настройке клиента
В одной строке: Как подключить несколько локальных клиентских установок, имеющих частный IP и за брандмауэром, к общедоступному облачному серверу и способных вызывать конечную точку HTTP и SSH в любой локальной клиентской установке с сервера.
Подробности: у нас есть мультитенантное приложение, в котором у нас есть один действующий общедоступный (или кластерный из нескольких) сервер Tomcat, который развернут в общедоступном облаке (например, AWS). У нас также есть клиентский сервер Tomcat, который будет развернут на месте клиента, и, очевидно, локальный размещенный клиент будет иметь частный IP-адрес и будет защищен брандмауэром (что позволяет осуществлять связь через определенные порты с нашим действующим сервером).
Мы должны поддерживать локальные клиентские установки, чтобы поддерживать некоторые функции приложения во время автономной работы клиента. Но конечный пользователь будет периодически синхронизироваться с действующего сервера на клиентский сервер.
Мне нужен эффективный способ доступа к частной размещенной клиентской машине (SSH и Tomcat) с публичного сервера.
Настроить:
- Язык: Java 8
- Сервер приложений: Tomcat 8
- ОС: Ubuntu Linux 14.04 (как на общедоступном облаке, так и на клиентских серверах)
Насколько мне известно, ниже приведены способы и их плюсы и минусы для достижения этой цели:
- SSH обратный туннель
- Плюсы: не нужно никаких дополнительных программ
- Минусы: по мере увеличения количества клиентов необходимо открыть эти многочисленные порты на общедоступном сервере, что может вызвать много проблем с безопасностью.
- Локальные туннельные сервисы, такие как ngrock или многие другие сервисы
- Плюсы: нет необходимости в программе с ручным кодированием, и, вероятно, они бы справились со многими крайними случаями, такими как повторное подключение и поддержание соединения в активном состоянии, даже если оно простаивает большую часть времени
- Минусы: большинство из них являются коммерческими решениями, а модель ценообразования - для каждого узла. У нас будет не менее 500-600 клиентских установок.
- Веб-сокеты - Сервер отправит push, а клиент выполнит обратный вызов сервера.
- Плюсы: нет необходимости открывать несколько портов на сервере
- Минусы: возможен только HTTP, SSH невозможен
- Программирование сокетов вручную, когда каждый клиент подключается к отдельному порту на сервере через туннель SSH
- Плюсы: у нас будет полный контроль
- Минусы: я не уверен, сколько крайних случаев нам, возможно, придется обработать, среди которых мы могли бы знать многие на данный момент.
Пожалуйста, предложите лучший способ удовлетворить наши требования, учитывая эффективность использования ресурсов и безопасность.