28 April 2012

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

System administrationIT Infrastructure*nix


Введение


На сервере доступа в качестве 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.


Жду ваших замечаний и дополнений
Tags:pptp-серверсервер доступаCentOSaccel-pptp
Hubs: System administration IT Infrastructure *nix
+12
21.3k 90
Comments 19
Top of the last 24 hours