Перейти до

VPN Поддержка ? будет -ли ?


Гость Гость_Denis

Рекомендованные сообщения

Гость Гость_Denis

VPN Поддержка ? в планах есть, а будет -ли ?

Может возможно ввести / убрать понятие ИНТЕРФЕЙС в конфиге пользователя ?

или например понимать маски интерфейса - /dev/ppp*

:)

Ссылка на сообщение
Поделиться на других сайтах
  • 4 weeks later...
  • Відповіді 65
  • Створено
  • Остання відповідь

Top Posters In This Topic

Гость Гость_I_Destr

Поддерживаю предыдущего оратора! :D

 

Если писать полноценный биллинг (которым хотелось бы видеть СТГ1/2), то туда просто НЕОБХОДИМО включить ВПН!

 

Кроме того, было бы просто замечательно включить также модуль повременного пользования инетом. Можете со мной не согласиться, что мол, есть всякие радиусы и прочая лабудень, но очень хотелось бы работать с ЕДИНОЙ БИЛЛИНГОВОЙ СИСТЕМОЙ, а не собирать все по кускам :D

Ссылка на сообщение
Поделиться на других сайтах
Если писать полноценный биллинг (которым хотелось бы видеть СТГ1/2), то туда просто НЕОБХОДИМО включить ВПН!

Если всеже кому интересно видеть ВПН, давайте совместно примем усилия, например на исходниках СТГ1, там только интерфейсы по маске слушать, например ppp*. Или вообще от прослушивания отказаться и наваять внешний модуль к pppd, что-бы заливал статистику непосредственно в СТГ, но это ИМХО надо делать в цикле (например раз в 2-5 минут), кто с АПИ ПППД близко общался? В заключение еще базу пользователей в SQL перенести :D и будет тот самый НАТУР ПРОДУКТ о котором мечты.

 

P.S. Билинг в первую голову должен отвечать требованиям безопасности ПОТРЕБЛЕНИЯ трафика, другими словами что-б трафик (деньги) не перли.

При системе открытой сети, пусть и с авторизацией, никто не мешает прописать "хакеру" ИП и МАК того кто уже зарегистрировался в сети, и жрать его трафик по малу :) или по многу - в зависимости от настроения.

 

С ВПН такая схема невозможна, у каждого свой интерфейс, а доступ пользователей можно регулировать добавлением/удалением ЛОГИН, ПАРОЛЬ,ИП в chap-secret например.

 

В общем - кому интересна данная теме - пишите, вместе чего либо сваяем.

Ссылка на сообщение
Поделиться на других сайтах
С ВПН такая схема невозможна, у каждого свой интерфейс, а доступ пользователей можно регулировать добавлением/удалением ЛОГИН, ПАРОЛЬ,ИП в chap-secret например.

Ты в курсе как можно собирать статистику с ВПН-сервера? Как выглядит эта статистика?

Если получится сделать сбор стаитстики с ВПН, скажем раз в минуту, то не проблема прикрутить это к стг.

Ссылка на сообщение
Поделиться на других сайтах

Для того что бы собирать статистику с VPN или PPoE что IMHO удобнее надо писать Radius Server, а именно плагин к StarGazer чтоб он являлся Radius Server. Что в принципе удобно и красиво... Но потребует значительных затрат времени помойму пока это не актуально, имеет смысл довести текущии режимы до нормальной работоспособности.

Ссылка на сообщение
Поделиться на других сайтах
Ты в курсе как можно собирать статистику с ВПН-сервера? Как выглядит эта статистика?

Если получится сделать сбор стаитстики с ВПН, скажем раз в минуту, то не проблема прикрутить это к стг.

Да, я смотрел примеры плагинов для ПППД, он понимает , там есть реализация опроса. Я попозднее соберу все что у меня есть по данному поводу и кину тебе в мыло.

 

Пока приведу пару ссылк:

http://www.chelcom.ru/~anton/projects/pppd-stacker/

http://linux.uatel.net.ua/soft/ppp/ppp-verbose.phtml

http://nsg.net.ru:8100/Lists/nsg-linux/Message/237.html

http://nsg.net.ru:8100/Lists/nsg-linux/Message/232.html

http://nsg.net.ru:8100/Lists/nsg-linux/Message/234.html

http://freshmeat.net/projects/pppd-tacacsradius/

http://packages.debian.org/unstable/net/pppdcapiplugin.html

мжно пйти и таким путем:

http://nibs.net.ua/src/radpppd/radpppd.tgz

http://nibs.net.ua/src/radpppd/

http://shs.sumy.ua/cgi-bin/index.cgi?actio...rch&type=recent

Ссылка на сообщение
Поделиться на других сайтах
Да, я смотрел примеры плагинов для ПППД, он понимает , там есть реализация опроса. Я попозднее соберу все что у меня есть по данному поводу и кину тебе в мыло.

Вообще IMHO писать свой плагин вместо того чтобы воспользоватся уже говтовым протоколом(Radius) изврат... Radius именно для этого и предназначен.

Ссылка на сообщение
Поделиться на других сайтах
Если получится сделать сбор стаитстики с ВПН, скажем раз в минуту, то не проблема прикрутить это к стг.

В догонку - за основу подхода к проблеме можно взять плагин к пппд:

http://www.chelcom.ru/~anton/projects/pppd-tacacs+radius/

http://www.chelcom.ru/~anton/projects/file...us-1.4.1.tar.gz

и собственно изменить формат слива статистики (аккоунтига), + повыкидывать лишнее, приципить к СТГ килялку процесса ПППД с 0 или отрицательным балансом...

:vah: (на первый взгляд)

Ссылка на сообщение
Поделиться на других сайтах

Народ, извините за неграмотность, но вы можете мне сказать, что такое радиус, где про него почитать, и с чего вдруг радиус имеет отношение к сбору статитсики с впн?

Ссылка на сообщение
Поделиться на других сайтах

Вот тут достаточно внятное и простое объяснение что такое Radius и TACACS+. Вообще Radius это протокол для учета и аутентификации пользователей подписанных на услуги.

А отношение к VPN он имеет потомучто VPN использует pppd для которого существует плагин radius_client.o. Дальше описывать не буду в линке ниже приведен некий алгоритм работы pppd, радиус клиента и радиус сервера в связке.

 

http://www.lanbilling.ru/radius_tacacs.html

Ссылка на сообщение
Поделиться на других сайтах
А отношение к VPN он имеет потомучто VPN использует pppd для которого существует плагин radius_client.o.

Ну а зачем париться с этй тулзой и внедрять протокол радиуса в СТГ.

Ты сам написал ответ - "отношение к VPN он имеет потомучто VPN использует pppd для которого существует плагин radius_client.o"

- кстати плагинов к ПППД намного болеше, т третьих разработчиков.

 

Так надо наваять собственный плагин, с протоколом к СТГ, тем более что исходники есть, там все довольно просто.

Ссылка на сообщение
Поделиться на других сайтах

den68

А вот интересно в "поддержку VPN" вкладывается понятие авторизации или нет, судя по предложению добавлять в chap-secret нет?

Никто не спорит что написать свой плагин можно... Но можно подстраиватся под принятые стандарты которые позволят интегрироватся нам не только с pppd, а можно воять свое. Все _развитые комерчиские биллинговые системы_ имеют Radius Server. Почему же тогда нужно изобретать велосипед, когда протокол Radius хорошо описан, стандартизирован и нет абсолютно никакой гарантии что мы придумаем что-то лучше.

Также kill ppp c 0 абсолютно не рулит. Просто надо отрубать пользователя плагином.

 

С ВПН такая схема невозможна, у каждого свой интерфейс, а доступ пользователей можно регулировать добавлением/удалением ЛОГИН, ПАРОЛЬ,ИП в chap-secret например.

И вообще насчет этого тоже очень спорно учитывая что вопервых насколько я смотрел есть понятие keepalive в старгейзере.

А еще ты себе представляеш что будет если два юзвера с одинм IP появится в сети? Работать просто не сможет не один не другой. ВПН даже с секурными паролями ломается не сильно сложнее чем текущее состояние старгейзера. Другой вопрос что у клиента посуществу всегда прямо с операционной системой есть клиент, и это действительно очень удобно. Плюс можно на сервере сделать выдачу реальных IP адресов. Потому я за ВПН, но счетаю что имеет смысл отложить это скажем на третий релиз.

Ссылка на сообщение
Поделиться на других сайтах
А еще ты себе представляеш что будет если два юзвера с одинм IP появится в сети? Работать просто не сможет не один не другой.

А за чем в схеме с ВПН иметь одинаквые IP, и впрос весьма спорный - как заламать ВПН при правильн поднятом файрволе между входным и выходным (ппп) интерфейсами. А тот факт что могут появиться два пользвателя с одним ИП в принципе исключен самой схемомой реализации:

например пптпд или выделяет адрес из пула адресов, соответственно два раза один и тотже адрес он выделить не сможет, или адреса жестко привязаны к логину и паролю в файле *ap-secrets - что тоже исключает двойное назначение.

И ествено поскольку линк Поинт-ту-Поинт пользователь не может поменять адрес на выходном интерфейсе, и т.д.

Ссылка на сообщение
Поделиться на других сайтах
А за чем в схеме с ВПН иметь одинаквые IP

Это относилось к фразе, что в Старгейзере очень легко подломать защиту сменой IP адреса и MAC адреса, я какраз и говорил что в локальной сети это не возможно и потому подмена не произойдет, а если компьютер выключен то соответсвенно не работает авторизатор StarGazer и потому подмена нечего не даст.

 

Потому как бы то что ты говориш и так очевидно. Текущая реализация StarGazer с авторизацией не проще в зломе чем VPN.

А защищенность VPN никак не звязанна с фаирволом.

Ссылка на сообщение
Поделиться на других сайтах
  • 3 weeks later...

Вопрос к любителям ВПН.

 

1. Как вы представляете работу СТГ + ВПН? Как используетс авторизатор и используется ли вообще?

 

2. Какими средствами авторизуется пользователь ВПН?

 

3. Можно ли написать прогу или скрипт, которая обращаясь к радиусу или еще к кому-то могла сказать такое: "пользователь такокй-то скачал столько-то начиная с такого-то времени по таким-то направлениям"?

 

Если п.3 реализуем, я сделаю поддержку ВПН в СТГ.

Ссылка на сообщение
Поделиться на других сайтах
Вопрос к любителям ВПН.

 

1. Как вы представляете работу СТГ + ВПН? Как используетс авторизатор и используется ли вообще?

 

2. Какими средствами авторизуется пользователь ВПН?

 

3. Можно ли написать прогу или скрипт, которая обращаясь к радиусу или еще к кому-то могла сказать такое: "пользователь такокй-то скачал столько-то начиная с такого-то времени по таким-то направлениям"?

 

Если п.3 реализуем, я сделаю поддержку ВПН в СТГ.

ПО пункту 3 - связка pptpd + pppd + плагин для pppd pppd_radius + *radius server.

тлько завязываться на всю эту мутоту вместе ИМХО не имеет смысла при прикручивании к СТГ.

Уж больно мнго разнообразного (кривоватого) софта (Радиус имелся в виду).

1. pptpd - собственно слушает порт 1723 и поднимает pppd.

2. в pppd происходит авторизация присвоение ИП итд, на сновании файла pap-secret или chap-secret, или через pppd_radius плугин путем запроса у радиус сервера.

3. Радиус сервер поддерживает верефикацию клиента на момент коннекта, аккаунтинг по времени, трафику итд. - но имеет ИМХО не чень удобный конфиг и вывод информации.

 

2.а pppd_radius - собственно вот этот плагин и надо переписать под протокол общения с СТГ.

Ссылка на сообщение
Поделиться на других сайтах
ПО пункту 3 - связка pptpd + pppd + плагин для pppd pppd_radius + *radius server.

тлько завязываться на всю эту мутоту вместе ИМХО не имеет смысла при прикручивании к СТГ.

Уж больно мнго разнообразного (кривоватого) софта (Радиус имелся в виду).

1. pptpd - собственно слушает порт 1723 и поднимает pppd.

2. в pppd происходит авторизация присвоение ИП итд, на сновании файла pap-secret или chap-secret, или через pppd_radius плугин путем запроса у радиус сервера.

3. Радиус сервер поддерживает верефикацию клиента на момент коннекта, аккаунтинг по времени, трафику итд. - но имеет ИМХО не чень удобный конфиг и вывод информации.

 

2.а pppd_radius - собственно вот этот плагин и надо переписать под протокол общения с СТГ.

Так, ща я поясню как я вижу себе все стыковку.

 

1. Есть авторизатор. Клиент коннектится. На сервере выполняется скрипт онконект, в нем происходит подъем pppd (я верно мыслю?)

 

2. Часть сервера stg, ответственная за подсчет трафика остановлена и не работает.

 

3. Кто-то собирает статистику о трафике (радиус?).

 

4. Раз в минуту (5, 10 ...) вызывается скрипт, который каким-то боком (это моя проблема каким) передает информацию о статистике серверу стг.

 

5. сервер снимает деньги на основании переданной ему статистики, и если денег не стало, вызывает ondisconnect, в котором кладет pppd.

 

 

Вот, в этой схеме меня интересует можно ли в скриптах onconnect и ondisconnrct выполнить установление и разрыв впн-соединения?

Ссылка на сообщение
Поделиться на других сайтах
pppd_radius - собственно вот этот плагин и надо переписать под протокол общения с СТГ.

В принцепе вполне реально.

 

А стыковка должна выглядить примерно так не суть важно RADIUS протокол мы используем или нет:

1. Клиент коннектится по PPTP соответсвенно запускается pppd который стартует плагин(RADIUS CLIENT или СТГ CLIENT). Плагин в свою очередь производит запрос проверки пришедшего ему логин и пароля по ppptp. Для этого он как и авторизатор посылает запрос СТГ Server. В ответ СТГ дает разрешение на установление связи или нет соответсвенно.

2. Допустим авторизация прошла. Дальше наш плагин скидывает статистику с интерфейса СТГ server который обрабатывает ее штатным порядком.

 

Так, ща я поясню как я вижу себе все стыковку.

 

Предложенная схема не совсем верна.

 

1. Есть авторизатор. Клиент коннектится. На сервере выполняется скрипт онконект, в нем происходит подъем pppd (я верно мыслю?)

Авторизатор в том виде как он сейчас есть в СТГ вообще не нужен для VPN. Поскольку инициатор VPN соединения является клиент(можно конечно и извернутся :-)) и при установлении соединения он передает логин и пароль. Тогда задача каким-то макаром дать возможность демону pppd проверить логин и пароль средствами СТГ. Штатно как правильно сказал den68 это либо два plaintext файла papsecret и chapsecret или соответсвенно некий плагин.

 

2. Часть сервера stg, ответственная за подсчет трафика остановлена и не работает

 

ХЗ возможно и можно прослушивать ppp интерфейс... Тогда теор можно обойтись без пункта 3-и. На днях потестю. Но 100% если использовать libipq то можно статистику снимать файрволом с интерфейсов ppp*.

 

3. Кто-то собирает статистику о трафике (радиус?).

Статистику должен собирать СТГ. Использовать внешний Radius Server врятле получится да и криво.. Потому в СТГ просто придется дописать модуль который и будет собственно Radius server-ом ну или сервером СТГ протокола для сбора статистики.

 

 

Вот, в этой схеме меня интересует можно ли в скриптах onconnect и ondisconnrct выполнить установление и разрыв впн-соединения? 

 

Убить соединение конечно можно :-) Например убив pppd. При наличии плагина это проще. Установить соединение нельзя по преведенной выше проблемме.

Ссылка на сообщение
Поделиться на других сайтах

1. Есть авторизатор. Клиент коннектится. На сервере выполняется скрипт онконект, в нем происходит подъем pppd (я верно мыслю?)

 

2. Часть сервера stg, ответственная за подсчет трафика остановлена и не работает.

 

3. Кто-то собирает статистику о трафике (радиус?).

 

4. Раз в минуту (5, 10 ...) вызывается скрипт, который каким-то боком (это моя проблема каким) передает информацию о статистике серверу стг.

 

5. сервер снимает деньги на основании переданной ему статистики, и если денег не стало, вызывает ondisconnect, в котором кладет pppd.

 

 

Вот, в этой схеме меня интересует можно ли в скриптах onconnect и ondisconnrct выполнить установление и разрыв впн-соединения?

1. - Авторизатор ИМХО можно не испльзовать, (или переделать его под запуск созданнго ВПН соеденения). Все необхдимое для поднятия ВПН есть в любых Вин и Юникс платфрмах. Детальн описано например:

http://spacegate.com.ua/rus/install/vpnwin9x.html

 

2. Сервер должен запускать сеанс pppd при обращении - стветственно слушать порт 1723

 

3. Статистику должен сбирать СТГ, с помощью плагина к pppd. За оснву для изготовления плагина мжно взять ppp_radius плагин.

Он с заданной передичнстью может сливать информацию о времени и трафике в СТГ. В принципе проще взять пакет pppd и ознакомиться с файлом PLUGINS в крневой деректории, там описано API взаимотношений pppd и возможных плагинов, есть примеры.

P.S. Кстати, при этом подходе возможно использвать СТГ как билинг и для Dial-Up!

 

4.5. Убивать pppd по пиду через тот-же плагин. Кстати, там есть сответствующая функция.

Ссылка на сообщение
Поделиться на других сайтах

(или переделать его под запуск созданнго ВПН соеденения)

А почемуб просто тогда не создать это соединение на лету? Все параметру у авторизатора есть. Только не вижу я смысла вообще в авторизаторе. ВПН соединение вот вам и авторизатор.

 

2. Сервер должен запускать сеанс pppd при обращении - стветственно слушать порт 1723

Это делает и так демон ppptp все заапустит.

И конечно если будет написан плагин то можно будет счетать и DialUp.

 

Вот в общем то о чем я толкую. Но у этой системы в текущем состоянии есть для меня большой недостаток, она не умеет счетать трафик, да еще и написана python.

 

http://ibs.sourceforge.net/

Ссылка на сообщение
Поделиться на других сайтах

Для страждущих, наваял тут патч для pptpd, теперь можно VPN прикрутить к текущему СТГ без глобальных переделок.

 

Смысл патча:

- привязка номера ppp интрфейса к IP адресу

 

Пример: наружная сеть: 10.0.100.0

Внутренняя сеть: 192.168.90.0 (где живет СТГ)

DHCPD выдает адреса для сети 10.0.100.0 идентичные по последней цифре с сетью 192.168.90.0, например:

 

Пользователь прописан в СТГ с IP адресом 192.168.90.77, как следствие, интерфейс для подсчета трафика ему прописывается ppp77.

DHCPD должен выдавать ему IP адрес во внешней сети 10.0.100.77

в CHAP-SECRET в директории /etc/ppp/ соответственно заноситься

 

<логин СТГ> * <пароль СТГ> 192.168.90.77

 

как следствие, ему при установлении ВПН соеденения присваивается ИП 192.168.90.77 внутренней сети, а интерфейс в результате применения патча становиться ppp77 - СТГ считает трафик.

 

При тестах использовались:

pptpd 1.2.1

pppd 2.4.2

mppe pppd + kernel 2.4.26 patch (не обязательно)

stargazer-1 (последний релиз (бета ?))

 

Сам патч: (pptpd 1.2.1)

 

*** /INSTALL/PPTPD/pptpd-1.2.1/pptpctrl.c	Tue Aug 10 17:55:12 2004
--- /INSTALL/PPTPD-PATCH/pptpd-1.2.1/pptpctrl.c	Thu Aug 12 23:56:24 2004
***************
*** 101,112 ****
 {
 	char pppLocal[16];  /* local IP to pass to pppd */
 	char pppRemote[16];  /* remote IP address to pass to pppd */
 	struct sockaddr_in addr;	/* client address */
 	socklen_t addrlen;
 	int arg = 1;
 	int flags;
 	struct in_addr inetaddrs[2];
!  char *pppaddrs[2] = { pppLocal, pppRemote };
 
         gargc = argc;
         gargv = argv;
--- 101,115 ----
 {
 	char pppLocal[16];  /* local IP to pass to pppd */
 	char pppRemote[16];  /* remote IP address to pass to pppd */
+  char ConnectIP[16];  /* Connect IP address to pass to pppd */
+ 
 	struct sockaddr_in addr;	/* client address */
 	socklen_t addrlen;
 	int arg = 1;
 	int flags;
 	struct in_addr inetaddrs[2];
! //	char *pppaddrs[2] = { pppLocal, pppRemote };
!  char *pppaddrs[3] = { pppLocal, pppRemote, ConnectIP };
 
         gargc = argc;
         gargv = argv;
***************
*** 183,190 ****
 	signal(SIGTERM, &bail);
 	NOTE_VALUE(PAC, call_id_pair, htons(-1));
 	NOTE_VALUE(PNS, call_id_pair, htons(-1));
! 
 	syslog(LOG_INFO, "CTRL: Client %s control connection started", inet_ntoa(addr.sin_addr));
 	pptp_handle_ctrl_connection(pppaddrs, inetaddrs);
 	syslog(LOG_DEBUG, "CTRL: Reaping child PPP[%i]", pppfork);
 	if (pppfork > 0)
--- 186,198 ----
 	signal(SIGTERM, &bail);
 	NOTE_VALUE(PAC, call_id_pair, htons(-1));
 	NOTE_VALUE(PNS, call_id_pair, htons(-1));
! /*
! !!!!!!!!!!!!!!!!! Insert CONNECT address !!!!!!!!!!!!!!!!!!!!!!
! */
 	syslog(LOG_INFO, "CTRL: Client %s control connection started", inet_ntoa(addr.sin_addr));
+  //
+  inetaddrs[2] = addr.sin_addr;
+  //
 	pptp_handle_ctrl_connection(pppaddrs, inetaddrs);
 	syslog(LOG_DEBUG, "CTRL: Reaping child PPP[%i]", pppfork);
 	if (pppfork > 0)
***************
*** 374,379 ****
--- 382,390 ----
                                       inet_ntoa(inetaddrs[1]),
                                       ntohs(((struct pptp_out_call_rply *) (rply_packet))->call_id_peer),
                                       ntohs(((struct pptp_out_call_rply *) (rply_packet))->call_id));
+ /*
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     startCall     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
+ */
 
     if ((pty_fd = startCall(pppaddrs, inetaddrs)) > maxfd)
     	maxfd = pty_fd;
***************
*** 595,600 ****
--- 606,614 ----
 #elif clientSocket > 1
   close(clientSocket);
 #endif
+ /*
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! launch_pppd !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ */
   launch_pppd(pppaddrs, inetaddrs);
   syslog(LOG_ERR, "CTRL: PPPD launch failed! (launch_pppd did not fork)");
   _exit(1);
***************
*** 620,625 ****
--- 634,641 ----
 {
 	char *pppd_argv[14];
 	int an = 0;
+  char m[4][4]; // = {'\0','\0','\0','\0'};
+  int z = 0; 
 	sigset_t sigs;
 
 	pppd_argv[an++] = ppp_binary;
***************
*** 739,744 ****
--- 755,775 ----
                  pppd_argv[an++] = inet_ntoa(inetaddrs[1]);
         }
 
+ /*
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! PPP-INTERFACE OCTET !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ */
+  
+  z = sscanf(inet_ntoa(inetaddrs[2]), "%s.%s.%s.%s", m[0], m[1], m[2], m[3]);
+  if ( z > 0 )
+  { 
+  	pppd_argv[an++] = "unit";
+  	pppd_argv[an++] = m[3];
+  	syslog(LOG_DEBUG, "CTRL (PPP-INTERFACE OCTET): ( planed: ppp%s )", m[3]);
+  } else {
+  	syslog(LOG_DEBUG, "CTRL (PPP-INTERFACE OCTET): ( NOT CONVERT ppp IFACE )");
+  	}
+  
+  	
 	/* argv arrays must always be NULL terminated */
 	pppd_argv[an++] = NULL;
 	/* make sure SIGCHLD is unblocked, pppd does not expect it */

 

С вопросами - обращайтесь.

З.Ы. Патч не претендует на лучшую реализацию, будут поправки - в студию.

Ссылка на сообщение
Поделиться на других сайтах

В догонку к патчу: проверка на IP адрес пдключающегося,

вставить в /etc/ppp/ip-up:

 

RET1=`echo $REMOTE_IP_ADDRESS | sed -e 's/.*\.[0-9][0-9][0-9]//'`
RET2=`echo $IFNAME | sed -e s/ppp/.$*/g`

if [ $RET1 != $RET2 ]
   then
   /bin/kill -2 $PPPD_PID
fi

Ссылка на сообщение
Поделиться на других сайтах
Хе, есть у меня чувство, что впн к стг прикрутить на раз, два :)

Причем к текущему и без правки кода

Вот кусок не очень доработанного плагина для pppd коротрый сливает через заданный промежуток времени статистику.

Так сказать СЕМПЛ, сливает в лог файл, на это место можно прикрутить в:

СТГ, SQL, итд. - по желанию.

 

П.С. Данный пост в основном для СТГ-34, так ка я вроде обещал показать как это реализовать. Дальше - точить напильником ИМХО.

 

#include <stddef.h>
#include <time.h>
#include "pppd.h"

static int pppdstat=0;

char pppd_version[] = VERSION;

extern u_int32_t remoteIP;

static option_t my_options[] = {
       { "pppdstat", o_int, &pppdstat,
         "ppp statistics... " },
       { NULL }
};

void    print_info()
{
       update_link_stats(0);
       info("pppdstat: remoteIP=%I sent %u bytes, recv %u bytes.",remoteIP,link_stats.bytes_out, link_stats.bytes_in);
};

static int my_idle(struct ppp_idle *idle)
{
       print_info();
       return (idle_time_limit);
}

static int my_holdoff(void)
{
   if (link_stats_valid) print_info();
   return (holdoff);
};

void plugin_init(void)
{
       info("pppdstat: plugin running...");
       add_options(my_options);
       idle_time_hook = my_idle;
       holdoff_hook = my_holdoff;
}

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.


×
×
  • Створити нове...