Введение
На сервере доступа в качестве pptp-сервера стоял проверенный Poptop последней стабильной версии (1.3.4). И все бы ничего, да вот только после повышения скоростей на тарифах производительность cервера начала проседать под увеличившейся нагрузкой. Причем очень значительно, так как этот pptp-сервер работает в режиме пользователя, а не ядра. Постоянные копирования пакетов и непосредственно с этим связанные операции переключения контекста, на выполнение которой также расходуются вычислительные ресурсы, вызвали серьезную деградацию производительности сервера при увеличившемся объеме передаваемого трафика. Необходимо было действовать.
Установка
Я уже слышал про accel-pptp и читал положительные отзывы о нем, а вот теперь настала пора попробовать его в деле.
Все действия будем производить в OC CentOS 5.7 x86_64.
Распространяется accel-pptp в исходных кодах. Сам проект
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.
Жду ваших замечаний и дополнений
Автор: alexander_pnz