Отправлять HTTP/S-соединения на другой сервер, обратно-обратный прокси

Я ищу часть программного обеспечения, которое я могу использовать для переадресации всех HTTP-соединений, аналогично обратному прокси-серверу. Однако, в отличие от типичного обратного прокси-сервера, сервер, перенаправляющий запросы, не может инициировать соединения с серверной частью. По сути, я пытаюсь безопасно преобразовать сервер, работающий во внутренней сети, в общедоступный сервер.

По сути, это должно работать как:

  1. Общедоступный сервер прослушивает соединение сокета с сервера внутри брандмауэра.
  2. Частный сервер подключается к публичному серверу.
  3. Затем общедоступный сервер начинает прослушивать HTTP-запросы в Интернете.
  4. Затем общедоступный сервер мультиплексирует все входящие HTTP-запросы через сокетное соединение, установленное на шаге 2, так что сервер внутри брандмауэра считает, что эти запросы поступили непосредственно к нему.

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

Спасибо!

Ответы (1)

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

Возможно, вы сможете добиться чего-то похожего на то, что хотите, запустив VPN-связь между общедоступной и частной системами и используя брандмауэр для ограничения подключений по этой ссылке, чтобы они работали только с портом, на котором работает частный веб-сервер. Переадресация портов с использованием туннеля SSH из частной системы в общедоступную будет самым простым способом сделать это. Что-то вроде следующего даст вам туннель и переадресацию портов:

ssh -R 127.0.0.1:8888:127.0.0.1:80 -N user@public

И тогда вы можете иметь что-то вроде nginx в общедоступной системе, просто указав на него 127.0.0.1:8888как на вышестоящий сервер.

Все это в стороне, вы можете слишком много думать об этом. Если ваша общедоступная система находится в надлежащей изолированной сети DMZ, и у вас есть какой-либо удаленно приличный маршрутизатор и брандмауэр, вы можете легко ограничить эту общедоступную систему подключением только к точному порту, необходимому во внутренней системе, что даст вам довольно много. точно такой же уровень безопасности, как если бы вы делали то, о чем вы говорите.

Извините за очень поздний ответ. Согласен, это преувеличение, но мой работодатель говорит, что так и должно быть. Туннель SSH, кажется, удовлетворяет мои потребности. Спасибо!