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

Исходное сообщение
"pppd не убивает   отключенных "

Отправлено DOE666 , 27-Окт-04 15:12 
Проблема вот такая у меня
когда пользователи отключатся ( как я понял,  несовсем корректно, ресетом или когда  физически  рвется связь с серваком )  то  мой ВПН сервак   не  обрывает сессию   и в  процессах (ps –ax) остается висеть соединение с ними. Как настроить, чтобы они сами отваливались  ???  set timeout  тут не подходит

а то народ повторно  подключается, появляется второе  подключение с аналогичным виртуальным ip  и у них ,соответственно ничего не работает

приходится из консоли вычислять  номер их ppp-сессии  а потом прибивать ее вручную

стоит у меня poptop 1.1.4  и pptpd 1.4.2


Содержание

Сообщения в этом обсуждении
"pppd не убивает   отключенных "
Отправлено Duxx , 27-Окт-04 18:13 
была такая проблема, решения не нашел, так как иногда они отрубаются, а иногда и нет, в итоге написал скрипт, который раз в пять минут проверяет, и вырубает повисшие соединения.


"pppd не убивает   отключенных "
Отправлено DOE666 , 27-Окт-04 21:56 

>была такая проблема, решения не нашел, так как иногда они отрубаются, а
>иногда и нет, в итоге написал скрипт, который раз в пять
>минут проверяет, и вырубает повисшие соединения.


ты МОЗГ :)
лично я  на такое  не способен :(

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


"pppd не убивает   отключенных "
Отправлено tangar , 28-Окт-04 10:00 
>была такая проблема, решения не нашел, так как иногда они отрубаются, а
>иногда и нет, в итоге написал скрипт, который раз в пять
>минут проверяет, и вырубает повисшие соединения.

Была у меня такая-же проблема, но с PPPoE, я её практически решил
http://www.opennet.me/base/net/rp_pppoe.txt.html

Но всё-же иногда, очень редко такая штука(завис pppd) случается... :(
Поэтому интересно:
А по какому признаку ты определяешь, что сессия зависла?

Скриптом не поделишься?


"pppd не убивает   отключенных "
Отправлено DOE666 , 28-Окт-04 17:08 

>Скриптом не поделишься?

у меня еще почемуто  создаются ppp110, ppp141  и т.д.  когда   диапазон  в районе  ppp0-ppp100   наполовину свободен  :(((


"pppd не убивает   отключенных "
Отправлено Duxx , 29-Окт-04 07:21 
>>была такая проблема, решения не нашел, так как иногда они отрубаются, а
>>иногда и нет, в итоге написал скрипт, который раз в пять
>>минут проверяет, и вырубает повисшие соединения.
>
>Была у меня такая-же проблема, но с PPPoE, я её практически решил
>
>http://www.opennet.me/base/net/rp_pppoe.txt.html
>
>Но всё-же иногда, очень редко такая штука(завис pppd) случается... :(
>Поэтому интересно:
>А по какому признаку ты определяешь, что сессия зависла?
>
>Скриптом не поделишься?
у меня частный случай, посему проблему решил так, беру список ppp, так как у нас в системе адреса строго привязаны к пользователю, узнаю pppшный адрес, делаю запрос к биллинговой системе и она выдает мне локальный адрес для этого клиента, затем узнаю netstat-том есть ли подключение по этому адресу по порту vpn сервера, если нету убиваю этот ppp нафиг.
--------------------------
#!/bin/bash                                                                      
                                                                                  
##############################################################################    
# Ищем зависшие ppp , а также те соединения которые отрыты не локального ip адреса
# пользователя соединение и прибиваем их нафиг чтобы клиенты смогли зайти        
##############################################################################    
SUCCESS=0                                                                        
lockfile=/var/lock/check_ppp                                                      
getlocalip=/netup/scripts/getlocalip                                              
                                                                                  
if [ -e $lockfile ]                                                              
then                                                                              
    exit;                                                                        
fi                                                                                
                                                                                  
touch $lockfile;                                                                  
                                                                                  
# проверяем не зависло ли соединение                                              
for if_ppp in `ifconfig | grep ppp | cut -d\  -f1 | tr -d " "`                    
do                                                                                
# Находим ip адрес данного соединения                                                  
if_ppp_ip=""`ifconfig $if_ppp | grep inet | cut -d : -f 3 | cut -d \  -f 1 | tr -d " "`;
if [ "$if_ppp_ip" != "" ]                                                              
then                                                                                    
# Проверяем все локальные ип с которых могло быть подключение
flagtokill=1;                                                
for if_ppp_local_ip in ""`$getlocalip $if_ppp_ip`            
do                                                          
    #echo $if_ppp_local_ip;                                  
    if [ "if_ppp_local_ip" != "" ]                          
    then                                                    
is_connect=""`netstat -anlt | tr -s " " | grep "\:1723 $if_ppp_local_ip\:" | grep ESTABLISHED`;
                if [ "$is_connect" != "" ]
                then                      
                    flagtokill=0;        
                fi;                      
            fi;                          
        done;                            
if [ "$flagtokill" == "1" ]
then                      
# находим ип адрес даного соединения так как пока мы проверяли он мог отрубиться
if_ppp_ip_stop=""`ifconfig $if_ppp | grep inet | cut -d : -f 3 | cut -d \  -f 1 | tr -d " "`;
if [ "$if_ppp_ip_stop" == "$if_ppp_ip" ]
then                                    
echo `date +%b%t%e%t%T`" kill pppd  $if_ppp_ip need ip $if_ppp_local_ip"  >> /var/log/control.log;
                pid_stops=""`cat /var/run/$if_ppp.pid`;
                kill -s SIGKILL $pid_stops;            
            fi;                                        
        fi;                                            
    fi;                                                
done;                                                  
------------------------
основной момент это вызов скрипта $getlocalip
он обращается к биллингу, так что нефакт что данное решение вам подойдет.
хотя решение и громоздкое но отрабатывает довольно шустро.


"pppd не убивает   отключенных "
Отправлено EvilX , 29-Окт-04 09:20 
Я решил такую пробдему банально. В ppp.conf
enable lqr
set lqrperiod 15

После этого нормально отключается.