pptp нужен совет

Discussion in 'WASM.NETWORKS' started by Exception13, Feb 26, 2010.

  1. Exception13

    Exception13 New Member

    Blog Posts:
    0
    Есть сервер pptpd который может принимать входящие подключения по протоколу pptp.
    Есть два модема: с одного производится дозвон на другой и пытается установить соединение посредством ppp протокола. На приемной стороне надо завернуть принятые от модема данные в pptp и передать их pptpd серверу.
    Вобщем, цепочка следующая:
    ppp RS232 TCP (pptp)
    [modem] <---> [modem] <-------> [PC] <-----> [server]
    (ring) (accept) (просто комп) (pptpd)


    Вариант, когда принимающий входящее подключение модем подключен напрямую к серверу - неприемлем (в такой бы ситуации можно было бы обойтись стандартными средствами).
    Как можно организовать работу подобной схемы ?
    pptp клиенты есть только под linux, хотелось бы сделать тоже самое под виндовсом.
     
  2. loginrl_103

    loginrl_103 New Member

    Blog Posts:
    0
    а более подробно можно расписать? некоторые моменты не до конца ясны.
     
  3. Exception13

    Exception13 New Member

    Blog Posts:
    0
    Ситуация - как во времена диалапа: с одного модема производим дозвон на телефон провайдера с целью выхода в тырнет. Провайдером в данном случае выступаем мы, и тырнет - тоже наш. Между двумя модемами устанавливается обычное соединение по передаче данных. Для работы с провайдером, пользователю требуется получить IP, чтобы была возможность транспортировки TCP/UDP и прочего хлама в установленном канале, для чего используется протокол ppp. Модем пользователя производит посылку ppp пакетов в линию (телефонная/GSM или что нить др.) модем "провайдера" принимает эти пакеты. Приянтые модемом "провайдера" данные из канала передачи, считываем и заворачиваем в туннель (коим является pptp протокол) для т.ч. эти данные можно было ретранслировать через обычное IP соединение куда-нибудь до удаленного pptpd сервера, который вскрывает pptp пакет, достает из него данные ppp протокола и обрабатывает их так, как будто модем подключен непосредственно к нему (к серверу). Далее - обратная цепочка: сервер отвечает ppp пакетом, заворачивает его в pptp протокол отправляет его через IP сеть до компьютера непосредственно соединенного с модемом (по RS232), на котором из pptp пакета достаем данные ppp протокола и отправляем их в модем.
    Вот, как то так.
     
  4. loginrl_103

    loginrl_103 New Member

    Blog Posts:
    0
    а в чём собственно сложность? если верно понял - тебе нужен nat
     
  5. Exception13

    Exception13 New Member

    Blog Posts:
    0
    нет, тут ни какой трансляции IP пакетов не требуется.
    Надо просто данные из COM порта завернуть в сеть, да так, чтобы потом эти данные можно было подсунуть pppd серверу. Вот и думаю голову ломаю.
    Посмотрел сейчас в сторону ppp over ssh, но еще толком не разобрался как из ssh данные попадают в pppd сервер.
     
  6. loginrl_103

    loginrl_103 New Member

    Blog Posts:
    0
    nc/ncat ?
     
  7. Exception13

    Exception13 New Member

    Blog Posts:
    0
    О, спасибо, вроде как подходит, надо только разобраться как на стороне "провайдера" обеспечить работу netcat с pppd демоном... А так - вообще замечательный вариант, ни каких серваков писать не придется.
     
  8. Exception13

    Exception13 New Member

    Blog Posts:
    0
    Эх, что то я ступил, с помощью netcat невозможно разрулить несколько подключений - только одно.
    Вот если бы либина какая нить была кроссплатформенная для реализации pptp клиента - это бы меня спасло.
     
  9. Exception13

    Exception13 New Member

    Blog Posts:
    0
    Есть, нашел то что мне надо - это L2F протокол от Cisco. Осталось найти библиотеки для работы с этим протоколом и трансляцией данных из него в pppd сервер.
     
  10. valterg

    valterg Active Member

    Blog Posts:
    0
    Ну как это нет. Любой VPN-клиент поддерживает pptp-протокол. А их под Винды тьма, не считая родной от Микрософта.
     
  11. kyprizel

    kyprizel New Member

    Blog Posts:
    0
    на компе подними нат или форвардинг сделай и не морочь голову.
     
  12. Exception13

    Exception13 New Member

    Blog Posts:
    0
    Смотрел я это..., все клиенты уже сами по себе формируют ppp пакеты и засовывают их в сеть, т.е. я могу управлять лишь содержимым ppp - а это мне абсолютно не нужно.
    т.е. я имею какие то данные и эти данные мне нужно предоставить в чистом виде pppd серверу так, как если бы он их получал непосредственно из com порта от модема.
    Решение данной проблемы я нашел пока только одно, но оно мне не очень нравится:
    Есть такие девайсы com2ethernet, на стороне pppd сервера организуем ряд виртуальных com портов (на базе существующих драйверов устройств com2ethernet) с которыми этот сервер будет работать, а клиетнская часть будет фактически эмулировать работу com2ethernet устройства, но для этого нужны исходы хотябы драйвера для подобных устройств.

    Вай, а если по русски ??? что сей набор буков означает ? какой толк от nat ? и что являет собой слово "форвардинг" в понимании автора ?
     
  13. loginrl_103

    loginrl_103 New Member

    Blog Posts:
    0
    а что мешает перенаправить данные из сетевого соединения непосредственно в com порт на принимающей стороне?
    схема реализации - в файерволле [на принимающей стороне] редиректишь соединение с нужного интерфейса на определённый порт, на этом порту висит простейший демон, принимающей данные и перенаправляющий их непосредственно на ком порт.
     
  14. loginrl_103

    loginrl_103 New Member

    Blog Posts:
    0
    интереса ради решил подобную задачу [в моём понимании конечно]

    демон висит на 1234 порту;
    в правилах иптейблс
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 111 -j REDIRECT --to-port 1234

    те все пакеты на 111 порт будут перенаправляться на 1234 порт, на котором и висит наш демон.

    Code (Text):
    1. #!/usr/bin/perl
    2.  
    3. use IO::Socket;
    4.  
    5. my $sock = new IO::Socket::INET (
    6.  Localhost =>'localhost',
    7.  LocalPort =>'1234',
    8.  Proto =>'tcp',
    9.  Listen =>'1',
    10.  Blocking =>'1',);
    11.  
    12.  die "error create socket: $!n" unless $sock;
    13.  # для примера tty1 - наша консолька
    14.  open (FD, "+>/dev/tty1") or die "can't create file: $!n";
    15.  binmode FD ;
    16.  my $new_sock = $sock -> accept();
    17.  $new_sock->autoflush(1);
    18.  
    19.  while (<$new_sock>)
    20.  {
    21.   print FD $_;
    22.  }
    23.  close (FD);
    24.  close $sock, $new_sock;
    те тупо принимает пакеты на 1234 порту, и пишет в файл [com порт - тоже файл]; пишет в сыром виде [те бинарные данные никак не будут интерпретироваться].

    если я снова правильно понял твою проблему - то вот такое вот решение ) [хотя допилить демон ещё надо]
     
  15. Exception13

    Exception13 New Member

    Blog Posts:
    0
    Спасибо, идея понятна, но не понятно следующее: на принимающей стороне где будет запущен pppd сервер работать с com портом станет невозможно, т.к. он уже захвачен демоном pppd и мы не можем его даже открыть чтобы туда писать / читать.
     
  16. loginrl_103

    loginrl_103 New Member

    Blog Posts:
    0
    > с com портом станет невозможно, т.к. он уже захвачен демоном pppd и мы не можем его даже открыть чтобы туда писать / читать.

    мм...ты проверял?
     
  17. Exception13

    Exception13 New Member

    Blog Posts:
    0
    Пока что нет, на данный момент занимаюсь несколько другими вопросами, а это, так - вынашиваю планы... проверить то надо будет обязательно.
    Еще думаю надо будет глянуть насчет возможности написания плагина для pppd, тогда бы это сняло все вопросы.
     
  18. Exception13

    Exception13 New Member

    Blog Posts:
    0
    Посмотрел, можно расшарить доступ к ttysX, но толку от этого не прибавиться. Т.к. если сторонее (моё) приложение будет писать в этот порт, то демон pppd ничего читать то не будет из того что было мной туды записано. Т.е. я могу расшарить доступ к устройству, которое находится на ttysX, и мы оба (я и pppd) можем свободно работать с тем, что подключено к ttysX.

    Вот если плагин какой нить написать для pppd: типа простенького параллельного сервера, который бы принимал входящие подключения и каждая TCP сессия была бы связана с соответствующим слотом модемного пула pppd сервера.
    Вопрос только в том как писать эти плагины...