The OpenNET Project / Index page

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

Настройка PPTP клиента в Linux (pptp vpn linux ppp)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: pptp, vpn, linux, ppp,  (найти похожие документы)
From: vadim303 <http://vadim303.wordpress.com>; Date: Sun, 29 Feb 2008 17:02:14 +0000 (UTC) Subject: Настройка PPTP клиента в Linux Оригинал: http://vadim303.wordpress.com/linux/linux-vpn/ Мой провайдер предоставляет доступ в интернет посредством VPN. В истории этого протокола я не разбирался, но сложилось впечатление, что к созданию приложило руку Microsoft. Как бы то ни было, но Linux в плане настройки изначально сильно не дружил с VPN. Но времена меняются и рецептов для соединения Linux-станции с VPN-сервером в сети появилось предостаточно, в том числе и на русском. Но одни у меня не заработали, другие были не слишком удобны в использовании, третьи... вобщем пришлось для себя собирать рецепт по кусочкам из разных мест. Внимание! Всё ниже сказанное относится к сети Cinet города Королёва применительно к дистрибутиву Slackware 11.0 (ядро 2.6.17.13). Настройки для вашего провайдера могут отличаться. Пытайте админов. :) Итак, вот что у меня в результате получилось: Во первых нам понадобятся установленные пакеты: пакет из дистрибутива Slackware ppp-2.4.4-i486-1.tgz (путь: /дистрибутив/slackware/n/) и пакет PPTP Client (домашняя страница). Для Slackware специально подготовленного пакета pptp не было, так что я взял исходник pptp-1.7.1.tar.gz. Далее стандартная комбинация: $ tar -xvvzf pptp-1.7.1.tar.gz $ cd pptp-1.7.1 $ make $ sudo make install Замечу, что установка PPTP Client предполагает что pppd установлен в /usr/sbin.Если это не так - читайте INSTALL. Далее, создаём файл /etc/ppp/peers/имя_соединения (я соединение назвал cinet) со следующим содержимым: name ваш_логин remotename PPTP debug lock deflate 0 defaultroute pty "pptp адрес_vpn_сервера --nolaunchpppd" Свой логин я не скажу :) а vpn сервер в моём случае это vpn.cinet.lan. Здесь может быть и ip-адрес, но это неудачное решение - а если провайдер его сменит? Раз провайдер даёт имя серверу, лучше пользовать именно его. Только одно но: важно, чтобы при установке соединения не потерялся маршрут к локальному dns (если кто забыл, например я :) , то адрес dns прописывается в /etc/resolv.conf). Указание debug можно всегда удалить, но если что-то не работает, то эта опция включает подробный вывод ошибок в лог, который обычно помогает определить в чём проблема. Указание defaultroute при установке соединения, как и положено, перенаправляет весь трафик на шлюз vpn. Но при этом у меня становятся недоступны адреса в локальной сети, в т.ч. и dns-сервер. Как это обойти читаем чуть дальше. Пароль для соединения прописывается в файле /etc/ppp/chap-secrets строкой вида: ваш_логин * "ваш_пароль" * В файле /etc/ppp/options.pptp идут настройки характерные для моего провайддера. У вас они могут быть и другие. В частности, бывает нужно включать шифрование - тогда смотрите опции mppe, в добавок должна быть поддержа mppe ядром (включена начиная с 2.6.15. Если у вас ниже - читайте страницу PPTP Client-а). Если не знаете параметры mtu и mru , то их обычно можно поставить 1000. Ещё вычитал про параметр persist - он заставляет пересоединяться при потери соединения. Пока я его работу не проверял, так что в конфиге он закомментирован. Когда с ним поэкспериментирую - расскажу. Но это всё лирика, а вот и содержимое моего файла /etc/ppp/options.pptp : lock mtu 1490 mru 1490 deflate 0 auth +chap -pap nobsdcomp nodeflate defaultroute #persist Теперь что касается сохранения маршрута к локальным адресам. В моём случае все локальные адреса удовлетворяют маске 10.*.*.*. Поэтому можно перед соединением с vpn удалить маршрут по умолчанию (он будет установлен на vpn-шлюз по ходу установки соединения) и добавить маршрут к адресам локальной сети: # route del default # route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.0.0.50 здесь 10.0.0.0 - адрес локальной сети, 255.0.0.0 - её маска удовлетворяющая вышеописанному случаю, ну и 10.0.0.50 - адрес шлюза в моей локальной подсетке. В принципе теперь достаточно дать команду # pppd call имя_соединения и весь интернет в наших руках. Лишь бы денег хватило :) Но во-первых - это надо делать с правами рута, а во-вторых слишком много каждый раз набирать. Конечно в таких случаях пишется скрипт и прописываются права на его исполнение с помощью команды sudo обычному пользователю (права пишутся в файле /etc/sudoers). Я поначалу так и сделал. Но потом возникла необходимость в отключении соединения или его рестарте, а также автоматическом запуске соединения при загрузке системы. Вобщем в результате был написан скрипт похожий на те, что лежат в /etc/rc.d и служат для запуска и остановки разных служб при старте и выключении системы. Разве у нас не тот случай? Для поддержания работы соединения, сама команда соединения была обрамлена циклом и вынесена в отдельный скрипт. Итак, собственно скрипты: Файл /etc/rc.d/rc.vpn: #!/bin/sh GATEWAY="10.0.0.50" LINE="--------------------------------------------" VPNFLAG="/tmp/vpn-connected" export VPNFLAG VPNLOG="/var/log/vpn.log" export VPNLOG start() { # установка соединения с vpn-сервером echo -n "Starting VPN connection... " # проверяем: включено ли уже соединение if [ ! -f $VPNFLAG ]; then # не включено - включаем echo -e "n$LINEnStarting at `date`" >> $VPNLOG # устанавливаем флаг необходимости переподключения echo `date` > $VPNFLAG # подготавливаем маршруты к поднятию нового интерфейса route del default 2>/dev/null route add -net 10.0.0.0 netmask 255.0.0.0 gw $GATEWAY 2>/dev/null # запускаем цикл проверки и установки соединения в фоне /sbin/vpn.sh & echo "done." else # уже включено - ничего не делаем echo "already been stated." fi } stop() { # закрытие соединения с vpn-сервером echo -n "Stopping VPN connection... " echo -e "nStopping at `date`n$LINE" >> $VPNLOG # удаляем флаг необходимости переподключения if [ -f $VPNFLAG ]; then rm -f $VPNFLAG fi # проверяем запущен ли pptp pptp_num=`ps axw | grep "pptp:" | wc -l` # считаем число процессов содержащих строку pptp: if [ $pptp_num -gt 1 ]; then # если больше 1 (вместе с фильтром grep "pptp:"), то убиваем соединения killall pppd 2>/dev/null # восстанавливаем маршруты route del default 2>/dev/null route add default dev eth0 2>/dev/null echo "done." else echo "VPN not started." fi } case "$1" in 'start') # установка соединения с vpn-сервером start ;; 'stop') # закрытие соединения с vpn-сервером stop ;; 'restart') # перезапуск соединения с vpn-сервером stop sleep 3 start ;; 'boot') # при загрузке системы нужно очистить флаг соединения # на тот случай если перед этим система была завершена некорректно if [ -f $VPNFLAG ]; then rm -f $VPNFLAG fi start ;; *) # вывод информации об использовании скрипта echo -e "Usage: `basename $0` {start|stop|restart}" esac Файл /sbin/vpn.sh: #!/bin/sh # пока включён флаг нужно поддерживать включённым соединение с VPN: while [ -f $VPNFLAG ]; do pptp_num=`ps axw | grep "pptp:" | wc -l` # считаем число процессов содержащих строку pptp: # должно быть 3 (вместе с фильтром grep "pptp:"): if [ $pptp_num -lt 3 ]; then # меньше 3-х. значит что-то не так с соединением. echo "let's go:" >> $VPNLOG # на всякий случай убиваем все оставшиеся процессы: killall pptp 2>/dev/null sleep 3 # стартуем pptp pppd call cinet >> $VPNLOG echo -e "run at `date`" >> $VPNLOG fi # ждём 5 минут прежде чем проверять соединение снова sleep 300 done Ещё я добавил установку соединения при загрузке. В файле /etc/rc.d/rc.M, сразу после строк запуска /etc/rc.d/rc.inet2 добавил строки: # Start VPN if [ -x /etc/rc.d/rc.vpn ]; then . /etc/rc.d/rc.vpn boot fi Ну и разрыв соединения при перезагрузке ситемы. Для этого в файле /etc/rc.d/rc.6 непосредственно перед убийством процессов pppd (# Try to shutdown pppd) добавляем строки: # Stop VPN if [ -x /etc/rc.d/rc.vpn ]; then /etc/rc.d/rc.vpn stop fi Вот вроде пока это всё, что касается настройки VPN на моей машине. Использованные материалы при создании всего этого: * прежде всего информация по параметрам соединения предоставленная провайдером - без неё никак. Разве что методом тыка, но тыкать можно долго :) ; * Несколько веток о настройке VPN в разных дистрибутивах, в частности: Настройка VPN клиента в linux, есть предложение сделать универсальный скрипт , [HOWTO] Настройка VPN в Debian GNU/Linux , [HOWTO] Настройка VPN в ALT Linux 2.4 Master, Полная и рабочая инструкция

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]

игнорирование участников | лог модерирования

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




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

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