KsI-wiki online documents

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

  1. генерируем chap-secrets на vpn сервере скрипт: gen_chap_server.sh

    <TEXTAREA class="vpnst" rows="12">

    1. !/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>

  2. генерируем chap-sechets на своей машине genchap.sh
    <TEXTAREA class="vpnst" rows="10">
    1. !/bin/bash
    FROM=1 TO=254 until [ $TO -lt $FROM ]; do echo "t$TO t$TO 123" >> chap-secrets let TO-=1 done </TEXTAREA>
  3. Создаем пиры в /etc/ppp/peers gentun.sh
    <TEXTAREA class="vpnst" rows="15">
    1. !/bin/bash
    FROM=2 TO=254 until [ $TO -lt $FROM ]; do echo "# PPTP Tunnel configuration for tunnel t$TO" > t$TO echo "# Server IP: 192.168.252.33" >> t$TO echo "name t$TO" >> t$TO echo " remotename t$TO" >> t$TO echo "file /etc/ppp/options.pptp" >> t$TO let TO-=1 done </TEXTAREA>
  4. создаем алиасы на интерфейс (я взял 185-ю сеть) соответствующие пути на маршрутизаторе и vpn сервере должны быть прописаны.
    genface.sh
    <TEXTAREA class="vpnst" rows="11">
    1. !/bin/bash
    2. Script genface.sh
    FROM=2 TO=254 until [ $TO -lt $FROM ]; do ip a add 192.168.185.$TO dev eth0 let TO-=1 done </TEXTAREA>
  5. Если бы pppd был правильный, то интерфейсы и localbind не понадобились бы,
    но если linux клиент поднимает 2 и более соединения тоесть одна linux машина устанавливает два соединения с сервером то на сервере получается зомби процесс pppd а на клиенте некоторое время висят 2 интерфейса, начали разбираться, пришли к выводу что виноват pptpd, в доке нашел, что pptp соединение идентифицируется парой IP адрес и еще какоето Id которое назначается сервером клиенту и должно быть уникальным, а pptpd демон, как оказалось, на это id внимания не обращает и оно у него всегда одинаковое, это хоть как то объяснило ситуацию.
    Простыми словами - с одного клиентского ПК 2 соединения не создать, вне зависимости от ОС ПК пользователя.
    Поэтому пришлось шаманить с созданием 254-х интерфейсов.
  6. соединяемся 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-х "боевых" серверах.