Технология реверсных соединений (reverse backconnect connections)
Вячеслав Волынец, 2010
В этой статье я расскажу немного о теории реверсных соединений, и, главное, покажу пример такой реализации - Реверсный бэк-коннект сокс сервер (Reverse back-connect socks server)
Немного теории
Классический сервер - это открытый порт, слушаемый определенной службой. Клиент подключается к открытому порту, если нужно - авторизуется, делает запрос, получает ответ.
Я хотел бы рассказать о backconnect сервере, или как его еще называют, реверсный сервер. Такой сервер порт не открывает, а подключается к открытому порту на клиенте. Звучит немного странно и непонятно, но сама эта технология не такая сложная как кажется на первый взгляд.
Итак, самый простой классический вариант:
- Есть сервер, например HTTP, без открытого порта, или без возможности открытия порта (например, за NAT'ом или Firewall'ом)
- Есть клиент, который хочет воспользоваться услугой сервера. Клиент имеет возможность открыть порт.
Сценарий их работы примерно такой:
- Серверу сообщают альтернативным способом (о нем я напишу позже), что его услугу (HTTP) ждёт клиент, имеющий адрес 192.168.1.5 и открытый порт, например, 65080
- Сервер подключается к клиенту простым TCP соединением
- Клиент принимает соединение и отправляет на сокет соединения данные для сервера, например HTTP запрос
- Сервер обрабатывает запрос и отправляет клиенту ответ
- Далее, в случае HTTP 1.0 - сервер разрывает соединение
Вопросы и ответы
Однако, на практике сценарий работы бэк-коннект сервера не так-то просто реализовать. Я, например, наткнулся на такой вопрос:
- Каким таким "альтернативным способом" сервер, не имея открытого порта, должен понимать, что ему нужно подключиться на определенный адрес клиента?
А ответ такой: использовать промежуточный сервер. Тогда сценарий будет выглядеть так:
- Есть промежуточный сервер, который без проблем может открыть порт, например, 65080 для сервера, и 80 для клиентов
- Есть сервер (HTTP), который не может открыть порт, но он знает адрес промежуточного сервера, и его "серверный" порт 65080. Он подключается к промежуточному серверу Соединением 1.
- Есть обычный клиент, например браузер
- Клиент подключается к промежуточному серверу на порт 80 Соединением 2, и делает запрос
- Далее промежуточный сервер сообщает непосредственному исполнителю запроса, подключенному на порт 65080 Соединением 1, что появился запрос, и надо-бы его отработать
- Сервер получает запрос, подключается к промежуточному серверу еще одним Соединением 3, спрашивает у промежуточного сервера запрос, отрабатывает его и отправляет ответ на промежуточный сервер
- Промежуточный сервер пересылает ответ сервера (из Соединения 3) клиенту (на Соединение 2)
- Клиент завершает соединение
Вот такой способ решает вопрос альтернативного канала связи для сервера, не имеющего возможности открыть порт. Конечно, это не догма. Можно в качестве альтернативного способа использовать, например, электронную почту - сервер в цикле 1 раз в 1 минуту проверяет ящик, а клиент, когда хочет подключиться к серверу, отправляет на этот ящик письмо со своим адресом и открытым портом.
Reverse back-connect socks server (реверсный бек-коннект сокс сервер)
На практике мы реализовали реверсный бэк-коннект сокс-сервер (Reverse back-connect socks server).

На компьютере, имеющем возможность открыть порт в качестве промежуточного сервера, запускается программа localserver (на рисунке), которая открывает 3 порта:
- для имитации socks сервера, например 1080
- для передачи команд на подключение удаленному реверсному socks серверу (1081)
- третий для для создания туннеля между удаленным соксом и промежуточным сервером (1082)
На компьютере-сервере ставится remoteclient. Он подключается к промежуточному серверу на порт 1081 и ждет команд на создание туннеля. Получив команду, создает туннель на порт 1082.
Клиентом может выступить любое приложение, работающее по протоколу SOCKS версий 4,4а,5. Настраивать такое приложение нужно на сокс [IP адрес промежуточного сервера]:1080.
Программа бесплатная и предоставлена исключительно для ознакомления с технологией работы. Если у вас появятся какие либо пожелания по усовершенствованию - пишите, звоните, обсудим.
Скачать можно здесь: reverseproxybeta.rar (пароль на архив: reverse_proxy)
5 последних твиттов
26.03.2012
Открыли так-же группу Timetable http://t.co/frGqyk8P, и ждем ваших советов, коментов
26.03.2012
Открыли группу SPS Proxy в социальной сети VK http://t.co/OAZWBp2G. Присоединяйтесь к обсуждению :)
01.03.2012
Поздравляем всех наших клиентов с первым днем весны! Желаем вам успехов во всех делах!
17.01.2012
Обновили Timetable до 1.3 - другая сетка и пользователи http://t.co/vPGHafga
01.01.2012
Всех наших клиентов и партнеров поздравляем с Новым Годом!
Есть вопросы?
Звоните +7 (701) 535-57-04
Пишите info@icode-soft.ru
Обращайтесь
slavyanya
271175
