3

Я не уверен, как это назвать (прокси / перенаправление / реле), и я надеюсь, что какое-то программное обеспечение или решение, возможно, существует для Linux.

Мое намерение состоит в том, чтобы иметь возможность прослушивать один публичный ip: порт (в частности, порт 80) и прокси (?) трафик на внутренние серверы, на которых запущены уникальные экземпляры приложений. Данные в соединении TCP будут использоваться для определения того, к какому внутреннему серверу обращаться, т.е. к какому-либо отдельному экземпляру, который должен быть подключен. Для чего потребуется некоторая форма анализа уровня 7 данных приложения и от этого прокси (?) до правильной конечной точки.

Я не смотрю на баланс нагрузки. Хотя я исследовал haproxy и подобное программное обеспечение, чтобы попытаться лучше понять мою проблему. То, что делает haproxy с точки зрения "проксирования" http-трафика с использованием информации в заголовке http, чтобы определить, к какому внутреннему серверу следует балансировать нагрузку, очень похоже на то, что я хотел бы сделать. В этом и заключается проблема, так как при поиске этого я постоянно заканчиваю тем, что нахожу что-то, что только анализирует TCP-трафик HTTP, но мне нужно что-то более общее. Или, возможно, это даже возможно с haproxy, но я не видел ничего, что указывало бы на это.

Протокол приложения, с которым я бы специально работал, - это Union, и он работает через один порт, поэтому он должен быть ретранслируемым. И опять-таки цель состоит в том, чтобы разрешить нескольким экземплярам объединения прослушивать общедоступный порт 80, хотя каждый из них, конечно, будет прослушивать внутренний адрес / порт.

Имеет ли это какой-либо смысл для кого-либо? Или я совсем не в том направлении, что хотел бы сделать. Поскольку существует очень много балансировщиков нагрузки, которые могут работать с любым протоколом, связанным с TCP, я мог бы предположить, что кто-то, возможно, сделал что-то с фильтрацией l7 и просто проигнорировал бит балансировки нагрузки.

3 ответа3

1

Звучит очень сложно. Я бы предпочел использовать программное обеспечение VPN, такое как OpenVPN. Проще настроить и использовать. Вы можете использовать порт 80 TCP для соединений OpenVPN.

1

Если у вас все в порядке с раскрытием внутренних имен хостов или IP-адресов ваших серверов, будет работать простой прокси-сервер HTTP CONNECT :

==> (connected to <proxyhost>:80)
--> CONNECT server42:<port> HTTP/1.0
--> Host: <proxyhost>
--> 
<-- HTTP/1.0 200 Connection Established
<-- Proxy-agent: Apache/2.2.19 (Debian)
<-- 
--> (client sends Union handshake as usual)

Аналогичные протоколы - это SOCKS 5 (немного более сложный) и TCPMUX (возможно, самый простой для реализации; используйте xinetd для прокси). Все три, вероятно, потребуют модификации вашей клиентской программы.

0

Решением, которое я искал, но так и не смог завершить, было использование Apache Traffic Server. Он содержит платформу для создания плагинов для любого протокола, проходящего через TCP, и проксирует трафик по вашему желанию. Их пример "протокола" плагин является хорошим учебником, чтобы увидеть, как именно вы можете легко обернуть ваш протокол в другой, специально для обратного прокси. Если бы кто-то искал подобное решение, я бы порекомендовал это (однако потребуется разработка, так как все это встроено в C).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .