19 мар. 2009 г.

VPN PPTP

Цель: Автоматически подымать VPN PPTP при старте машины, с дальнейшим реконектом при обрывах.

Дано: Клиент ( 2.6.22.9-desktop-1mdv), сервер VPN (пусть будет 172.19.0.1), соединение с параметрами авторизации CHAP/PAP без шифрования трафика. pptp-linux-1.7.1 и ppp-2.4.4

Решение: В связи с тем что провайдер услуги может сегментировать сети, то GW (шлюз) для фейковой сети (сеть провайдера) может измениться, имеет смысл выдергивать его при опускании/поднятии интерфейса глядящего в фейковую сеть, в нашем случае интерфейс eth0.

Создаем скрипт для поднятия VPN
#vi /usr/local/sbin/vpn_up.sh
#chmod a+x /usr/local/sbin/vpn_up.sh


Вписываем в него:
#!/bin/sh

ETH=eth0
SERVVPN=172.19.0.1
NAME=vpnServ
SLEEP=5
LOGFILE=/var/log/ppp/vpn_$NAME.log

while true; do
echo "################# `date +'%D %T'` #################" >> $LOGFILE
/sbin/ifdown $ETH
sleep 4
/sbin/ifup $ETH
sleep $SLEEP

GW1=`/bin/netstat -rn | /bin/egrep -i "^0\.0\.0\.0.*$ETH$" | /bin/awk '{print $2}'`

if [ -n "$GW1" ];then

echo "/sbin/ip route add $SERVVPN via $GW1 dev $ETH" >> $LOGFILE
/sbin/ip route add $SERVVPN via $GW1 dev $ETH
echo "/sbin/route del default" >> $LOGFILE
/sbin/route del default

echo "Starting pppd..." >> $LOGFILE
killall pppd >& /dev/null
sleep 1
killall -9 pppd >& /dev/null
sleep $SLEEP
pppd call $NAME >> $LOGFILE
echo "/sbin/ip route del $SERVVPN via $GW1 dev $ETH" >> $LOGFILE
/sbin/ip route del $SERVVPN via $GW1 dev $ETH

else
echo "Call(up) your Administrator. Go! go! go!" >> $LOGFILE
echo "No found default Gateway for interface $ETH" >> $LOGFILE
/sbin/ifconfig $ETH >> $LOGFILE
/bin/netstat -rn >> $LOGFILE
fi

echo "DONE. Sleep for $SLEEP seconds and restart find default Gateway ..." >> $LOGFILE
done


Правим файлик options
#vi /etc/ppp/options


local
lock
nodetach
lcp-echo-interval 30
lcp-echo-failure 5
require-pap
require-chap
defaultroute
noauth


Вносим данные для учетной записи VPN
#vi /etc/chap-secrets


login * pass *

Не забываем в конце строки поставить перенос строки!

и правим данные нужные для коннекта
#vi /etc/ppp/peers/vpnServ



name login
remotename 172.19.0.1
debug
lock
deflate 0
defaultroute
file /etc/ppp/options
pty "/usr/sbin/pptp 172.19.0.1 --nolaunchpppd"

login меняем на свой.


вписываем запуск данного скрипта при запуске машины
#vi /etc/rc.local


/usr/local/sbin/vpn_up.sh &


Примечание: Данный скрипт можно крутить как угодно, с некоторыми переделками возможно использование для двух и более одновременно подымаемых VPN. Но мне онное и не надо, попрасили слепить что бы автоматом на одно VPN, слепил на скорую руку.

1 комментарий:

  1. Хороший напильник. Шершавый.
    Хохма в том, что Mandriva до сих пор использует какую-то достаточно бородатую - и к тому же частично глючную - сборку pppd. И в OpenSUSE (по крайней мере, 11.1) и в Ubuntu (по крайней мере, 9.04) pppd имеет прекрасную опцию - replacedefaultroute - которая решает задачу замены маршрутов абсолютно без программирования.
    А еще можно добавить, что в debian-based дистрибутивах задача подъема ppp-соединения при загрузке решается добавлением двух строчек в /etc/network/interfaces (пример есть в мане).
    Ну а файл /etc/rc.local - это что-то вообще из арсенала старого слакварщика.
    А в остальном - ничего напильник - должен работать ;)

    ОтветитьУдалить