Stress test pptp
Материал из Ksimute
Коробанов Сергей
Сентябрь 8, 2006
Ахтунг! В pptpd v1.3.4 в pptpd.conf имеется опция connections
и необходимость патчевания pptpd на предмет max connections отпала!
Но статейка, даст бог, пригодится людям :).
Давным давно установили мы для аутентификации pptpd Linux Point-to-Point Tunelling Protocol Server
Приступили к миграции на него пользователей, и тут начались проблемы.
Отказывался держать более 100 соединений.
Вернее держал, но странно. Версия сервера pptpd v1.2.3 При тестировании сделал около 190 соединений и все.
Больше не пускает. Номер ошибки 800. Каждый раз цифры (кол-во соединений) разные. Вообщем одно расстройство.
Для проверки я сделал тестилку. Функционал простой.
Создает до 254-х соединений. (сколько конкретно указывается в connect.sh)
Впринципе можно модифицировать но IMHO смысла нет.
Несколько тривиальных скриптов на bash
- генерируем chap-secrets на vpn сервере скрипт: gen_chap_server.sh
<TEXTAREA class="vpnst" rows="12">
- !/bin/bash
FROM=1 TO=254
until [ $TO -lt $FROM ]; do
echo "t$TO * 123 10.5.1.$TO" >> chap-secrets let TO-=1
done </TEXTAREA>
- генерируем chap-sechets на своей машине genchap.sh
<TEXTAREA class="vpnst" rows="10">- !/bin/bash
- Создаем пиры в /etc/ppp/peers gentun.sh
<TEXTAREA class="vpnst" rows="15">- !/bin/bash
- создаем алиасы на интерфейс (я взял 185-ю сеть) соответствующие пути на маршрутизаторе и
vpn сервере должны быть прописаны.
genface.sh
<TEXTAREA class="vpnst" rows="11">- !/bin/bash
- Script genface.sh
- Если бы pppd был правильный, то интерфейсы и localbind не понадобились бы,
но если linux клиент поднимает 2 и более соединения тоесть одна linux машина устанавливает два соединения с сервером то на сервере получается зомби процесс pppd а на клиенте некоторое время висят 2 интерфейса, начали разбираться, пришли к выводу что виноват pptpd, в доке нашел, что pptp соединение идентифицируется парой IP адрес и еще какоето Id которое назначается сервером клиенту и должно быть уникальным, а pptpd демон, как оказалось, на это id внимания не обращает и оно у него всегда одинаковое, это хоть как то объяснило ситуацию.
Простыми словами - с одного клиентского ПК 2 соединения не создать, вне зависимости от ОС ПК пользователя.
Поэтому пришлось шаманить с созданием 254-х интерфейсов.
- соединяемся connect.sh connect выполняется командой:
pptp --localbind 192.168.185.xxx vpn1.server.ru call txxx
через pptp-command start txx не получится. надо патчевать pptp-connand добавляя --localbind.
<TEXTAREA class="vpnst" rows="9"> #!/bin/bash FROM=2 TO=254 until [ $TO -lt $FROM ]; do pptp --localbind 192.168.185.$TO 192.168.252.107 call t$TO let TO-=1 done </TEXTAREA> vpn1 ppp~# ip a l | grep link | wc -l 353
акаунты для тестирования будут называться t2 -> t254
пароли 123 пиры t1 -> t254
Вывод: pptpd НАДО патчевать. В следующих версиях разработчики обещают, вынести MAX_CONNECTIONS в опции передаваемые pptpd при запуске, но "обещанного 3 года ждут".
P.S. Обещанного дождались :) :)
Патч заключается в увеличении числа MAX_CONNECTIONS в defaults.h pptpd и его пересборке. Пропатчеванная версия работает стабильно проверенно на 3-х "боевых" серверах.