Openvpn, російськомовна документація по ubuntu

Захист з'єднання в OpenVPN в даному випадку будується на використанні сертифікатів і ключів для сервера і для клієнтів. Для їх створення в пакеті OpenVPN є спеціальні скрипти, розташовані в /usr/share/doc/openvpn/examples/easy-rsa/2.0 Перед початком роботи скопіюємо їх, щоб не змінювати оригінали.

Переходимо в створену директорію, де і займемося генерацією ключів і сертифікатів

Редагуємо файл змінних

Тут можна заповнити наприклад так:

копіюємо конфиг openssl

Очищаємо від старих сертифікатів і ключів папку keys і створюємо серійний і індексні файли для нових ключів

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

Створюємо ключ сервера

A challenge password []: Заповнюється довільним значенням, наскільки я зрозумів це потрібно тільки для створення ключа і більше нам не буде потрібно. Хто знає точно поправте статтю.

В кінці погоджуємося із запитом на підпис і додавання сертифіката в базу.

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

Створюємо ключ Діффі-Хеллмана

Створена ключ для tls-аутіфікаціі

Створимо директорію для клієнтських конфігов

Можна запускати наш сервер OpenVPN

Дивимося список інтерфейсів

Якщо серед інших бачимо

значить VPN-сервер завівся. Якщо немає, то дивимося лог

Якщо сервер має «білий» IP то ніякої маршрутизації на стороні сервера налаштовувати не потрібно. Якщо сервер знаходиться в локальній мережі за NAT роутера то необхідно налаштувати маршрутизацію.
Для того, щоб клієнти могли достукатися до сервера потрібно прокинути порти з роутера на сервер. У різних моделях це робиться по різному. Суть в тому, щоб стукаючи на зовнішній порт, наприклад 12345 1). клієнти потрапляли на порт OpenVPN-сервера 1 194 (або інший, який ми задали для нашого сервера). Крім того пристроїв у локальній мережі потрібно повідомити, що для доступу до мережі за OpenVPN-сервером потрібно звертатися до нього. Але простіше поставити цю карту на роутері, який обслуговує локалку.

Створюємо файл в каталозі ccd з тим же ім'ям, що і ключ для клієнта, тобто / Etc / openvpn / ccd / client

Ключі клієнта створюються на сервері

Переходимо в створену директорію, де і замёмся генерацією ключів і сертифікатів

Створюємо ключ клієнта

В даному випадку назва ключа - client. Кожен ключ повинен бути зі своїм ім'ям.

Якщо хочемо захистити ключ паролем, то генеруємо його іншою командою

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

Тепер потрібно не забути скопіювати ключі (ca.crt, client.crt, client.key, ta.key) на клієнта OpenVPN в / etc / openvpn / keys /

Можна запускати наш клієнт OpenVPN

Машина з openvpn вже готова працювати з сервером в чому можна переконається

Але для того, щоб користуватися тунелем в інший офіс могли інші пристрої в локальній мережі потрібно вказати їм, щоб доступ в підмережа 192.168.1.0/24 здійснюється через 192.168.0.100. Або, що часто простіше і швидше прописати це правило маршрутизації на роутері, який є шлюзом для пристроїв в мережі.

Також як у випадку з сервером.

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

Тут ми вказали, що мережа 10.8.0.0/24 буде виходити назовні через інтерфейс eth0.

Для того що б налаштування iptables збереглися після перезавантаження потрібно їх додатково зберегти:

До конфіге клієнта client.conf потрібно додати рядок

Якщо все пройшло штатно ви повинні побачити наступний висновок, що повідомляє про те, що сертифікат відкликаний:

Скрипт revoke-full створить CRL-файл (certificate revocation list, список відкликаних сертифікатів) з ім'ям crl.pem в підкаталозі keys. Файл повинен бути скопійований в каталог, в якому сервер OpenVPN може отримати до нього доступ. Раніше в конфіги ми прописали, що цей файл повинен знаходиться в / etc / openvpn, туди і копіюємо.

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

VPN-сервер на ВМ Virtualbox (1 ядро ​​i5-4670)

Мережа гігабіт (без шифрування послідовна швидкість передачі 120 МБ / с). Швидкість буду вказувати в мегабайтах, НЕ в мегабитах!

Форвардинг на хоста

Клієнт Windows 7, OpenVPN 2.3 64, FX-6300

Швидкість завжди впиралася в ВМ, де процесор б повністю зайнятий. ЦП клієнта був завантажений не більше 10% - 40% на 1/6 ядер.

З конфіг вище - 14 МБ / с

Відключаємо стиснення; comp-lzo - надбавка не більше 1 МБ / с - до 15 МБ / с

Відключаємо аутентифікацію auth none +2 МБ / с - до 17 МБ / с

Відключаємо шифрування cipher none +2 МБ / с - до 19 МБ / с

Стиснення comp-lzo стискає добре стискає файли в 2 рази гірше, ніж zlib, зате майже не впливає не завантаження ЦП (в десятки разів швидше). Перевіряв на копіюванні встановленого в Windows Libreoffice 5. Стиснення в zip за допомогою архіватора 7z дало результат близько 35%, стиснення comp-lzo за статистикою мережевого інтерфейсу - близько 70%.

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

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