Re: pptp-command
Русскин Алексей пишет:
> Доброго времени суток, линуксоиды.
>
> Я уже задавал этот вопрос, меня отослали к манам. Я понимаю, что
> правильно сделали. :) Но проблема манами не решилась:
>
> Настроил по статье на Open.net pptp с помощью pptp-command setup
>
Привожу как это настраивал я вручную без всяких гуи и пр. Работало на
ASPLinux7.3, теперь также работает на Mandrake 10.1 Все эти настройки
поставляемые с дистром у меня не заработали - разбираться дальше не стал,
настроил по своему.
Итак:
1. Идем в /etc/ppp
-файл опций pppd (через который и осуществляется соединение точка-точка
с провайдером сквозь ethernet), который он смотрит первым: /etc/ppp/options
у меня тут всего одна строка
lock #(создавать файл блокировки - все что в скобках - в файле быть не должно)
(не забываем про возврат каретки после последней строки в конф. файлах :)
-файл оций pppd нашего pppt соединения, назовем его pptp.options, кладем
его в /etc/ppp/peers/
его минимальный рабочий вид:
#require-mppe-40
#require-mppe-128
#require-mppe
#lcp-echo-interval 30
lcp-echo-interval 120 #(не помню зачем :)
lcp-echo-failure 5 #(-"-)
require-mschap-v2
refuse-pap
refuse-chap
refuse-mschap
refuse-eap
defaultroute #(указывает pppd после соединения установить маршрут по умолчанию
на шлюз #провайдера)
noauth #(не аутентифицировать сервер провайдера)
nomppe
2. Идем в /etc/sysconfig/network-scripts/
создаем файл
>touch ifcfg-pptp0 chmod 0755 ifcfg-pptp0
(забыл сказать - все это под root)
его вид:
ONBOOT=no #(если надо подкл. сразу при загрузке - то yes)
BOOTPROTO=static
PEERDNS=no #(у меня свой сервер DNS, поэтому no, обычно надо yes, тогда
после соединения pppd пропишет адреса DNS выданные провайдерским
сервером в /etc/resolv.conf)
DEVICE=pptp0
USERCTL=no
PERSIST=no
DEBUG=yes
DEFROUTE=yes #(очень нужная опция - у нас она дублируется с pptp.options)
PPPOPTIONS="call options.pptp" #(указываем pppd прочесть наш файл
/etc/ppp/peers/pptp.options)
VPN_HOST=192.168.122.21 #(ip сервера VPN провайдера, в примере
выдуманный, надо подставить свой)
VPN_USER=имя #(имя пользователя, т.е. логин входа на сервер провайдера
по VPN)
3. Тут приведу тексты скриптов, взятых из ASPLinux7.2, т.к. в mandrake я
их не нашел.
Файл /etc/sysconfig/network-scripts/ifup-pptp
#!/bin/sh
# Based on Red Hat's ppp scripts
# MSG - yinya***@e*****.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 [ "${DEFROUTE}" = yes ] ; then
# pppd will no longer delete an existing default route
# so we have to help it out a little here.
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
Файл /etc/sysconfig/network-scripts/ifdown-pptp
#!/bin/bash
# Based on Red Hat's ppp scripts
# MSG - yinya***@e*****.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
Можно конечно все это и короче, и одной командой сделать, но над ней возможно
придется покорпеть
дольше.
4. Теперь нужно указать пароль chap аутентификациии
/etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
имя * пароль *
разумеется вместо имя и пароль нужно вставить настоящие и установить владельца
файла root и
разрешение 0600
5. Теперь само подключение. Я использовал для этого самопальный init скрипт
/etc/init.d/pptp
#!/bin/sh
#
# pptp-client Start pptp-client
#
#
# chkconfig: 2345 30 99
# description: PPTP client
#
# Source function library.
. /etc/rc.d/init.d/functions
#[ -f /usr/sbin/pptp -a -f /usr/local/bin/pptp-run ] || exit 0
[ -f /usr/sbin/pptp ] || exit 0
RETVAL=0
# See how we were called.
case "$1" in
start)
route add -host 192.168.122.21 gw 172.27.23.1 eth0
echo -n "Starting system pptp-client: "
nohup /etc/sysconfig/network-scripts/ifup ifcfg-pptp0 >/dev/null 2>&1
&
success
RETVAL=$?
echo
;;
stop)
echo -n "Shutting down system pptp-client: "
/etc/sysconfig/network-scripts/ifdown ifcfg-pptp0
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/pptp-client
route del -host 192.168.122.21 gw 172.27.23.1 eth0
;;
status)
status pptp
RETVAL=$?
;;
restart|reload)
$0 stop
$0 start
RETVAL=$?
;;
*)
echo "Usage: pptp-client {start|stop|status|restart}"
exit 1
esac
exit $RETVAL
где 192.168.122.21 - адрес сервера VPN провайдера
192.168.122.21 - шлюз по умолчанию из локальной сети к серверу VPN
(подставьте свои значения)
Запуск подключения:
>/sbin/service pptp start
Останов подключения:
>/sbin/service pptp stop
от root
Чтобы запускать от пользователя используем sudo
В файл /etc/sudoers добавляем строчку
имя_пользователя имя_своего_хоста = NOPASSWD: /etc/init.d/pptp
Теперь запуск выглядит так:
>sudo /sbin/service pptp start
И в качестве бонуса скриптик гуи для подключения используя утилитку Xdialog
Создаем файлик например vpnsw.sh, делаем его исполняемым
#!/bin/bash
SCRIPT=/etc/init.d/pptp
if [ ! -f $SCRIPT ]; then
Xdialog --msgbox "Не найден скрипт запуска $SCRIPT" 7 40
exit 0
fi
if [ -f /var/run/ppp-pptp*.pid ]; then
Xdialog --yesno "Отключиться от VPN?" 7 40 && sudo $SCRIPT stop >/dev/null
2>&1 &
else
Xdialog --yesno "Подключиться к VPN?" 7 40 && sudo $SCRIPT start >/dev/null
2>&1 &
fi
Возможно где-то вкрались ошибки.
Если что не понятно - пишите.
Извиняйте за объем.
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 22229; Возраст листа: 823; Участников: 1442
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/462605