Сообщение от
ShAnKaR
через промежуточный процесс можно сделать- тоесть запускаем к примеру perl скрипт на сервере делаем fork и он висит сколько надо либо уже руководствуясь другими ограничениями. общается по tcp с тем чем надо и паралельно с php скриптом
Понял твою идею, она хороша, но мне она, к сожалению, не подходит. Попробую объяснить, почему. Имеется такая схема:
A - клиентская машина.
B - файрволл.
C[1;n
] - кластер веб-серверов (для снижения нагрузки).
Файрволл B является шлюзом для кластера C. К нему у меня доступа нет.
Пытаюсь рассужать логически, как идет трафик от А к С(n). Судя по всему, на В две сетевые карты, В1 и В2. В1 смотрит во внешку, а В2 - во внутреннюю сеть, в которой помимо кластера С находятся еще кластер с базой данных и NFS-серверы. Внутри сети трафик не фильтруется никак, при попытке обратиться во внешку - пакеты попадают на В2, на котором режется все, кроме транзитного трафика на 80 порт ТСР в обе стороны (видимо, админы недоглядели), который свободно уходит из внутренней сети во внешку. На файрволле стоит прокси (судя по всему - сквид), который смотрит во внешку на интерфейсе В1 на 80 порту и прозрачно форвардит запросы на случайно выбранный сервер из кластера С. Наличие прокси проверено опытным путем. На В1 фильтруется весь входящий трафик, кроме того, что идет на 80 ТСР. Также есть такая вероятность, что сквид стоит на одной из машин во внутренней сети, а с В1 на него трафик просто натится.
Итак, я с машины А браузером обращаюсь на В и вижу страницу с C(n), где n - случайным образом выбранная машина из кластера С. Все машины в кластере настроены одинаково, DocumentRoot на всех - это примонтированная директория одного NFS-сервера. У меня есть доступ к С через веб-шелл, с правами пользователя виртуального хостинга. Допустим, мне необходимо проксировать все свои запросы во внутреннюю сеть (к примеру, я хочу подключиться по ssh на одну из машин) - для этого мне нужна постоянная сессия. Почему я не могу при этом воспользоваться твоим советом - ты, думаю, понял. Поднимать демона на perl на каждом сервере из кластера для общения с ним через php скрипт, который будет доступен через веб-морду - это не вариант, так как для постоянной сессии придется реализовывать довольно непростой интерфейс для общения демонов на разных машинах в кластере между собой - что-то вроде RPC с блэкджеком и печеньками.
Можно, конечно, поступить совсем просто - сделать бэкконнект с одной из машин кластера на 80 порт ТСР своей тачки, но вся проблема в том, что под рукой нет машин с белым ипом и свободным 80 портом. Отсюда вытекает еще одна идея - грубо говоря, на третьей стороне на веб-интерфейсе будет php скрипт, на который периодически будет стучать демон с оного из серверов кластера, оставлять свой out и получать задания. Php скрипт, в свою очередь, при каждом выполнении будет транслировать out на прослушиваемый на моем компе порт и брать задания с этого же порта. Но эта идея обречена на провал - скорость каждого "пакета" в такой "сессии" будет измеряться десятками секунд, и если попробовать завернуть в такую RPC (а это именно она) обычный tcp трафик (чего я и хочу первоначально добиться) - то это будет просто смешно.
В общем, у меня такое впечатление, что кроме бэкконнекта в моем случае ничего сделать не получится. Может, я где-то заблуждаюсь, и все-таки можно что-то придумать, используя те идеи, которые реализованы в топике?