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

Исходное сообщение
"mpd + выполнение скриптов после подключения пользователей"

Отправлено Amator , 08-Ноя-06 14:13 
Здравствуйте!

Не подскажете как при помощи mpd выполнять определенные скрипты
после подключения конкретного пользователя. Просто я хочу считать
трафик посредством count-правил ipfw -- благо и программа подходящая
есть - ipcount. И мне нужно, чтобы, к примеру, после подключения
пользователя user_1 выполнился скрипт user_1_up.sh, который устанавливает
эти count-правила ipfw и правила, разрешающие трафик с ip-адреса,
закрепленного за пользователем user_1 (этот ip я указываю в 3-ем поле в
файле mpd.secret после логина и пароля) и возможно какие-то другие команды.
И после отключения этого пользователя, чтобы выполнились определенные команды,
помещенные в скрипт user_1_down.sh.

В документации по mpd в секции "Interface layer commands" указано:

/* ------------------------- */
set iface up-script script
set iface down-script script

   Mpd can optionally run a user program every time the interface is brought up
   or down. The up-script is called like this:

   script interface inet local-ip remote-ip authname [ dns1 server-ip ] [ dns2 server-ip ]

   The down-script is called like this:

   script interface inet authname
/* ------------------------- */

Я думаю, что это может мне помочь, но не совсем понимаю как привязать script
в set iface up-script script и в set iface down-script script к
тем конретным пользователям (user_1, user_2, ...), которые будут подключяться к
pptp-mpd-серверу, pppoe-mpd-серверу.
Может кто-то сталкивался с такой задачей.
Буду очень признателен за помощь. И если можно, то приведите примеры этих самых
script в set iface up-script script и в set iface down-script script.


Содержание

Сообщения в этом обсуждении
"mpd + выполнение скриптов после подключения пользователей"
Отправлено stager , 09-Ноя-06 07:02 
>set iface up-script script
>set iface down-script script

пишешь в mpd.conf

set iface up-script /usr/local/bin/mpd-up-iface
set iface down-script /usr/local/bin/mpd-down-iface

>   The up-script is called like this:
>
>   script interface inet local-ip remote-ip authname [ dns1 server-ip
>] [ dns2 server-ip ]

# cat > /usr/local/bin/mpd-up-iface
#!/bin/sh

case "$5" in
  "user1") /usr/local/bin/user_1_up.sh
    ;;
  "user2") /usr/local/bin/user_2_up.sh
    ;;
  *) /root/bin/wuzzup.sh
    ;;
esac
^d
# chmod 755 /usr/local/bin/mpd-up-iface

>   The down-script is called like this:
>
>   script interface inet authname

# cat > /usr/local/bin/mpd-down-iface
#!/bin/sh

case "$3" in
  "user1") /usr/local/bin/user_1_up.sh
    ;;
  "user2") /usr/local/bin/user_2_up.sh
    ;;
  *) /root/bin/wuzzup.sh
    ;;
esac
^d
# chmod 755 /usr/local/bin/mpd-down-iface

также надо отметить, что скрипты, которые вызываются из mpd, должны работать очень быстро. если будет какаято заминка, то мпд повиснет очень и очень тяжело, развиснуть он сможет только ребутом системы.


"mpd + выполнение скриптов после подключения пользователей"
Отправлено Amator , 13-Ноя-06 14:13 
Огромное спасибо! Понял как работают эти Interface layer commands.

Но фраза "скрипты, которые вызываются из mpd, должны работать очень быстро"
меня насторожила, т.к. далее "если будет какаято заминка, то мпд повиснет очень
и очень тяжело, развиснуть он сможет только ребутом системы".

Как понять "должны работать очень быстро"?

Конечно, в поисках истины необх. смотреть в исходники mpd, но если попытаться
пофилосовствовать, то mpd должен проверять код завершения программ, которые он
вызывает -- ifconfig, route. В случае некорректного их завершения или зависания
(под зависанием я понимаю незавершение их через определенный интервал времени)
mpd просто должен не переходить к след. стадии в установке соединения с клиентом.

Тоже и в отношении script в set iface up-script script и set iface down-script script.
Не завершился вовремя -- клиенту reject, с пояснением (или без него) типа
"Серверу не удалось выполнить все необх. инициализационные команды. Повторите попытку
через пару секунд.".

Может кто-то анализировал ту часть кода, которая ответственна за вызов внешних команд-
скриптов. Разъясните please.

И что вы можете сказать по-поводу идеи подсчета трафика через счетчики ipfw.
Сам автор ipCount говорит, что идея плоха, правда не уточняет почему.


"mpd + выполнение скриптов после подключения пользователей"
Отправлено stager , 13-Ноя-06 14:26 
>Но фраза "скрипты, которые вызываются из mpd, должны работать очень быстро"
>меня насторожила, т.к. далее "если будет какаято заминка, то мпд повиснет очень
> ...
>Как понять "должны работать очень быстро"?
>Конечно, в поисках истины необх. смотреть в исходники mpd, но если попытаться
> ...
>Может кто-то анализировал ту часть кода, которая ответственна за вызов внешних команд-
>скриптов. Разъясните please.

я смотрел исходники, но мельком. похоже там чтото связанное с блокировками и мутексами не совсем в порядке, это особенно заметно, если используется радиус-авторизация.

эмпирически: если скрипт будет выполняться одну две секунды (у меня так было на одном сервере) то практически гарантировано этот мпд будет падать раз в три-пять дней при смешной загрузке в десяток юзеров.

решение тут только в том, чтобы этот скрипт не ожидал окончания необходимых операций, а передавал заботу об них другому внешнему демону.

>И что вы можете сказать по-поводу идеи подсчета трафика через счетчики ipfw.
>Сам автор ipCount говорит, что идея плоха, правда не уточняет почему.

даже не знаю, не считал и не пробовал :)


"mpd + выполнение скриптов после подключения пользователей"
Отправлено Amator , 13-Ноя-06 15:13 
А какая у Вас версия mpd была на том на сервере?

Может с новыми версиями эта проблема устранена?

К сожалению на данный момент нет возможности серьезно
поэкспериментировать с mpd. Попробую проанализировать
исходники mpd4-4.0b4 -- я так понимаю самые свежие и
самые, ясное дело, непротестированные.

Сейчас на сервере исп. mpd4-4.0b2; правда без биллинга и
без запуска скриптов из

set iface up-script script и
set iface down-script script.

Mpd, netgraph -- это сильные идеи; хотелось бы разобраться в этом
детально -- уверен, что пригодится не один раз. И в первую очередь
хотелось бы разобраться с этими "подводными камнями".


"mpd + выполнение скриптов после подключения пользователей"
Отправлено Amator , 20-Ноя-06 10:45 
По-поводу критичности выполнения script в set iface up-script script и
set iface down-script script ->

проблема решается путем запуска из script еще одного скрипта или программы
в фоновом режиме. Например:

$ less /usr/local/etc/mpd4/mpd.conf

   /* skip */
   set iface up-script /путь/first_up.sh
   set iface down-script /путь/first_down.sh
   /* skip */

$ less /путь/first_up.sh

   #!/bin/sh

   /путь/second_up.sh $1 $3 $4 $5 &

И уже собственно в /путь/second_up.sh пишем те программы, которые должны выполниться
при подключении конкретного пользователя.
Фоновый режим "избавляет" mpd от необх. дожидаться завершения выполнения script.
Ответственность за успешное выполнение script ложиться на администратора ->
посмотреть код завершения программ, сделать кое-какие действия в случае ненулевого кода и
т.д., и т.п., и пр.
Рассуждения справедливы для script и в set iface up-script script, и в
set iface down-script script.
Теперь норм. работа mpd "зависит" только от успешного выполнения команд ifconfig,
route -> тех вызов которых "вшит" в исх. код mpd.

И очень хотелось бы услышать от Вас советы по-поводу подсчета трафика посредством
count-правил ipfw -> рационально или нет. Необх. обсчитывать до 450 пользователей
одновременно работающих в Internet. Программа сбора count-данных ipCount.


"mpd + выполнение скриптов после подключения пользователей"
Отправлено stager , 20-Ноя-06 13:15 
>По-поводу критичности выполнения script в set iface up-script script и
>set iface down-script script ->
>
>проблема решается путем запуска из script еще одного скрипта или программы
>в фоновом режиме. Например:
>
>$ less /usr/local/etc/mpd4/mpd.conf
>
>   /* skip */
>   set iface up-script /путь/first_up.sh
>   set iface down-script /путь/first_down.sh
>   /* skip */
>
>$ less /путь/first_up.sh
>
>   #!/bin/sh
>
>   /путь/second_up.sh $1 $3 $4 $5 &
>
>И уже собственно в /путь/second_up.sh пишем те программы, которые должны выполниться
>при подключении конкретного пользователя.
>Фоновый режим "избавляет" mpd от необх. дожидаться завершения выполнения script.
>Ответственность за успешное выполнение script ложиться на администратора ->
>посмотреть код завершения программ, сделать кое-какие действия в случае ненулевого кода и
>
>т.д., и т.п., и пр.
>Рассуждения справедливы для script и в set iface up-script script, и в
>
>set iface down-script script.
>Теперь норм. работа mpd "зависит" только от успешного выполнения команд ifconfig,
>route -> тех вызов которых "вшит" в исх. код mpd.

это уже не принципиально, хотя и тут бывают поводные камни

>И очень хотелось бы услышать от Вас советы по-поводу подсчета трафика посредством
>
>count-правил ipfw -> рационально или нет. Необх. обсчитывать до 450 пользователей
>одновременно работающих в Internet. Программа сбора count-данных ipCount.

я уже говорил, что не в курсе

хотя думаю что если ipfw считает байтики также как и iptables то проблема будет только в мощности машины


"mpd + выполнение скриптов после подключения пользователей"
Отправлено Maximum , 07-Фев-07 16:39 
>   The up-script is called like this:
>
>   script interface inet local-ip remote-ip authname [ dns1 server-ip
>] [ dns2 server-ip ]

как узнать ип-человека подсоединяющегося к впн-серверу?


"mpd + выполнение скриптов после подключения пользователей"
Отправлено stager , 07-Фев-07 17:32 
>>   The up-script is called like this:
>>
>>   script interface inet local-ip remote-ip authname [ dns1 server-ip
>>] [ dns2 server-ip ]
>
>как узнать ип-человека подсоединяющегося к впн-серверу?

только в логе самого мпд

либо сделать патч :)


"mpd + выполнение скриптов после подключения пользователей"
Отправлено Maximum , 07-Фев-07 17:39 
>>>   The up-script is called like this:
>>>
>>>   script interface inet local-ip remote-ip authname [ dns1 server-ip
>>>] [ dns2 server-ip ]
>>
>>как узнать ип-человека подсоединяющегося к впн-серверу?
>
>только в логе самого мпд
>
>либо сделать патч :)

в логах нету докального ипа
попробовал скрипт
script interface inet local-ip remote-ip authname
эти параметры в лог кидал
local-ip  - здесь адрес сервера

где еще может быть?


"mpd + выполнение скриптов после подключения пользователей"
Отправлено stager , 07-Фев-07 17:50 
>>>>   The up-script is called like this:
>>>>
>>>>   script interface inet local-ip remote-ip authname [ dns1 server-ip
>>>>] [ dns2 server-ip ]
>>>
>>>как узнать ип-человека подсоединяющегося к впн-серверу?
>>
>>только в логе самого мпд
>>
>>либо сделать патч :)
>
>
>
>в логах нету докального ипа

а это тогда что?

Feb  7 20:32:51 host mpd: mpd: PPTP connection from ххх.ххх.ххх.хх:4948
Feb  7 20:32:51 host mpd: pptp4: attached to connection with ххх.ххх.ххх.хх:4948
Feb  7 20:32:52 host mpd: [pptp5] IFACE: Open event


"mpd + выполнение скриптов после подключения пользователей"
Отправлено Maximum , 07-Фев-07 19:20 
>>>>>   The up-script is called like this:
>>>>>
>>>>>   script interface inet local-ip remote-ip authname [ dns1 server-ip
>>>>>] [ dns2 server-ip ]
>>>>
>>>>как узнать ип-человека подсоединяющегося к впн-серверу?
>>>
>>>только в логе самого мпд
>>>
>>>либо сделать патч :)
>>
>>
>>
>>в логах нету докального ипа
>
>а это тогда что?
>
>Feb  7 20:32:51 host mpd: mpd: PPTP connection from ххх.ххх.ххх.хх:4948
>Feb  7 20:32:51 host mpd: pptp4: attached to connection with ххх.ххх.ххх.хх:4948
>
>Feb  7 20:32:52 host mpd: [pptp5] IFACE: Open event

спасибо огромное