Доступ к клиентским машинам с общедоступного сервера в настройке клиента

В одной строке: Как подключить несколько локальных клиентских установок, имеющих частный IP и за брандмауэром, к общедоступному облачному серверу и способных вызывать конечную точку HTTP и SSH в любой локальной клиентской установке с сервера.

Подробности: у нас есть мультитенантное приложение, в котором у нас есть один действующий общедоступный (или кластерный из нескольких) сервер Tomcat, который развернут в общедоступном облаке (например, AWS). У нас также есть клиентский сервер Tomcat, который будет развернут на месте клиента, и, очевидно, локальный размещенный клиент будет иметь частный IP-адрес и будет защищен брандмауэром (что позволяет осуществлять связь через определенные порты с нашим действующим сервером).

Мы должны поддерживать локальные клиентские установки, чтобы поддерживать некоторые функции приложения во время автономной работы клиента. Но конечный пользователь будет периодически синхронизироваться с действующего сервера на клиентский сервер.

Мне нужен эффективный способ доступа к частной размещенной клиентской машине (SSH и Tomcat) с публичного сервера.

Настроить:

  • Язык: Java 8
  • Сервер приложений: Tomcat 8
  • ОС: Ubuntu Linux 14.04 (как на общедоступном облаке, так и на клиентских серверах)

Насколько мне известно, ниже приведены способы и их плюсы и минусы для достижения этой цели:

  1. SSH обратный туннель
    • Плюсы: не нужно никаких дополнительных программ
    • Минусы: по мере увеличения количества клиентов необходимо открыть эти многочисленные порты на общедоступном сервере, что может вызвать много проблем с безопасностью.
  2. Локальные туннельные сервисы, такие как ngrock или многие другие сервисы
    • Плюсы: нет необходимости в программе с ручным кодированием, и, вероятно, они бы справились со многими крайними случаями, такими как повторное подключение и поддержание соединения в активном состоянии, даже если оно простаивает большую часть времени
    • Минусы: большинство из них являются коммерческими решениями, а модель ценообразования - для каждого узла. У нас будет не менее 500-600 клиентских установок.
  3. Веб-сокеты - Сервер отправит push, а клиент выполнит обратный вызов сервера.
    • Плюсы: нет необходимости открывать несколько портов на сервере
    • Минусы: возможен только HTTP, SSH невозможен
  4. Программирование сокетов вручную, когда каждый клиент подключается к отдельному порту на сервере через туннель SSH
    • Плюсы: у нас будет полный контроль
    • Минусы: я не уверен, сколько крайних случаев нам, возможно, придется обработать, среди которых мы могли бы знать многие на данный момент.

Пожалуйста, предложите лучший способ удовлетворить наши требования, учитывая эффективность использования ресурсов и безопасность.

0 ответов

Другие вопросы по тегам