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%. Не думаю, що це варто того, щоб відключати механізми захисту, але ситуації бувають різні.
Може комусь як мені буде цікаво вплив опцій на продуктивність і не доведеться витрачати час на проведення замірів, хоча я б із задоволенням ознайомився з результами інших людей. Спочатку тестіл для себе, тому точних вимірів не проводив, потім вирішив поділитися результатами.