Есть сервер pptpd который может принимать входящие подключения по протоколу pptp. Есть два модема: с одного производится дозвон на другой и пытается установить соединение посредством ppp протокола. На приемной стороне надо завернуть принятые от модема данные в pptp и передать их pptpd серверу. Вобщем, цепочка следующая: ppp RS232 TCP (pptp) [modem] <---> [modem] <-------> [PC] <-----> [server] (ring) (accept) (просто комп) (pptpd) Вариант, когда принимающий входящее подключение модем подключен напрямую к серверу - неприемлем (в такой бы ситуации можно было бы обойтись стандартными средствами). Как можно организовать работу подобной схемы ? pptp клиенты есть только под linux, хотелось бы сделать тоже самое под виндовсом.
Ситуация - как во времена диалапа: с одного модема производим дозвон на телефон провайдера с целью выхода в тырнет. Провайдером в данном случае выступаем мы, и тырнет - тоже наш. Между двумя модемами устанавливается обычное соединение по передаче данных. Для работы с провайдером, пользователю требуется получить IP, чтобы была возможность транспортировки TCP/UDP и прочего хлама в установленном канале, для чего используется протокол ppp. Модем пользователя производит посылку ppp пакетов в линию (телефонная/GSM или что нить др.) модем "провайдера" принимает эти пакеты. Приянтые модемом "провайдера" данные из канала передачи, считываем и заворачиваем в туннель (коим является pptp протокол) для т.ч. эти данные можно было ретранслировать через обычное IP соединение куда-нибудь до удаленного pptpd сервера, который вскрывает pptp пакет, достает из него данные ppp протокола и обрабатывает их так, как будто модем подключен непосредственно к нему (к серверу). Далее - обратная цепочка: сервер отвечает ppp пакетом, заворачивает его в pptp протокол отправляет его через IP сеть до компьютера непосредственно соединенного с модемом (по RS232), на котором из pptp пакета достаем данные ppp протокола и отправляем их в модем. Вот, как то так.
нет, тут ни какой трансляции IP пакетов не требуется. Надо просто данные из COM порта завернуть в сеть, да так, чтобы потом эти данные можно было подсунуть pppd серверу. Вот и думаю голову ломаю. Посмотрел сейчас в сторону ppp over ssh, но еще толком не разобрался как из ssh данные попадают в pppd сервер.
О, спасибо, вроде как подходит, надо только разобраться как на стороне "провайдера" обеспечить работу netcat с pppd демоном... А так - вообще замечательный вариант, ни каких серваков писать не придется.
Эх, что то я ступил, с помощью netcat невозможно разрулить несколько подключений - только одно. Вот если бы либина какая нить была кроссплатформенная для реализации pptp клиента - это бы меня спасло.
Есть, нашел то что мне надо - это L2F протокол от Cisco. Осталось найти библиотеки для работы с этим протоколом и трансляцией данных из него в pppd сервер.
Ну как это нет. Любой VPN-клиент поддерживает pptp-протокол. А их под Винды тьма, не считая родной от Микрософта.
Смотрел я это..., все клиенты уже сами по себе формируют ppp пакеты и засовывают их в сеть, т.е. я могу управлять лишь содержимым ppp - а это мне абсолютно не нужно. т.е. я имею какие то данные и эти данные мне нужно предоставить в чистом виде pppd серверу так, как если бы он их получал непосредственно из com порта от модема. Решение данной проблемы я нашел пока только одно, но оно мне не очень нравится: Есть такие девайсы com2ethernet, на стороне pppd сервера организуем ряд виртуальных com портов (на базе существующих драйверов устройств com2ethernet) с которыми этот сервер будет работать, а клиетнская часть будет фактически эмулировать работу com2ethernet устройства, но для этого нужны исходы хотябы драйвера для подобных устройств. Вай, а если по русски ??? что сей набор буков означает ? какой толк от nat ? и что являет собой слово "форвардинг" в понимании автора ?
а что мешает перенаправить данные из сетевого соединения непосредственно в com порт на принимающей стороне? схема реализации - в файерволле [на принимающей стороне] редиректишь соединение с нужного интерфейса на определённый порт, на этом порту висит простейший демон, принимающей данные и перенаправляющий их непосредственно на ком порт.
интереса ради решил подобную задачу [в моём понимании конечно] демон висит на 1234 порту; в правилах иптейблс iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 111 -j REDIRECT --to-port 1234 те все пакеты на 111 порт будут перенаправляться на 1234 порт, на котором и висит наш демон. Код (Text): #!/usr/bin/perl use IO::Socket; my $sock = new IO::Socket::INET ( Localhost =>'localhost', LocalPort =>'1234', Proto =>'tcp', Listen =>'1', Blocking =>'1',); die "error create socket: $!n" unless $sock; # для примера tty1 - наша консолька open (FD, "+>/dev/tty1") or die "can't create file: $!n"; binmode FD ; my $new_sock = $sock -> accept(); $new_sock->autoflush(1); while (<$new_sock>) { print FD $_; } close (FD); close $sock, $new_sock; те тупо принимает пакеты на 1234 порту, и пишет в файл [com порт - тоже файл]; пишет в сыром виде [те бинарные данные никак не будут интерпретироваться]. если я снова правильно понял твою проблему - то вот такое вот решение ) [хотя допилить демон ещё надо]
Спасибо, идея понятна, но не понятно следующее: на принимающей стороне где будет запущен pppd сервер работать с com портом станет невозможно, т.к. он уже захвачен демоном pppd и мы не можем его даже открыть чтобы туда писать / читать.
> с com портом станет невозможно, т.к. он уже захвачен демоном pppd и мы не можем его даже открыть чтобы туда писать / читать. мм...ты проверял?
Пока что нет, на данный момент занимаюсь несколько другими вопросами, а это, так - вынашиваю планы... проверить то надо будет обязательно. Еще думаю надо будет глянуть насчет возможности написания плагина для pppd, тогда бы это сняло все вопросы.
Посмотрел, можно расшарить доступ к ttysX, но толку от этого не прибавиться. Т.к. если сторонее (моё) приложение будет писать в этот порт, то демон pppd ничего читать то не будет из того что было мной туды записано. Т.е. я могу расшарить доступ к устройству, которое находится на ttysX, и мы оба (я и pppd) можем свободно работать с тем, что подключено к ttysX. Вот если плагин какой нить написать для pppd: типа простенького параллельного сервера, который бы принимал входящие подключения и каждая TCP сессия была бы связана с соответствующим слотом модемного пула pppd сервера. Вопрос только в том как писать эти плагины...