pptp-command
Доброго времени суток, линуксоиды.
Я уже задавал этот вопрос, меня отослали к манам. Я понимаю,
что правильно сделали. :) Но проблема манами не решилась:
Настроил по статье на Open.net pptp с помощью
pptp-command setup
Ввёл CHAP реквизиты.
После попыток запустить pptp-commnd start
до-о-о-о-олго думает, потом
Time out.
Вот что говорит Syslog:
Oct 24 20:35:39 10 pptp[2884]: anon log[main:pptp.c:243]: The synchronous pptp
option is NOT activated
Oct 24 20:35:39 10 pptp[2887]: anon log[ctrlp_rep:pptp_ctrl.c:243]: Sent control
packet type is 1 'Start-Control-Connection-Request'
Oct 24 20:35:39 10 pptp[2887]: anon log[ctrlp_disp:pptp_ctrl.c:721]: Received
Start Control Connection Reply
Oct 24 20:35:39 10 pptp[2887]: anon log[ctrlp_disp:pptp_ctrl.c:755]: Client connection
established.
Oct 24 20:35:40 10 pptp[2887]: anon log[ctrlp_rep:pptp_ctrl.c:243]: Sent control
packet type is 7 'Outgoing-Call-Request'
Oct 24 20:35:40 10 pptp[2887]: anon log[ctrlp_disp:pptp_ctrl.c:841]: Received
Outgoing Call Reply.
Oct 24 20:35:40 10 pptp[2887]: anon log[ctrlp_disp:pptp_ctrl.c:880]: Outgoing
call established (call ID 0, peer's call ID 10).
Oct 24 20:35:40 10 kernel: CSLIP: code copyright 1989 Regents of the University
of California
Oct 24 20:35:40 10 kernel: PPP generic driver version 2.4.2
Oct 24 20:35:40 10 pppd[2896]: pppd 2.4.2 started by root, uid 0
Oct 24 20:35:40 10 pppd[2896]: Using interface ppp0
Oct 24 20:35:40 10 pppd[2896]: Connect: ppp0 <--> /dev/pts/3
Oct 24 20:35:42 10 pptp[2887]: anon log[ctrlp_disp:pptp_ctrl.c:933]: PPTP_SET_LINK_INFO
received from peer_callid 0
Oct 24 20:35:42 10 pptp[2887]: anon log[ctrlp_disp:pptp_ctrl.c:936]: send_accm
is 00000000, recv_accm is 00000000
-------Вот видимо главная ошибка
Oct 24 20:35:45 10 pppd[2896]: Unknown MS-CHAP authentication failure: E=691
R=1 C=76A6829EC51945B3EEE52F5A95D5D6AC V=3
Oct 24 20:35:45 10 pptp[2887]: anon log[ctrlp_disp:pptp_ctrl.c:933]: PPTP_SET_LINK_INFO
received from peer_callid 0
Oct 24 20:35:45 10 pptp[2887]: anon log[ctrlp_disp:pptp_ctrl.c:936]: send_accm
is 00000000, recv_accm is 00000000
Oct 24 20:35:45 10 pppd[2896]: Connection terminated.
Oct 24 20:35:45 10 pppd[2896]: Exit.
Oct 24 20:35:45 10 pptp[2908]: anon warn[decaps_hdlc:pptp_gre.c:197]: short read
(-1): Input/output error
Oct 24 20:35:45 10 pptp[2908]: anon warn[decaps_hdlc:pptp_gre.c:209]: pppd may
have shutdown, see pppd log
Oct 24 20:35:45 10 pptp[2887]: anon log[callmgr_main:pptp_callmgr.c:228]: Closing
connection
Oct 24 20:35:45 10 pptp[2887]: anon log[ctrlp_rep:pptp_ctrl.c:243]: Sent control
packet type is 12 'Call-Clear-Request'
Oct 24 20:35:45 10 pptp[2887]: anon log[ctrlp_disp:pptp_ctrl.c:912]: Call disconnect
notification received (call id 10)
Oct 24 20:35:45 10 pptp[2887]: anon log[ctrlp_rep:pptp_ctrl.c:243]: Sent control
packet type is 12 'Call-Clear-Request'
Oct 24 20:35:45 10 pptp[2887]: anon log[pptp_conn_close:pptp_ctrl.c:425]: Closing
PPTP connection
Oct 24 20:35:45 10 pptp[2887]: anon log[ctrlp_rep:pptp_ctrl.c:243]: Sent control
packet type is 3 'Stop-Control-Connection-Request'
Oct 24 20:35:45 10 pptp[2887]: anon log[ctrlp_disp:pptp_ctrl.c:782]: Received
Stop Control Connection Reqply.
Oct 24 20:35:45 10 pptp[2887]: anon log[call_callback:pptp_callmgr.c:77]: Closing
connection
Кто может подсказать как это вылечить?
В мане есть Exemple с использованием pppd, но я не знаю назначения ни
одного параметра в том примере. Они все настраиваются в
/etc/pppd/configure.pptp, но что они означают...
Русскин Алексей пишет:
Привожу как это настраивал я вручную без всяких гуи и пр. Работало на
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/
создаем файл
(забыл сказать - все это под 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
(подставьте свои значения)
Запуск подключения:
Останов подключения:
от root
Чтобы запускать от пользователя используем sudo
В файл /etc/sudoers добавляем строчку
имя_пользователя имя_своего_хоста = NOPASSWD: /etc/init.d/pptp
Теперь запуск выглядит так:
И в качестве бонуса скриптик гуи для подключения используя утилитку 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
else
Xdialog --yesno "Подключиться к VPN?" 7 40 && sudo $SCRIPT start >/dev/null
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