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