Прокачиваем PPTP-сервер или чем заменить Poptop



    Введение


    На сервере доступа в качестве pptp-сервера стоял проверенный Poptop последней стабильной версии (1.3.4). И все бы ничего, да вот только после повышения скоростей на тарифах производительность cервера начала проседать под увеличившейся нагрузкой. Причем очень значительно, так как этот pptp-сервер работает в режиме пользователя, а не ядра. Постоянные копирования пакетов и непосредственно с этим связанные операции переключения контекста, на выполнение которой также расходуются вычислительные ресурсы, вызвали серьезную деградацию производительности сервера при увеличившемся объеме передаваемого трафика. Необходимо было действовать.

    Установка


    Я уже слышал про accel-pptp и читал положительные отзывы о нем, а вот теперь настала пора попробовать его в деле.

    Все действия будем производить в OC CentOS 5.7 x86_64.

    Распространяется accel-pptp в исходных кодах. Сам проект хостится на SourceForge, поэтому заходим на сайт проекта и качаем свежую версию (на момент написания этих строк — 0.8.5). В ОС, где мы будем разворачивать pptp-сервер, уже должны стоять ppp, а также все необходимое для сборки из исходников, включая исходные коды и заголовочные файлы ядра:
    yum install kernel-headers kernel-devel
    

    Не забываем проверить соответствие версий установленного ядра и устанавливаемых пакетов. Они должны соответствовать, иначе — обновлять ядро или искать и ставить версии пакетов для установленного ядра. Такое происходит, когда ОС давно не обновлялась, и в репозиториях лежат пакеты более новых версий.
    После этого переходим в каталог с архивом исходников и распаковываем его:
    tar xjf accel-pptp-0.8.5.tar.bz

    Затем переходим в распакованный каталог:
    cd accel-pptp-0.8.5

    Файл README содержит, в принципе, достаточно информации по требованиям к системе, а также по установке. Можно заглянуть в сам Makefile и посмотреть, что именно будет собираться и устанавливаться. Для компиляции pptp-сервера выполняем команду:
    make server

    Для установки сервера выполняем:
    make server_install

    Исполняемый файл ставится по умолчанию в каталог /usr/local/sbin
    Проверяем, как собрался и установился:
    /usr/local/sbin/pptpd -v

    Должна появиться строчка вроде этой:
    accel-pptpd v0.8.5 compiled for pppd-2.4.4, linux-2.6.18-308.4.1.el5

    Здесь должны быть указаны ваша версия pppd и ядра. Но и это еще не все. В 64-битных версиях ОС разделяемые библиотеки pppd находятся в /usr/lib64/pppd/2.4.4, а при установке pptp-сервера библиотека для pppd копируется в /usr/lib/pppd/2.4.4. Копируем содержимое /usr/lib/pppd в /usr/lib64/pppd и создаем символьную ссылку на /usr/lib64/pppd (иначе соединения не будет устанавливаться и в логах будет ругань на отсутсвие библиотеки pptp.so):
    ln -s /usr/lib64/pppd /usr/lib/pppd

    Настройка


    После этого можно корректировать конфиги.
    /etc/pptpd.conf:
    option /etc/ppp/options
    debug
    connections 498
    localip 172.16.190.1
    remoteip 172.16.190.2-250,172.16.191.2-250
    

    /etc/ppp/options:
    auth
    refuse-pap
    refuse-chap
    require-mschap
    require-mschap-v2
    ms-dns 82.179.90.1
    mtu 1400
    mru 1400
    nobsdcomp
    novj
    novjccomp
    logfile /var/log/ppp/ppp.log
    #plugin radius.so
    #plugin radattr.so
    


    Добавляем юзера в /etc/ppp/chap-secrets для проверки работы сервера:
    test * password *

    (Смысл различных опций и параметров смотрим в man`ах — там все достаточно подробно и ясно описано)
    Так как этот pptp-сервер выполняет почти всю работу в режиме ядра, основной функционал заключен в модуле, который необходимо подгрузить:
    depmod; modprobe pptp

    Чтобы каждый раз при перезагрузке модуль подключался самостоятельно, создадим исполняемый файл /etc/sysconfig/modules/pptp.modules и впишем туда
    modprobe pptp

    Остается включить проброс пакетов между сетевыми интерфейсами на сервере, настроить фаервол на прием соединений на 1723 порт, а также правим маршрутизацию и nat.

    Результаты (вместо итогов)


    В Production`е pptp-сервер связан с RADIUS-сервером биллинговой системы для авторизации пользователей. Для наглядности приведу график загрузки CPU:


    На этом графике отчетливо видно как с начала апреля выросли показатели загрузки процессора в связи с увеличением скоростей на тарифах в два раза. Количество пользователей при этом почти не изменилось:


    Снижение количества операций переключения контекста в секунду — с 15000-25000 до 1000-2000

    P.S.


    Жду ваших замечаний и дополнений
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 19

      +9
      Картинка доставила.
        +4
        Пика-пика — пикачууууу *бдыщ*
          +4
          Читаю комментарии только с целью узнать, кто это слева от Пикачу.
            +5
            Райчу
            0
            Если вам нужен именно сервер, не клиент, то лучше ставить крайнюю стабильную версию
            отсюда: sourceforge.net/projects/accel-ppp/develop

            С версии 0.8.5 много багов исправлено.

            А так да, Core 2 E9300, с сетевой картой intel et, довольно спокойно пропускает через себя 500 Мбит pptp, при 60 kpps,
            ~ 600 активных сессий. Это вместе с nat и шейпером.
              0
              accel-pptp != accel-ppp
                +1
                Все верно, автор с год назад поменял название. Было accel-pptp, теперь это accel-ppp.

                  0
                  Не совсем. accel-pptp использует стандартный pppd, тогда как accel-ppp — является полностью написанной с нуля реализацией pppd.
                  Отсюда, например, невозможность с accel-ppp использовать плагины, написанные для стандартного pppd. А с accel-pptp — можно.
              –5
              2012 год на дворе, давно пора использовать pppoe.
                +8
                вот именно, лучше уже IPoE клиентов вообще радует: включил компьютер, получил адрес по DHCP и все, ты в Интернете, можно смело открывать браузер и идти на любимый сайт. Никаких тебе дополнительных подключений (VPN, PPPoE) и логинов с паролями.имхо
                  0
                  Если есть техническая возможность — конечно лучше. Но она не всегда есть, особенно в пионернетах. То управляемого оборудования мало, то айпишников недостаточно (если не использовать NAT), то ещё что-то. У туннелей всё-таки есть свои преимущества в условиях ограниченных ресурсов.
                    0
                    Для пользователя наличие или отсутствие туннеля выглядит обычно как «роутер за 600 рублей режет скорость в 2-4 раза» и «роутер за 600 рублей нормально работает».
                +4
                очередной make install на хабре? да сколько же можно?
                  0
                  весенне обострение=)
                    0
                    Богу богово, кесарю кесарево )
                      0
                      Ну можно же было хотя бы мейкфайлы поправить, чтобы не было этой возни с /usr/lib и /usr/lib64, и в rpm-ку собрать.
                    +2
                    Если бы Вы рассказали, как это всё у Вас завязывается с radius'ом, то было бы интереснее и полезнее ;)
                      +1
                      Спасибо, буду иметь в виду :)
                      +1
                      Аааа… Покемоны на главной хабра!

                      Only users with full accounts can post comments. Log in, please.