URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4167
[ Назад ]

Исходное сообщение
"Место встречи двух клиентов, сидящих за НАТами."

Отправлено Tim , 11-Апр-05 12:04 
Написали софтинку для работы руководства с персоналом (ремот админ по сути). Но на практике оказалось что и руководство и персонал сидят за НАТом. Ни там, ни там преодолеть это условие нельзя (разные провайдеры, дебилы в службе поддержки). Поэтому требуется програмное решение. (Пробросить порт на НАТе не предлагать, это решение уже отмели).

Кто-нить писал такое? Какие-нить идеи?

p.s. пока что думаю написать некое подобие прокси (на яве, из удобства). будет принимать соединение с одного из концов, ставить его в стек, когда придет соединение с другой стороны начнет в цикле передавать траффик с одного соединения на другое и обратно.


Содержание

Сообщения в этом обсуждении
"Место встречи двух клиентов, сидящих за НАТами."
Отправлено SergeiZz , 11-Апр-05 13:36 
>Кто-нить писал такое? Какие-нить идеи?
Если на обоих шлюзах Web серверы; клиенты из-за NAT обращаются к
виртуальному хосту по SSL; срабатывает сценарий на Perl, Ruby (PHP, eRuby),
который устанавливает соединение в локальную сеть.
По сравнению с прокси преимущества будут, если на Web сервер переносится
часть функциональности, иначе разница не велика (механизм сессий, например,
реализовывать самому не так уж и долго), да и обмен данными будет по HTTP.

>p.s. пока что думаю написать некое подобие прокси (на яве, из удобства).
>будет принимать соединение с одного из концов, ставить его в стек,
>когда придет соединение с другой стороны начнет в цикле передавать траффик
>с одного соединения на другое и обратно.
Клиент соединяется с прокси; прокси клонирует себя для поддержки клиента;
клон дозванивается в локальную сеть и читает-пишет туда-сюда (есть
несколько стандартных схем для читать-писать).
Если писать на Ruby, то на Gserver минут эдак за 15-20 можно набросать
работоспособную версию (с пулом потоков, журналированием, et caetera).
На Java, думаю тоже есть столь же крутая библиотека.


"Место встречи двух клиентов, сидящих за НАТами."
Отправлено Tim , 11-Апр-05 14:16 
>>p.s. пока что думаю написать некое подобие прокси (на яве, из удобства).
>>будет принимать соединение с одного из концов, ставить его в стек,
>>когда придет соединение с другой стороны начнет в цикле передавать траффик
>>с одного соединения на другое и обратно.
>Клиент соединяется с прокси; прокси клонирует себя для поддержки клиента;
>клон дозванивается в локальную сеть и читает-пишет туда-сюда (есть
>несколько стандартных схем для читать-писать).

Клон не сможет получить доступ во внутреннюю сеть. Сеть за НАТом.

Моя схема предполагает третью сторону:

[Админ]---[НАТ1]-->[proxy]<--[НАТ2]---[Клиент]


"Место встречи двух клиентов, сидящих за НАТами."
Отправлено SergeiZz , 11-Апр-05 15:10 
>Моя схема предполагает третью сторону:
>
>[Админ]---[НАТ1]-->[proxy]<--[НАТ2]---[Клиент]
Это не прокси тогда, а сервер.
Админ тогда просто привилигерованным клиентом становится.

Я думал, есть клиент и сервер, работающие в локальной сети, а нужно одного
из них вытащить за NAT.
А тут что за прокси такой?


"Место встречи двух клиентов, сидящих за НАТами."
Отправлено StSphinx , 11-Апр-05 13:49 
>Написали софтинку для работы руководства с персоналом (ремот админ по сути). Но
>на практике оказалось что и руководство и персонал сидят за НАТом.
>Ни там, ни там преодолеть это условие нельзя (разные провайдеры, дебилы
>в службе поддержки). Поэтому требуется програмное решение. (Пробросить порт на НАТе
>не предлагать, это решение уже отмели).
>
>Кто-нить писал такое? Какие-нить идеи?
>
>p.s. пока что думаю написать некое подобие прокси (на яве, из удобства).
>будет принимать соединение с одного из концов, ставить его в стек,
>когда придет соединение с другой стороны начнет в цикле передавать траффик
>с одного соединения на другое и обратно.

Чем плохи уже готовые решения - desproxy, stunnel ?


"Место встречи двух клиентов, сидящих за НАТами."
Отправлено Tim , 11-Апр-05 14:19 
>Чем плохи уже готовые решения - desproxy, stunnel ?

Ещё не знаю. Счас сижу читаю их описания, но что-то мне подсказывает что эти решения не для моего случая. Я ищу решение с применением третьей стороны т.к. хоть убей не понимаю как 2 клиента из-за НАТа могу содиниться напрямую. Установка какого либо софта у клиентов исключена.


"Место встречи двух клиентов, сидящих за НАТами."
Отправлено SergeiZz , 11-Апр-05 15:29 
>Я ищу решение с
>применением третьей стороны т.к. хоть убей не понимаю как 2 клиента
>из-за НАТа могу содиниться напрямую.
Напрямую -- никак, на то NAT и нужен.

>Установка какого либо софта у клиентов
>исключена.
Дошло. То есть нужен промежуточный сервер.
Так, есть сервер (proxy) к нему подключаются клиенты, сервер идентифицирует
соединения по номерам портов, и пишет-читает. Жаль только, что ему придётся
ждать пока оба партнёра подключатся.
Но такая схема не похожа на Радмин? Чтобы управлять клиентом, сервер должен
дождаться, когда тот захочет стать управляемым. Это приемлемо?


"Место встречи двух клиентов, сидящих за НАТами."
Отправлено MaximKuznetsov , 11-Апр-05 18:55 
>>Чем плохи уже готовые решения - desproxy, stunnel ?
>
>Ещё не знаю. Счас сижу читаю их описания, но что-то мне подсказывает
>что эти решения не для моего случая. Я ищу решение с
>применением третьей стороны т.к. хоть убей не понимаю как 2 клиента
>из-за НАТа могу содиниться напрямую. Установка какого либо софта у клиентов
>исключена.
  да, остается только третья сторона ;-)
  если есть возможность изменения кода клиентов, то в качестве третьей стороны можно поставить jaber (или irc или что-то подобное)..но придется переделывать протоколы обмена и авторизации..
  Если же есть желание сделать собственный сервер под свои нужды,
(и не желательно трогать клиентов) то поискать в сети тексты на тему man-in-the-middle, с минимальными переделками (по поводу соединений) должно подойти.

P.S. кстати стоило бы в теме добавить по каким протоколам идет обмен.


"Место встречи двух клиентов, сидящих за НАТами."
Отправлено Tim , 12-Апр-05 07:06 
>  да, остается только третья сторона ;-)
>  если есть возможность изменения кода клиентов, то в качестве третьей
>стороны можно поставить jaber (или irc или что-то подобное)..но придется переделывать
>протоколы обмена и авторизации..
>P.S. кстати стоило бы в теме добавить по каким протоколам идет обмен.
>


Решил пойти по этому пути (после того как прочитал про Джаббер).
Т.е. пишу сервер передачи сообщений.
Ессно клиентские тулзы придется полностью переписывать... а что делать?

Вопрос - как хранить информацию на сервере? Информация это: координаты мышки, коды клавы, снимки экрана (т.е. может быть и объемной). Запихивать это в базу - долго... Держать в памяти?


"Место встречи двух клиентов, сидящих за НАТами."
Отправлено Moralez , 14-Апр-05 10:27 
не проще на выделенном сервере поднять vpn и цепляться из-за НАТа и там уже имея серые IP-ы работать как угодно... тогда вообще не надо писать никакой софт... vpn-сервер использовать TCP-based, а не GRE/ESP/итп....

"Место встречи двух клиентов, сидящих за НАТами."
Отправлено Tim , 14-Апр-05 11:11 
>не проще на выделенном сервере поднять vpn и цепляться из-за НАТа и
>там уже имея серые IP-ы работать как угодно... тогда вообще не
>надо писать никакой софт... vpn-сервер использовать TCP-based, а не GRE/ESP/итп....

Это опять же требует определенных действий со стороны пользователей. А они идиоты. Администратор иногда объясняет куда на сайте нужно ткнуть мышкой.... А вы VPN!

Хотя решение интересное. Попробую из чисто спортивного интереса.