The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Автоподъем pptp linux-клиента на Fedora Core Linux
После безуспешного шаманства вокруг pppd с использованием persist, holdof и maxfail
решил написать следующий скрипт. Запускается из rc.local

#!/usr/bin/perl
use strict;
use Net::Ping;
my $hping=Net::Ping->new("icmp");
my $s=0;
sub logger($) {
my @ldata=localtime;$ldata[5]+=1900;$ldata[4]+=1;
my $j = 0;
for ($j = 0;$j < 5; $j++) {
    if ($ldata[$j] <10) {
       $ldata[$j] = "0" . $ldata[$j];
    }
}
my $data1="$ldata[3]/$ldata[4]/$ldata[5] $ldata[2]:$ldata[1]:$ldata[0]";
open (MAN_LOG, ">>/var/log/ppp_watcher");
print MAN_LOG "pw: $data1\t$_[0]\n";
close(MAN_LOG)
}
logger("daemon started.");
`echo "kill -15 $$" > /root/ppp_watch.die`;
`chmod 0700 /root/ppp_watch.die`;
sub ppp_watch {
    my @presence=split(' ', `ifconfig | grep ppp0`);
    $presence[0].='';
    if ($presence[0] ne 'ppp0') {
	logger("trying to start daemon.");
	`route add -net <LOCAL NETWORK> netmask 255.255.255.0 gw <LOCAL GW> 2>/dev/null`;
	`sleep 2`;
	`pppd noauth nobsdcomp nodeflate name sspm pty "pptp <GW> --nolaunchpppd" 2>/dev/null`;
	`sleep 3`;
	`route add -net <IP> netmask 255.255.255.0 gw <GW> 2>/dev/null`;
	`sleep 2`;
	`route del -net 0.0.0.0 netmask 0.0.0.0 gw <LOCAL IP> 2>/dev/null`;
	`sleep 3`;
	`route add -net 0.0.0.0 netmask 0.0.0.0 dev ppp0`;
	$SIG{'ALRM'}='ppp_watch';
	logger("delaying for 20 sec...");
	alarm(20);
    } else {
	my @traff=split(' ', `pppstats | tail -1`);
	logger("watching, total traffic $traff[0]");
	$SIG{'ALRM'}='ppp_watch';
	alarm(5);
    }
}
ppp_watch;
sub ppp_die {
    $s=1;
}
$SIG{'TERM'}='ppp_die';
while ($s ne 1) {
}
logger("daemon stopped.");
exit 0;


Кроме всего прочего ведет лог состояния и трафика.
 
05.04.2005 , Автор: Abor Mot
Ключи: pptp, script, linux / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевая подсистема, маршрутизация / PPP, PPTP, PPPOE

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, flc (?), 11:11, 05/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А федора не умеет на старте системы поднимать туннель и устанавливать маршрутизацию?

    У меня в Debian есть запись в /etc/network/interfaces о туннеле а в /etc/ppp/ip-up.d и /etc/ppp/ip-down.d есть скрипты, задающие марштуризацию через туннель.

     
     
  • 2.2, Abor Mot (?), 11:36, 05/04/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Дело было так, pptp + pppd + pppd_mppe + kernel_mppe_mppc собирались вручную из сырцов, предварительно прибив старые пакеты из дистра. По поводу туннеля в inittab или rc.local или другим способом сказать не могу. Требовалось решить вопрос быстро, возможно есть более оптимальный вариант. Поскольку этот вариант заработал - желание искать иные пути не возникает (и материально никем не стимулируется), а для любопытства есть другие точки приложения :-)
     
  • 2.3, wild_t (?), 12:40, 06/04/2005 [^] [^^] [^^^] [ответить]  
  • +/
    еще как умеет

    1) rpm -i pptp-linux-1.3.1-1.i386.rpm
    2) ln -s /usr/sbin/pptp-command /etc/init.d/pptp
    настройка: кому как понравится, либо по-старинке /etc/ppp/*, либо pptp-command - не самый ужасный cli
    3) chkconfig --add pptp
    4) chkconfig --level 35 pptp on
    5) $ cat pptp-watchdog
    #! /usr/bin/perl -w

    use strict;

    my %tunnels = (
        "server1" => "name1",
        "server2" => "name2"
    );

    my @out = 'ps ax | grep "pptp $1"';
    $#out && exit 0;

    exec "/etc/init.d/pptp start $tunnels{$1}";

    6) crontab -e, добавить запуск вотчдога раз в минуту, единственный аргумент - имя сервера (то, что написано в /etc/ppp/peers/nameX).

    7) наслаждаться

     

  • 1.4, agon (??), 16:17, 21/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    я просто
    sl:2345:respawn:/usr/sbin/pppd call mytunnel
    в inittab добавил и все само поднимается на нужном runlevel
    помоему так проще
     
  • 1.5, chirik (?), 01:47, 25/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Немного переделано Пришлось лепить VPNHOSTGW, потому как сервак нев моей подсет... большой текст свёрнут, показать
     
  • 1.6, Аноним (-), 22:50, 26/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Неплохо бы поспать внутри цикла до аларма. А то процессорного времени много кушается. Да и 5 сек задержки для статистики многовато.

    while ($s ne 1) {
    sleep(4);
    }

     
  • 1.7, la (?), 00:24, 14/06/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Расскажите по шагам, что мне надо сделать, что бы поднять pptp соединение!
     
     
  • 2.8, Игорь (??), 07:26, 14/06/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Привет ALL !!!
    Мне тоже пришлось потрахаться с этой фигней.
    Стартовый скрипт это замечательно...
    но если соединение у вас порвалось больше чем
    на несколько минут - адью - оно само больше не поднимится.
    опять ручками?
    вот как сделал я:

    пишем строчку в inittab

    i2:345:respawn:/usr/sbin/pptp 192.168.3.1 call pptp0

    естественно pptp0 должен быть предварительно настроен.

    Все поднимется но не будет дефолтового пути.
    делаем файло /etc/ppp/ip-up.local:

    --------------------------------------------------------------
    #!/bin/bash
    sleep 5
    pppX='route -n|grep pppX'
    if [ ! -z "pppX" ]; then
        route add default gw yyy.yyy.yyy.yyy >/dev/null &
    fi
    --------------------------------------------------------------

    где pppX - ваш порт.
    У меня настроен ppp2 навсегда.

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

    Бест бест бест всем.

     
     
  • 3.9, maxxic (?), 15:06, 06/02/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >где pppX - ваш порт.
    >У меня настроен ppp2 навсегда.
    а как его закрепить навсегда?
    подскажите, плиз.
     
     
  • 4.10, Игорь (??), 06:06, 08/02/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >>где pppX - ваш порт.
    >>У меня настроен ppp2 навсегда.
    >а как его закрепить навсегда?
    >подскажите, плиз.


    дык очень просто дописать строчку: unit X
    в файле /etc/ppp/peers/pptp0
    где Х ставим 2 или любой какой хотите

     
  • 3.13, Аноним (-), 02:26, 25/06/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Хочется отдельно отметить, что при таком способе заботой подъема PPPD занимается один из важных системных процессов - INIT

    Игры с опцией persist - это хорошо, но не помогают, если в вашей реализации pppd имеются ошибки и он аварийно завершается, никто его не запустит.

    Игры с внешним скриптом - это изобретение велосипеда. Если по какой-то причине какой-то софт прибъет ваш чудный скрипт, то опять же PPPD не поднимется.
    В INIT уже все придумано за вас. Прочтите доки и пользуйтесь.

     

  • 1.11, Vaso Petrovich (?), 18:52, 20/08/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    # Makes pppd "dial again" when the connection is lost.
    persist

    и всего делов то... нафига велосипед изобритать... :-)

     
  • 1.12, ntimmy (??), 14:45, 11/10/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Цель данной статьи кратко описать процесс настройки простого рутера для подключе... большой текст свёрнут, показать
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру