логотип
Настройка VPN в Linux

Для создания VPN-соединения в linux'e надо установить PPTP-клиента (PPTP - Point to Point Tunneling Protocol) и pppd - демона PPP (PPP - Point to Point Protocol) c поддержкой MPPE (MPPE - Microsoft Point-To-Point Encryption).

  1. Установка pptp-клиента.

    Для установки PPTP клиента под Linux необходимо установить программу pptpclient, исходный код которой можно скачать либо с сервера SourceForge, либо с нашего ftp-сервера (файл pptp-linux-1.5.0.tar.gz). Для RPM-based систем - файл pptp-linux-1.5.0-1.i386.rpm - уже скомпилированный, либо pptp-linux-1.5.0-1.src.rpm - в исходниках.
    Для установки бинарного пакета руководствуйтесь документацией на Ваш пакетный менеджер.

    Для установки из исходных текстов распакуйте архив следующими командами:
    $ tar -xzvf pptp-linux-1.3.1.tar.gz
    $ cd pptp-linux-1.3.1
    
    Для сборки pptp Вам понадобятся программы gcc и make. Наберите команду
    $ make
    
    и из-под root'а
    $ make install
    
    для его установки.

  2. Установка PPPD.
    Скачиваем два файла: ppp-2.4.2+mppe.tar.gz и ppp-2.4.2b3.tar.gz. В первом есть mppe-патчи для ядра. А второй - просто посвежее. Распаковываем первый.
    $ tar -xzvf ppp-2.4.2+mppe.tar.gz
    $ cd ppp-2.4.2
    
    переходим в каталог linux
    $ cd linux/mppe
    
    и запускаем скрипт, который пропатчит ядро на предмет MPPE
    $ sh ./mppeinstall.sh /usr/src/linux
    
    Подразумевается, что исходники Вашего ядра установлены.
    Переходим в каталог ppp-2.4.2b3
    $ cd ../../ppp-2.4.2b3
    
    Конфигурируем, запускаем компиляцию
    $ ./configure
    $ make
    
    и устанавливаем готовый pppd
    $ make install
    

  3. Компиляция ядра.
    На предыдущем шаге на ядро был наложен патч, который добавляет в него MPPE. Теперь надо задействовать этот патч.
    $ cd /usr/src/linux
    $ make menuconfig
    
    в разделе "Network device support" надо включить поддержку PPP - "PPP (point-to-point) support". Если у Вас ядро 2.2.х, то этого достаточно, если же ядро 2.4.х, то надо также отметить пункты "PPP Deflate compression", "PPP BSD-Compress compression", "PPP MPPE compression (encryption)". Вы можете включить указанную поддержку как в виде модулей, так и внедрить в ядро. После этого выполнить
    $ make dep
    $ make
    $ make modules && make modules_install
    $ make install
    
    Если поддержка ppp и mppe была включена в виде модулей, то в файл /etc/modules.conf (или /etc/conf.modules - зависит от дистрибутива) надо добавить строки:
    для ядра 2.4:
    alias /dev/ppp          ppp_generic
    alias char-major-108    ppp_generic
    alias tty-ldisc-3       ppp_async
    alias tty-ldisc-14      ppp_synctty
    alias ppp-compress-18   ppp_mppe
    alias ppp-compress-21   bsd_comp
    alias ppp-compress-24   ppp_deflate
    alias ppp-compress-26   ppp_deflate
    
    для ядра 2.2:
    alias tty-ldisc-3       ppp
    alias ppp-compress-21   bsd_comp
    alias ppp-compress-24   ppp_deflate
    alias ppp-compress-26   ppp_deflate
    alias ppp-compress-18 ppp_mppe
    
    После этого надо перезагрузиться.

  4. Настройка PPPD.
    Файлы настроек pppd находятся в каталоге /etc/ppp.
    файл /etc/ppp/options
    local
    lock
    nodetach
    
    mtu 1512
    mru 1512
    
    require-mppe-40
    require-mppe-128
    require-mppe
    
    lcp-echo-interval 30
    lcp-echo-failure 5
    
    require-mschap-v2
    refuse-pap
    refuse-chap
    refuse-mschap
    refuse-eap
    
    defaultroute
    
    user ВАШ_ЛОГИН
    noauth
    
    Вместо ВАШ_ЛОГИН надо вписать свой логин для авторизации на vpn-сервере.
    В файл chap-secrets надо прописать одну строку
    ВАШ_ЛОГИН	*	ВАШ_ПАРОЛЬ	*
    
    ВАШ_ЛОГИН и ВАШ_ПАРОЛЬ заменить, соответственно на логин и пароль. После чего выполнить команду
    $ chmod 400 chap-secrets
    
    На этом настройка pppd закончена.

  5. Настройка маршрутизации.
    В /etc/ppp/options прописана одна из опций - defaultroute. Она предназначена для того, чтобы после поднятия соединения pppd добавил в таблицу маршрутов дефолтный маршрут через pptp-cоединение. Это не будет сделано, если в системе уже имеется маршрут по умолчанию. Поэтому его надо удалить:
    $ route del default
    
    Но т.к. vpn-сервер находится за пределами локальной сети, то пакеты на него ходить не смогут, поэтому надо поднять маршрут на vpn-сервер.
    $ route add -net 192.168.55.32 netmask 255.255.255.224 gw <ваш_шлюз>
    
    также надо поднять маршруты на dns-сервера
    $ route add -net 79.134.0.0 netmask 255.255.255.252 gw <ваш_шлюз>
    
    Чтобы эти маршруты поднимались сразу после загрузки системы, их надо прописать в стартовы скрипты или конфигурационные файлы (зависит от используемого дистрибутива). Остается одна проблема - после установки vpn-соединения надо удалить маршрут на dns-сервера, а после отключения соединения - вновь поднять его. Если этого не сделать, то во время сеанса Вам будет надоступны почтовый сервер mgn.ru, ftp-сервер. Поэтому воспользуемся возможностями pppd - после поднятия IP поверх ppp-линка он выполняет скрипт /etc/ppp/ip-up, а по окончании связи - /etc/ppp/ip-down. в первый скрипт добавим строки:
    route del -net 79.134.0.0 netmask 255.255.255.252 gw <ваш_шлюз>
    
    а во второй:
    route add -net 79.134.0.0 netmask 255.255.255.252 gw <ваш_шлюз>
    

  6. Установка соединения.
    Запуск vpn-соединение производится с помощью команды
    $ pptp <vpn-сервер>
    
    В нашем случае:
    $ pptp vpn.mgn.ru
    
    Для сохранения постоянного соединения можно создать скрипт /usr/local/bin/pptp-run:
    #!/bin/bash
    
    LOG="/var/log/pptp-run.log"
    while true; do
            echo -e "\n========================\n`date`" >> $LOG
            /usr/sbin/pptp vpn.mgn.ru >> $LOG
            sleep 20;
    done
    
    Этот скрипт будет запускать vpn-соединение на vpn.mgn.ru. В случае неудачи или разрыва связи будет делать паузу 20 с и повторять попытку. А чтобы он запускался автоматически после загрузки компьютера достаточно подгружать этот скрипт из стартовых скриптов. Для RedHat-подобной системы можно использовать скрипт /etc/rc.d/init.d/pptp-client:
    #!/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
    
    RETVAL=0
    
    # See how we were called.
    case "$1" in
      start)
            echo -n "Starting system pptp-client: "
            # we don't want the MARK ticks
            nohup /usr/local/bin/pptp-run >/dev/null 2>&1 &
            success
            RETVAL=$?
            echo
            ;;
      stop)
            echo -n "Shutting down system pptp-client: "
            killproc pppd
            killproc pptp-run
            killproc pptp
            RETVAL=$?
            echo
            [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/pptp-client
            ;;
      status)
            status pptp
            RETVAL=$?
            ;;
      restart|reload)
            $0 stop
            $0 start
            RETVAL=$?
            ;;
      *)
            echo "Usage: pptp-client {start|stop|status|restart}"
            exit 1
    esac
    
    exit $RETVAL
    


При возникновении проблем - звоните в нашу службу технической поддержки по телефону 212-474, либо пишите на support@mgn.ru
Вернуться к выбору настроек программного обеспечения.