Slackware. Сила - в знании

Подключение к VPN серверу из Slackware Linux, используя MPPE-128 шифрование



Имеем:

  • VPN сервер на Windows/Linux
  • Slackware Linux на клиентском компьютере
  • Желание подключится с этого компьютера на VPN сервер

Нам необходимо:

Установка:

      Скачиваем и устанавливаем нужные пакеты для нашей системы. Пакет ppp имеется в дистрибутиве slackware, так что установить его можем простой командой

swaret --install ppp

      В ядрах 2.6.15.x уже включена поддержка MPPE128. Если же у Вас более раннее ядро, то Вам необходимо или обновить его, или скачать патчи для вашего ядра с сайта http://poptop.sourceforge.net.

Настройка:

      Создаем директорию /etc/ppp/peers. В этой директории будут располагаться файлы с настройками вашего VPN соединения. Для примера создадим файл /etc/ppp/peers/ispname. В нем прописываем всего две строки:

pty "pptp you_vpn_server_name_here --nolaunchpppd"
file /etc/ppp/ispname.pptp
     В первой строке после слова pptp указываем имя или ip адрес вашего VPN сервера. Во второй строке указываем имя файла, в котором будут храниться опции вашего VPN соединения с конкретным провайдером.

      Создаем файл /etc/ppp/ispname.pptp и прописываем уже в него все опции нашего VPN соединения. Например, /etc/ppp/ispname.pptp:

lock
noauth
refuse-eap
refuse-chap
refuse-mschap
nobsdcomp
nodeflate
require-mppe-128
nodetach
user user_name
debug
mtu 1452
mru 1452
defaultroute

      Если вы не хотите использовать шлюз VPN как шлюз по умолчанию, то строку defaultroute нужно закомментировать, а после установки соединения прописать нужные маршруты самостоятельно.

      Опцию debug используем для вывода нам всех возможных ошибок при установке соединения. В строке user указываем Ваш логин на VPN сервер.

      В файле /etc/ppp/chap-secrets прописываем строку

"login" * "password" *
в которой соответственно вписываем Ваш логин и пароль. Логин должен быть такой же как и в предыдущем файле строка user.

      Затем выставим права на этот файл:

chmod 600 /etc/ppp/chap-secrets

      Для поддержания постоянного соединения с вашим VPN сервером удобно будет использовать следующий скрипт:

/root/scripts/vpn_start:

#!/bin/bash

LOG="/var/log/pptp-isp.log"
while true; do
   echo -e "\n========================\n`date`" >> $LOG
   pppd call ispname >> $LOG
   sleep 10;
done

      Обратите внимание на выделенное слово ispname. Это и есть как раз имя того самого первого файла /etc/ppp/peers/ispname. Если меняется оно, то и в скрипте нужно тоже произвести замену.

      В итоге мы получаем постоянно работающий скрипт, запуск которого вызывает поднятие PPTP туннеля до провайдера, и при падении связи через 10 секунд постоянно производится перезапуск туннеля. Весь лог PPTP соединения мы будем видеть в файле /var/log/pptp-isp.log. Для того, чтобы запускать данный скрипт в фоне, делаем так (в rc.local, например):

nohup /root/scripts/vpn_start >/dev/null 2>&1 &
Так делали до Путина. При внимательном прочтении man pppd открываются его нормальные фичи. Признаюсь, я тоже невнимательно читал этот man в своё время :-). И так, интересующие нас опции следующие:
  persist
         Do not exit after a connection is terminated; instead try to reopen the  connection.  The
         maxfail option still has an effect on persistent connections.
Сперва я это отнёс к модемному соединению и даже не пытался использовать для pptp, оказалось зря :-). Для нас это означает, что pppd сам умеет реконнектиться и никакого скрипта ему для этого не требуется.
  maxfail n
         Terminate  after  n consecutive failed connection attempts.  A value of 0 means no limit.
         The default value is 10.
Тут всё понятно, нам нужен 0.

Хотелось бы предостеречь от тупого использования таких опций и разного рода скриптов автоподнятия. Если по каким-то причинам учётные данные вашего pptp окажутся заблокированными или вы просто забудете отключить "автодозвон" после отказа от использования акаунта, то на стороне сервера вы начнёте заполонять логи. Серверу конечно ничего не будет, но это может не понравится тем, кто иногда читает эти логи. Если вы будете думать что-то типа "да мне пофик на логи этого сервера и особенно на тех, кто их читает!", не удивляйтесь потом, если у вас что-то совсем перестанет работать ;-). Добавляем эти опции в файл /etc/ppp/ispname.pptp, запускаем:
# pppd call ispname.pptp
Однажды я где-то нашёл скрипт, который называется pptpsetup, запустил. Скрипт создал такой файл:
# cat /etc/ppp/peers/vpn
---------------------------------------
pty "pptp vpn.tomsk.net --nolaunchpppd"
lock
noauth
nobsdcomp
nodeflate
name test
remotename vpn
ipparam vpn

persist
maxfail 0
---------------------------------------
Последние две строчки я добавил позже. Запускаю так:
# pppd call vpn
И всё. Теперь после завершения pptp сессии по любым причинам pppd будет стараться поднять сессию снова. Приписываем эту команду в /etc/rc.d/rc.local если нужно поднимать соединение после перезагрузки. Идея была подсмотрена в openwrt. Это значит, что все SOHO маршрутизаторы (длинки, асусы, линксисы и т.п.) даже в своих прошивках от вендора держат своё соединение так же :-).

Modified by warm (2010-03-09)

2006
Khalal