The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Автоподъем pptp linux-клиента на Fe..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Автоподъем pptp linux-клиента на Fe..."  +/
Сообщение от auto_tips on 05-Апр-05, 11:11 
После безуспешного шаманства вокруг 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;


Кроме всего прочего ведет лог состояния и трафика.


URL:
Обсуждается: https://www.opennet.ru/tips/info/824.shtml

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от flc on 05-Апр-05, 11:11 
А федора не умеет на старте системы поднимать туннель и устанавливать маршрутизацию?

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от Abor Mot email on 05-Апр-05, 11:36 
Дело было так, pptp + pppd + pppd_mppe + kernel_mppe_mppc собирались вручную из сырцов, предварительно прибив старые пакеты из дистра. По поводу туннеля в inittab или rc.local или другим способом сказать не могу. Требовалось решить вопрос быстро, возможно есть более оптимальный вариант. Поскольку этот вариант заработал - желание искать иные пути не возникает (и материально никем не стимулируется), а для любопытства есть другие точки приложения :-)
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Re: Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от wild_t on 06-Апр-05, 12:40 
еще как умеет

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) наслаждаться

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от agon email(??) on 21-Апр-05, 16:17 
я просто
sl:2345:respawn:/usr/sbin/pppd call mytunnel
в inittab добавил и все само поднимается на нужном runlevel
помоему так проще
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от chirik email on 25-Апр-05, 01:47 
Немного переделано.
Пришлось лепить VPNHOSTGW, потому как сервак нев моей подсети :)

[root@fc network-scripts]# cat ifcfg-pptp0
PEERDNS="yes"
DEVICE="pptp0"
ONBOOT="yes"
USERCTL="no"
PERSIST="yes"
DEBUG="yes"
DEFROUTE="yes"
PPPOPTIONS=""
MRU=""
MTU=""
IDLETIMEOUT=""
VPN_HOST="10.0.4.3"
VPNHOSTGW=""
VPN_USER="login"
VPN_PASS="password"
ROUTES=""
TYPE="pptp"

[root@fc network-scripts]# cat ifup-pptp
#!/bin/sh
# Based on Red Hat's ppp scripts
# MSG - yinyang@eburg.com
# 06/28/2000

# Changes:
# 06/28/2000 - modified scripts from original ssh vpn scripts.

PATH=/sbin:/usr/sbin:/bin:/usr/bin


if [ "$1" = watch ] ; then
        shift
        DEVICE=$1
        shift

        PID=`grep -v ppp /var/run/ppp-${DEVICE}.pid`

        while ( test -e "/var/run/ppp-${DEVICE}.pid" && \
                test -d "/proc/${PID}" ) ; do
                sleep 5s
        done

        [ -e /var/run/${DEVICE}-up ] || exit 0
fi


# Get the configuration for this connection
cd /etc/sysconfig/network-scripts
. network-functions

CONFIG=$1
[ -f "$CONFIG" ] || CONFIG=ifcfg-$1
source_config


if [ "$2" = "boot" -a "${ONBOOT}" = "no" ]; then
        exit
fi


[ -x /usr/sbin/pppd ] || {
        echo "/usr/sbin/pppd does not exist or is not executable"
        echo "ifup-pptp for $DEVICE exiting"
        logger -p daemon.info -t ifup-vpn \
                "/usr/sbin/pppd does not exist or is not executable for $DEVICE"
        exit 1
}

opts="lock lcp-echo-interval 30 lcp-echo-failure 4 noipdefault noauth"
if [ -z "${VPNHOSTGW}" ] ; then
        VPNHOSTGW=`route -n | grep '^0.0.0.0' | awk '{print $2}'`
fi
route add -host ${VPN_HOST} gw ${VPNHOSTGW}

if [ "${DEFROUTE}" = yes ] ; then
        # pppd will no longer delete an existing default route
        # so we have to help it out a little here.
        DEFRT=`ip route list | awk '/^default / { print $3 }'`
        [ -n "${DEFRT}" ] && echo $DEFRT > /etc/default-route
        route del default >/dev/null 2>&1
        opts="$opts defaultroute"
fi
if [ "${PEERDNS}" != no ] ; then
        opts="$opts usepeerdns"
fi
if [ -n "${MRU}" ] ; then
        opts="$opts mru ${MRU}"
fi
if [ -n "${MTU}" ] ; then
        opts="$opts mtu ${MTU}"
fi
if [ -n "${IDLETIMEOUT}" ] ; then
        opts="$opts idle ${IDLETIMEOUT}"
fi
if [ -n "${IPADDR}${REMIP}" ] ; then
        # if either IP address is set, the following will work.
        opts="$opts ${IPADDR}:${REMIP}"
fi
if [ "${DEBUG}" = yes ] ; then
        opts="$opts debug"
fi

if [ -z "${VPN_USER}" ] ; then
        (logger -p daemon.info -t ifup-pptp \
                "vpn: VPN_USER is not defined, authentication credentials required." &)&
        exit 1
else
        opts="$opts user ${VPN_USER}"
fi
if [ -z "${VPN_HOST}" ] ; then
        (logger -p daemon.info -t ifup-pptp \
                "vpn: VPN_HOST is not defined, to whom do I connect?" &)&
        exit 1
else
        opts="$opts remotename ${VPN_HOST}"
fi

(logger -p daemon.info -t ifup-pptp \
        "vpn: pppd started for ${DEVICE} to ${VPN_HOST}" &)&

/usr/sbin/pptp "${VPN_HOST}" updetach $opts ${PPPOPTIONS} \
        ipparam $DEVICE linkname $DEVICE
LINKUP=$?

if [ "${LINKUP}" -ne "0" ]; then
        (logger -p daemon.info -t ifup-pptp \
                "pptp: pppd failed to start" &)&
        exit 1
fi


REALDEVICE=`grep ppp /var/run/ppp-${DEVICE}.pid`
for net in ${ROUTES}; do
        unset NETWORK NETMASK
        eval `echo $net | sed -e 's:\(.*\)/\(.*\):NETWORK=\1;NETMASK=\2:'`
        route add -net ${NETWORK} netmask ${NETMASK} dev ${REALDEVICE}
done

if [ "${PERSIST}" = yes ] ; then
        touch /var/run/${DEVICE}-up
        "$0" watch "${DEVICE}" "$@" &
fi

[root@fc network-scripts]# cat ifdown-pptp
#!/bin/bash
# Based on Red Hat's ppp scripts
# MSG - yinyang@eburg.com
# 06/28/2000
PATH=/sbin:/usr/sbin:/bin:/usr/bin

cd /etc/sysconfig/network-scripts
. network-functions

CONFIG=$1
source_config

file=/var/run/ppp-$DEVICE.pid

if [ ! -f $file ]; then
        # ppp isn't running, or we didn't start it
        exit 0
fi

# remove the "$DEVICE-up" file so ifup-vpn knows to quit
if [ "${PERSIST}" = yes ] ; then
        vpnfile=/var/run/${DEVICE}-up
        [ -f "$vpnfile" ] && rm -f "$vpnfile"
fi

# pppd appears to put its pid and the real device name in this file
PID=`head -1 $file`
[ -n "$PID" ] || exit 1

kill -TERM $PID > /dev/null 2>&1
# Give pppd a chance to exit
sleep 1
[ ! -d /proc/$PID ] && exit 0
sleep 2
[ ! -d /proc/$PID ] && exit 0

# killing ppp-watch twice in a row causes it to send a SIGKILL to pppd pgrp
kill -TERM $PID > /dev/null 2>&1
# ip-down won't run in this case
/etc/sysconfig/network-scripts/ifdown-post $1
[ ! -d /proc/$PID ] && exit 0

exit 1

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

6. "Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от Аноним on 26-Апр-05, 22:50 
Неплохо бы поспать внутри цикла до аларма. А то процессорного времени много кушается. Да и 5 сек задержки для статистики многовато.

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

7. "Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от la on 14-Июн-05, 00:24 
Расскажите по шагам, что мне надо сделать, что бы поднять pptp соединение!
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

8. "Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от Игорь email(??) on 14-Июн-05, 07:26 
Привет 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 навсегда.

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

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

9. "Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от maxxic email on 06-Фев-07, 15:06 
>где pppX - ваш порт.
>У меня настроен ppp2 навсегда.
а как его закрепить навсегда?
подскажите, плиз.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

10. "Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от Игорь (??) on 08-Фев-07, 06:06 
>>где pppX - ваш порт.
>>У меня настроен ppp2 навсегда.
>а как его закрепить навсегда?
>подскажите, плиз.


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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

11. "Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от Vaso Petrovich on 20-Авг-07, 18:52 
# Makes pppd "dial again" when the connection is lost.
persist

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

12. "Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от ntimmy email(??) on 11-Окт-07, 14:45 
Цель данной статьи кратко описать процесс настройки простого рутера для подключения в сети через PPTP VPN на основе ОС Linux Slackware в первую очередь для работы в сетях ufanet.
Локальная сеть 192.168.1.0/24, ip шлюза 192.168.1.254 он же DNS и прокся
Внешний ip получаем по dhcp.
В данном случае eth0 смотрит в мир, eth1 смотрит в локальную сеть.
Будем настраивать два конфига один для работы по земле другой через спутник.
Первое что понадобиться это пакеты не младше,
pppd 2.4.4
pptp version 1.7.0
Для начала напишем правила для iptables
/etc/rc.d/rc.firewall
#!/bin/bash
#
EXT_IF="eth0"
LAN_IF="eth1"
LOCAL_NET="192.168.1.0/24"
IPT=`which iptables`
EXT_IP=`ifconfig $EXT_IF |grep "inet\ addr:"|awk '{print $2}'|sed -e s/addr://`
LAN_IP=`ifconfig $LAN_IF |grep "inet\ addr:"|awk '{print $2}'|sed -e s/addr://`
#
$IPT -t nat -F
$IPT -X
$IPT -F
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
#localhost rules
$IPT -A INPUT -p ALL -i lo -s 127.0.0.1 -j ACCEPT
$IPT -A INPUT -p ALL -i lo -s $EXT_IP -j ACCEPT
$IPT -A INPUT -p ALL -i lo -s $LAN_IP -j ACCEPT
#external net rules
# ICMP rules
$IPT -A INPUT -p ICMP -i $EXT_IF --icmp-type echo-request -j ACCEPT
$IPT -A INPUT -p ICMP -i $EXT_IF --icmp-type echo-reply -j ACCEPT
#$IPT -A INPUT -p ICMP -i $EXT_IF -j ACCEPT
#
$IPT -A INPUT -p ALL -i $EXT_IF -s $LOCAL_NET -j DROP
$IPT -A INPUT -p ALL -d $EXT_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p TCP -i $EXT_IF --dport 20:21 -j ACCEPT
$IPT -A INPUT -p TCP -i $EXT_IF --dport 80 -j ACCEPT
$IPT -A INPUT -p TCP -i $EXT_IF --dport 1024:65535 -j ACCEPT
#end external if
#
#internal net rules
#ICMP
$IPT -A INPUT -p ICMP -i $LAN_IF -j ACCEPT
#
$IPT -A INPUT -p ALL -d $LAN_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p TCP -i $LAN_IF --dport 20:22 -j ACCEPT
$IPT -A INPUT -p TCP -i $LAN_IF --dport 80 -j ACCEPT
#DNS
$IPT -A INPUT -p TCP -i $LAN_IF --dport 53 -j ACCEPT
$IPT -A INPUT -p UDP -i $LAN_IF --dport 53 -j ACCEPT
#SMB
$IPT -A INPUT -p TCP -i $LAN_IF --dport 135:139 -j ACCEPT
$IPT -A INPUT -p UDP -i $LAN_IF --dport 135:139 -j ACCEPT
$IPT -A INPUT -p TCP -i $LAN_IF --dport 445 -j ACCEPT
$IPT -A INPUT -p UDP -i $LAN_IF --dport 445 -j ACCEPT
#nttp
$IPT -A INPUT -p TCP -i $LAN_IF --dport 123 -j ACCEPT
$IPT -A INPUT -p UDP -i $LAN_IF --dport 123 -j ACCEPT
#SWAT
$IPT -A INPUT -p TCP -i $LAN_IF --dport 901 -j ACCEPT
#SMTP/POP3
$IPT -A INPUT -p TCP -i $LAN_IF --dport 25 -j ACCEPT
$IPT -A INPUT -p TCP -i $LAN_IF --dport 110 -j ACCEPT
#
$IPT -A INPUT -p TCP -i $LAN_IF --dport 3306 -j ACCEPT
$IPT -A INPUT -p TCP -i $LAN_IF --dport 1024:65535 -j ACCEPT
$IPT -A INPUT -p UDP -i $LAN_IF --dport 1024:65535 -j ACCEPT
#
# Forward Rules
$IPT -A FORWARD -p TCP -s 0/0 --dport 1433:1434 -j DROP
$IPT -A FORWARD -p TCP -s 0/0 --dport 135:139 -j DROP
$IPT -A FORWARD -p UDP -s 0/0 --dport 135:139 -j DROP
$IPT -A FORWARD -p TCP -s 0/0 --dport 445 -j DROP
$IPT -A FORWARD -p UDP -s 0/0 --dport 445 -j DROP
$IPT -A FORWARD -p ALL -s 0/0 -j ACCEPT
#NAT
$IPT -t nat -A POSTROUTING -o $EXT_IF -j SNAT --to-source $EXT_IP
#end firewall rules
#
Делаем этот файл исполнимым.
#chmod 755 /etc/rc.d/rc.firewall
Далее установим пакеты pppd-2.4.4 и pptp-1.7.0.
#installpkg pppd-2.4.4.tgz pptp-1.7.0.tgz
Напишем два конфига причем нам нужно чтобы канал по земле был обязательно ppp1, а канал через спутник ppp2.
И так
#cd /etc/ppp
Пишем файлик options.pptp
lock
nomultilink
noauth
debug
bsdcomp 15
noipdefault
unit 1
Прошу обратить внимание на последнюю строчку в ней мы определяем каким будет вновь создаваемый интерфейс.
Аналогично пишем и второй options.pptp.sat
lock
usepeerdns
nomultilink
noauth
debug
bsdcomp 15
noipdefault
unit 2
name login@sat
Заполняем файл chap.secret так как используется авторизация CHAP

# Secrets for authentication using CHAP
# client server secret IP addresses
"login" * "superpassword"
"login@sat" * "superpassword"

Теперь создадим если не создалась папку /etc/ppp/peers
#mkdir peers
#touch UFANET
#touch UFANET_SAT
Запишем в них следующие строчки:
файл /etc/ppp/peers/UFANET
#Start
name login
remotename PPTP
file /etc/ppp/options.pptp
#end
файл /etc/ppp/peers/UFANET_SAT
#Start
name login@sat
remotename PPTP
file /etc/ppp/options.pptp.sat
#end
Теперь напишем скрипты которые должны все это заставить работать.
#cd /root
#touch start_pptp
#vi start_pptp

#!/bin/bash
#
#
# Put any local setup commands in here:
#start pptp tunnel
defgw="10.64.114.1"
pptp=""
startpptp()
{
pptp=`/sbin/ifconfig |grep ppp1|awk '{print $1}'`
if [ "" = "$pptp" ]
then
echo "Start pptp link"
/usr/sbin/pptp 10.8.0.1 call UFANET
#start squid
sleep 5
tun=`ifconfig |grep ppp1`
if [ "" != "$tun" ]
then
echo "PPTP tunnel is up "
else
echo "PPTP tunnel test is failed tru again "
exit
fi
#create new route path
INET_IP=`cat /etc/ppp/last_inet_ip`
INET_IF=`cat /etc/ppp/last_inet_if`
route=/sbin/route
$route del default
$route add -host 10.8.3.1 gw $defgw
$route add -host 10.8.0.1 gw $defgw
sleep 3
$route add default ppp1
#
cd /root
sleep 5
# Здесь у нас канал поднялся для него прописываем правила файрвола
#настроим NAT и для примера мапинг портов
ipt="/usr/sbin/iptables"
echo "Load firewall rules"
$ipt -I INPUT 1 -p ALL -i lo -s $INET_IP -j ACCEPT
$ipt -I INPUT 2 -p TCP -i $INET_IF --dport 80 -j DROP
$ipt -I INPUT 3 -p TCP -i $INET_IF --dport 20:21 -j DROP
$ipt -I INPUT 4 -p TCP -i $INET_IF --dport 22 -j DROP
$ipt -I INPUT 5 -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
#mapping ports
$ipt -I FORWARD -i ppp1 -s 81.30.176.0/20 -o eth1 -p tcp --dport 27015 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$ipt -I FORWARD -i ppp1 -s 81.30.192.0/19 -o eth1 -p tcp --dport 27015 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$ipt -I FORWARD -i ppp1 -s 81.30.176.0/20 -o eth1 -p udp --dport 27015 -j ACCEPT
$ipt -I FORWARD -i ppp1 -s 81.30.192.0/19 -o eth1 -p udp --dport 27015 -j ACCEPT
$ipt -I FORWARD -i ppp1 -s 89.189.128.0/19 -o eth1 -p tcp --dport 27015 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$ipt -I FORWARD -i ppp1 -s 89.189.128.0/19 -o eth1 -p udp --dport 27015 -j ACCEPT
$ipt -t nat -I PREROUTING 1 -p tcp -d $INET_IP --dport 27015 -j DNAT --to 192.168.1.10:27015
#NAT
$ipt -t nat -I POSTROUTING 2 -o $INET_IF -j SNAT --to-source $INET_IP
killall squid
killall squid
/etc/rc.d/rc.squid start
fi
}

stoppptp()
{
killall -HUP pppd
sleep 5
}

case "$1" in
'start')
startpptp
;;
'stop')
stoppptp
;;
*)
startpptp
esac
exit 0
И скрипт который корректно положит интерфейс

#vi kill_pptp

#!/bin/bash
defgw="10.64.114.1"
IF=`ifconfig |grep ppp2|awk '{print $1}'`
if [ "" != "$IF" ]
then
INET_IP=`ifconfig ppp2|grep inet|awk '{print $2}'|sed -e s/addr://`
fi
PID=`ps -an|grep -e 'UFANET$'|awk '{print $1}'`
#
if [ "" != "$PID" ]
then
kill -HUP $PID
sleep 5
if [ "" != "$INET_IP" ]
then
route=/sbin/route
$route del default
$route add -host 10.8.0.1 gw $defgw
sleep 3
$route add default gw $INET_IP
else
route=/sbin/route
$route del default
$route add -host 10.8.0.1 gw $defgw
sleep 3
$route add default gw $defgw
fi

fi
/etc/rc.d/rc.firewall
#end

Напишем такой же файлик для спутникового канала

#vi start_pptp_sat

#!/bin/bash
#
# /etc/rc.d/rc.local: Local system initialization script.
#
# Put any local setup commands in here:
#Переменная $defgw указывает на шлюз для внешнего интерфейса.
#Его можно выдернуть из вывода команды
#ip route |grep default|awk '{print $3}'
#start pptp tunnel
defgw="10.64.114.1"
pptp=`/sbin/ifconfig |grep ppp`
startpptp()
{
echo "Start pptp link"
/usr/sbin/pptp 10.8.0.1 call UFANET_SAT
sleep 10
#create new route path
INET_IP=`cat /etc/ppp/last_inet_ip`
INET_IF=`cat /etc/ppp/last_inet_if`
route=/sbin/route
$route del default
$route add -host 10.8.0.1 gw $defgw
sleep 3
$route add default ppp2
PPTP=`ifconfig ppp1|grep inet|awk '{print $2}'|sed -e s/addr://`
if [ "" != $PPTP ]
then
#Здесь три строчки для маршрута на сетки уфанета. Зачем нужно ходить
# через узкий канал на дешевые локальные ресурсы.
$route add -net 81.30.176.0 netmask 255.255.240.0 dev ppp1
$route add -net 81.30.192.0 netmask 255.255.224.0 dev ppp1
$route add -net 89.189.128.0 netmask 255.255.240.0 dev ppp1
fi
#
cd /root
echo "PPTP tunnel is up "
sleep 5
/bin/killall squid
sleep 1
/usr/sbin/squid -sD -f /etc/squid/squid.conf &
ipt="/usr/sbin/iptables"
echo "Load firewall rules"
$ipt -I INPUT 6 -p ALL -i lo -s $INET_IP -j ACCEPT
$ipt -I INPUT 7 -p TCP -i $INET_IF --dport 80 -j DROP
$ipt -I INPUT 8 -p TCP -i $INET_IF --dport 20:21 -j DROP
$ipt -I INPUT 9 -p TCP -i $INET_IF --dport 22 -j DROP
$ipt -I INPUT 10 -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -t nat -I POSTROUTING 3 -o $INET_IF -j SNAT --to-source $INET_IP
}

stoppptp()
{
killall -HUP pppd
sleep 5
}

case "$1" in
'start')
startpptp
;;
'stop')
stoppptp
;;
*)
startpptp
esac
exit 0
Также напишем убивалку для этого интерфейса.

#vi kill_pptp_sat

#!/bin/bash
defgw="10.64.114.1"
INET_IP=""
IF=`ifconfig|grep ppp1|awk '{print $1}'`
if [ "" != "$IF" ]
then
INET_IP=`ifconfig ppp1|grep inet|awk '{print $2}'|sed -e s/addr://`
fi
PID=`ps -an|grep -e 'UFANET_SAT$'|awk '{print $1}'`
if [ "" != "$PID" ]
then
kill -HUP $PID
sleep 5
if [ "" != "$INET_IP" ]
then
route=/sbin/route
$route del default
$route del default
$route add -host 10.8.0.1 gw $defgw
sleep 3
$route add default gw $INET_IP
$route del -net 81.30.176.0 netmask 255.255.240.0
$route del -net 81.30.192.0 netmask 255.255.224.0
$route del -net 89.189.128.0 netmask 255.255.240.0
else
route=/sbin/route
$route del default
$route del default
$route add -host 10.8.0.1 gw $defgw
sleep 3
$route add default gw $defgw
fi
fi

Вот практически и все осталось написать скрипт который автоматом бы поднял канал после включения рутера примерно через 3 минуты и автоматически поднимал бы его в случае падения.
Для этого добавим строчку в crontab.
*/3 * * * * /root/ufanet_test.pl
Этот скрипт стартует каждые 3 минуты и проверяет жив ли канал контроллируется только наземный канал. А вот собственно скрипт ufanet_test.pl его я написал на перле. Вообщем без особых проблем он пишется и на shell, но мне так захотелось.

#!/usr/bin/perl
$ppp1=`ifconfig|grep ppp1`;
if ($ppp1 ne "")
{
$ping=`ping -c 3 81.30.199.5|grep loss`;
@result=split /,\s+/, $ping;
$i=0;
foreach $err (@result)
{
if ($err =~ /.+(loss)$/)
{
$i=$i-2;
($proc,$undef,$undef)=split /\s+/,$result[$i];
if ($proc eq '100%')
{
$res=`kill_pptp`;
$res=`start_pptp`;
exit;
}
}
$i=$i++;
}
}
else
{
$res=`kill_pptp`;
$res=`start_pptp`;
}
Ну вот и все. Осталось настроить named и squid. А это тема совсем другой статьи.
С вопросами ко мне в мыльницу ntimmy@mail.ru или в icq 18167449 если будет время отвечу на все ващи вопросы.
Источник
man pppd; man pptp; man iptables
Источник
man pppd; man pptp; man iptables
Вот довольно сырая заготовка статьи писалась для локалки Уфанет.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

13. "Автоподъем pptp linux-клиента на Fedora Core Linux"  +/
Сообщение от Аноним (??) on 25-Июн-09, 02:26 
Хочется отдельно отметить, что при таком способе заботой подъема PPPD занимается один из важных системных процессов - INIT

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

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




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

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