Продуктивність OpenVPN: скільки можливих одночасних клієнтів?


37

Я оцінюю систему для клієнта, де багато клієнтів OpenVPN підключаються до сервера OpenVPN. "Багато" означає 50000 - 1000000.

Чому я це роблю? Клієнтам розповсюджуються вбудовані системи, кожен сидить за власником системи маршрутизатора dsl. Сервер повинен мати можливість відправляти команди клієнтам. Перший мій наївний підхід - змусити клієнтів підключатися до сервера через мережу openvpn. Таким чином, безпечний тунель зв'язку може використовуватися в обох напрямках.

Це означає, що всі клієнти завжди підключені до сервера. За багато років клієнтів підбиваються підсумки.

Питання: чи вибухає сервер OpenVPN при досягненні певної кількості клієнтів? Мені вже відомо максимальне обмеження кількості TCP-з'єднань, тому VPN (і з інших причин) VPN повинен був би використовувати UDP-транспорт.

Гуру OpenVPN, що ви думаєте?


Чи можете ви поділитися своїми заключними висновками з цього приводу? Чи змогли ви зробити тести з> 5'000 користувачів?
Філіп

Привіт Філіппе, ми скинули план OpenVPN, оскільки було зрозуміло, що ми торкнемось землі, якої ніхто ніколи не торкався. Ми обрали звичайне підключення TCP Socket на основі SSL до сервера управління з'єднанням Node.js.
Steffen Müller

Відповіді:


25

Я сумніваюся, що велика установка раніше не робилася спроб, тому ви, ймовірно, будете висувати обмеження при спробі. Я міг знайти статтю про розгортання VPN для 400 клієнтів, але, судячи з тексту, автор просто спирався на приблизні оцінки щодо того, скільки клієнтів можна запустити в одному процесорі, і не вистачило розуміння того, як буде працювати його налаштування.

В основному вам слід врахувати ці два моменти:

  1. Пропускна здатність, яку будуть використовувати ваші передачі даних, потребує шифрування / дешифрування на стороні сервера VPN, що споживає ресурси ЦП.

  2. Підключення клієнта OpenVPN споживають обидва, пам'ять та ресурси процесора на сервері, навіть коли дані не передаються

Будь-яке гідне обладнання, доступне сьогодні для ПК, повинно легко насичувати гігабітну зв’язок із Blowfish або AES-128, навіть 100 вбудованих пристроїв здатні зі швидкістю близько 100 Мбіт / с , тому вузькі місця процесора через інтенсивність пропускної здатності не повинні турбувати.

Зважаючи на інтервал перезавантаження за замовчуванням 3600 секунд, кількість 1 000 000 клієнтів означатиме, що серверу в середньому потрібно мати змогу завершити 278 обмінів ключів. Хоча обмін ключами є досить інтенсивним процесором завданням, ви можете перевантажити його на спеціальне обладнання, якщо потрібно - доступні криптографічні картки прискорювачів легко збираються та перевищують цю кількість рукостискань TLS. І обмеження пам’яті також не повинні сильно турбувати - 64-бітний двійковий файл повинен піклуватися про будь-які обмеження віртуальної пам’яті, на які ви, ймовірно, потрапите в іншому випадку.

Але справжня краса OpenVPN полягає в тому, що ви можете легко їх масштабувати - просто встановіть довільну кількість серверів OpenVPN і переконайтеся, що ваші клієнти ними користуються (наприклад, через DNS-круглий робот), налаштуйте динамічний протокол маршрутизації на ваш вибір. (як правило, це RIP через свою простоту), і ваша інфраструктура змогла б підтримувати довільну кількість клієнтів до тих пір, поки у вас достатньо обладнання.


Дякую за стислу відповідь. Чи бачите ви альтернативи використанню openvpn? Основна мета - це просто двонаправлене спілкування, що проходить через маршрутизатор.
Штеффен Мюллер

2
@ SteffenMüller Якщо вам не потрібен повний стек, а лише канал управління, чому б не використовувати щось подібне до ботнетів ? Реалізації доступні, і ДАНС зручно пропонує документ про те, як їх налаштувати
ваббіт

Дякуємо за цікаве посилання. На жаль, бот використовує просте опитування, щоб запитати, чи має сервер інформацію. Хоча це може бути шлях, я шукаю спосіб встановити та підтримувати двосторонній зв'язок. Постійне опитування або викликає затримки у виконанні команд, або великий обсяг даних для марних запитів опитування. Можливо, постійне з'єднання TCP - це шлях?
Штеффен Мюллер

1
@ SteffenMüller Botnets, як доведено, добре поводиться з тисячами клієнтів - тому моя пропозиція розглянути це. Вам не доведеться йти з конкретною реалізацією, на яку натякає ДАНС - насправді багато інших. Крім цього, не знаючи ваших точних вимог, це справді важко сказати. TCP-з'єднання, що надсилає кепалів, безумовно, зможе переконатись, що стан зв'язку на NAT шлюзі не визріває. Але вам потрібно буде подбати про все інше (автентифікацію, шифрування, обробку помилок) все самостійно.
the wabbit

2
До речі, немає жодної причини, що ви не можете знизити інтервал повторної перевірки (є компроміс із безпекою, оскільки ключ, який піддається компрометації, виявить непростий текст назад до останньої перепланування). Крім того, я б набагато більше хвилювався, якщо спочатку не вдалося прокласти маршрутизацію чи інше з'єднання. Я маю на увазі, якщо у OpenVPN передбачено активність <100 з'єднань, то який шанс існує десь O (n) пошуку з'єднання?
дероберт

26

Я фактично зробив це, хоча і з "лише" кількома сотнями віддалених з'єднань аналогічно за маршрутизаторами DSL. Я не можу занадто сильно коментувати проблеми перепланування, але кілька практичних речей, які я навчився на цьому шляху:

1) Розгортаючи клієнтів, переконайтеся, що ви вказали кілька серверів VPN у конфлікті клієнтів, vpn1.example.com, vpn2.example.com, vpn3 ..... Навіть якщо ви зараз надаєте лише один або два з них, ви даєте собі запас. Налаштовані правильно, клієнти продовжуватимуть їх повторно повторно, поки не знайдуть той, що працює.

2) Ми використовуємо власні зображення сервера AWS VPN і можемо розширити додаткову потужність на вимогу, і Amazon DNS (R53) обробляє DNS сторону речей. Він повністю відірваний від решти нашої інфраструктури.

3) На кінці сервера (ів) ретельно використовуйте мережну маску, щоб обмежити кількість потенційних клієнтів. Це повинно змусити клієнтів на альтернативному сервері, пом'якшуючи проблеми з процесором. Я думаю, що ми обмежуємо наші сервери до 300 клієнтів. Цей вибір був з нашого боку дещо довільним - якщо ви хочете.

4) Також на кінці сервера слід ретельно використовувати брандмауери. Простіше кажучи, у нас налаштовано так, що клієнти можуть підключатися до VPN, але сервери суворо забороняють вхідні всі ssh-з'єднання за винятком відомої IP-адреси. Ми можемо SSH для клієнтів, якщо нам періодично потрібно, вони не можуть нам SSH.

5) Не покладайтеся на те, що OpenVPN зробить підключення для вас на клієнтському кінці. 9 разів з 10 це буде, але іноді застрягає. Проводити окремий процес для регулярного скидання / перезапуску openVPN на клієнтському кінці.

6) Вам потрібен спосіб генерації унікальних ключів для клієнтів, щоб ви могли їх деколи відключити. Ми генеруємо їх всередині нашого процесу збирання сервера (PXEboot). З нами ніколи не бувало, але ми знаємо, що можемо це зробити.

7) Вам знадобляться деякі засоби управління, сценарії для ефективного контролю підключень до вашого VPN-сервера.

Тут не так багато матеріалів про те, як це зробити, на жаль, але можливо, при ретельному налаштуванні.


Дуже дякую за розуміння. Я здивований, що проблеми з переробкою вже торкнулися вас із 300 клієнтами ...
Steffen Müller

Для уточнення - їх немає, але я також не відстежував це ....: - / Номер "300" просто видався розумним. Якщо у нас є проблеми, ми б просто піднести зображення AWS до більшого екземпляра. Я ніколи не мав близьких до цього багатьох з'єднань на сервері, ймовірно, лише близько 100 макс., Але ми запускаємо кілька серверів, і вони приблизно врівноважуються у відповідність до openvpn випадковим чином, вибираючи пункт призначення з відомого списку.
Aitch

Чи можете ви поділитися якоюсь детальнішою інформацією про те, як це зробити: "5) Не покладайтеся на те, що OpenVPN повторно підключиться для вас у клієнтському кінці. У 9 разів з 10 це буде, але іноді застряє. Проведіть окремий процес для регулярно скидайте / перезапускайте openVPN на кінцевому рахунку. "
Дуг

Вибачте, що залишив цю роботу 4,5 роки тому (!), Не можу згадати, але майже напевно якийсь список процесів, вбийте потім перезапуск служби.
Aitch

(я роблю аналогічну установку з наразі близько 400 пристроїв на одному VPN-сервері), вам потрібно прийняти рішення, що робити, коли vpn не може бути досягнуто, тайм-аут або його відхилено. Інтервал випадкових спроб не допоможе вам назавжди і буде генерувати лише трафік. Залежно від проблеми, ви повинні або зробити щось на клієнті, на брандмауері / DSL, чого ви зазвичай не можете, і для цього відправити систему на фазу сну "Мех, передача даних пізніше", або якщо проблемою є сам сервер VPN . Ви можете оцінити це через журнали та вирішити, виходячи з цього. перепланування не є (поки) проблемою для нас.
Денніс Нолте

3

Оновлення 2018 року

Не впевнений, що все змінилося з 2012 року. Просто хотів дати оновлення щодо свого досвіду в 2018 році. Ми розгорнули мережу openvpn, дуже схожу на налаштування ОП. Наші кінцеві точки - це повноцінні комп'ютери Linux, а не вбудовані пристрої. Кожна кінцева точка має монітор, який використовується для відображення інформації та тривоги для цього сайту, і наш сервер дозволяє нам віднести одну точку до всіх кінцевих точок. Мережа не надто активна, але іноді має 5-10 віддалених сеансів одночасно.

Використовуючи поточну збірку openvpn у близько 100 клієнтів на блакитному зображенні з одним ядром та 2 Гб оперативної пам’яті, ми використовуємо в середньому близько 0,7% пам'яті, а використання процесора майже завжди становить близько 0%. Виходячи з того, що я знайшов для цього меншого тесту, я вважаю, що один сервер з гідними специфікаціями легко оброблятиме 50000 одночасно, якби у нього був таран, щоб його підтримати. Якщо використання оперативної пам’яті лінійно масштабується, то 16 Гб зможе обробляти 50000 користувачів з достатньою кількістю додаткових коштів на спеціальній машині openvpn.

Ми не настільки великі, щоб говорити про це з великою впевненістю, але я просто хотів дати нещодавнє оновлення, оскільки, спочатку розгортаючи нашу мережу, я виявив це і очікував набагато більше використання ресурсів у такому масштабі. Тепер я вважаю, що процесор, який працює на цьому, має апаратне шифрування, і я не впевнений, в який момент це було б перевантажено трафіком, але для кінцевих точок, які не спілкуються багато, це не повинно бути проблемою.

При 1000000 вам знадобиться 200 Гб оперативної пам’яті на одній машині (якщо це лінійно масштабується із додатковими), хоча це можливо, я б подумав, що в цей момент ви хочете мати 5 машин у кожній із 64 ГБ оперативної пам’яті, щоб у вас не було жодної точки невдачі. Це повинно дозволити технічне обслуговування, перезавантаження та заміну 1 або навіть 2 машин без значних проблем.

Мої оцінки оперативної пам'яті, ймовірно, є надмірними, оскільки я ділю все використання openvpn на кількість клієнтів, де лише частина цього барана належить клієнтам.

Ми додали 74 кінцеві точки за рік з початку розгортання. Я сподіваюсь, що продовжуватиме значно збільшувати цю кількість і зробимо подальше оновлення, якщо ми досягнемо гідних масштабів.


Чи можете ви поділитися якоюсь детальнішою інформацією про те, як ви це робите: "5) Не покладайтесь на це, не дайте мені прокоментувати нитку вище, але я хотів відповісти на це: OpenVPN робить підключення для вас у кінцевому підсумку. 9 рази з 10 це буде, але іноді він застрягає. Проводьте окремий процес для регулярного скидання / перезапуску openVPN на клієнтському кінці ". - Дуг 18 травня 1717 о 17:12
CraigZ

Натисніть ліміт символів. Для цього використовуйте нагляд. Зробіть перезавантаження автоматично кожні 6-12 год
CraigZ

1

Я розглядаю подібну проблему, хоча кількість клієнтів була б на сотні, можливо, пару тисяч.

Я подумав, що я не можу постійно підтримувати всіх клієнтів.

Я думаю запустити демон на OpenVPN для клієнтів через рандомізовані інтервали часу, щоб вони могли перевірити, чи опитували їх. Якщо вони були, вони повинні надіслати електронний лист або щось таке, що вони в Інтернеті, і надіслати збережені пакети протягом періоду часу, щоб я міг з ними підключитися.

Якщо на деякий час немає руху, демон буде зупинений.

Проблема, з якою я стикаюсь зараз, полягає в тому, що здається неможливим отримати список підключених на даний момент VPN-клієнтів ...


1
Ви можете отримати поточний список підключених клієнтів через журнал статусу openvpn. Там ви бачите всі підключені ips до поточного сервера.
Fa11enAngel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.