Організація каналів між офісами за допомогою OpenVPN на платформі Linux - Записки IT фахівця

Технічний блог фахівців ТОВ "Інтерфейс"

  • Головна
  • Організація каналів між офісами за допомогою OpenVPN на платформі Linux

Організація каналів між офісами за допомогою OpenVPN на платформі Linux

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

Слід розуміти, що OpenVPN не накладає жодних обмежень на платформи для роботи сервера та клієнтів, ви можете без проблем об'єднати в єдину мережу пристрою з різними ОС та апаратними платформами, і все це буде працювати.

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

Схема мережі та маршрутизація

Ми спеціально не стали розгортати для OpenVPN окрему конфігурацію у нашій лабораторії, а скористалися вже існуючими віртуальними машинами. Як сервер центрального офісу ми використовували роутер на базі Ubunutu Server 14.04 LTS, за яким знаходиться мережа 192.168.31.0/24, в якій знаходиться робоча станція під керуванням Windows 10. У філії OpenVPN встановлений на сервер з Debian 8, що належить мережі 192. 18.0/24, в якій знаходиться робоча станція з Windows 8.1 таяка виходить в інтернет через простий роутер початкового рівня.

організація

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

Розглянемо перший випадок. Оскільки OpenVPN знаходиться на шлюзі мережі, то будь-яких додаткових налаштувань маршрутизації нам робити не треба, всі пакети, що не належать локальній мережі, все одно будуть надіслані шлюзу, а завдання їхньої маршрутизації на самому шлюзі ми покладемо на OpenVPN. Зокрема нам потрібно буде відправити пакети до мережі 192.168.18.0/24 на інший кінець тунелю.

У випадку, коли OpenVPN розташований на одному з вузлів мережі, ситуація дещо інша. Так, наприклад, пакети до мережі 192.168.31.0/24 будуть також направлені шлюзу, який їх просто відкине, оскільки діапазони приватних мереж (сірі IP) не маршрутизуються. Тому нам потрібно явно задати маршрут до OpenVPN, який передасть ці пакети далі, згідно з власними налаштуваннями маршрутизації, а саме OpenVPN серверу. Це можна зробити, прописавши відповідний маршрут на роутері мережі, або якщо роутер не дозволяє цього зробити, безпосередньо на кожній робочій станції.

У нашому випадку знадобиться маршрут (на роутері або на клієнтах):

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

Налаштування сервера OpenVPN

Насамперед встановимо необхідні пакети:

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

Скопіюємо робочу директоріюeasy-rsa у папку з налаштуваннями OpenVPN:

У своїй роботіeasy-rsa використовує бібліотекуopenssl та містить конфігураційні файли для різних версій бібліотеки. У сучасних системах повсюдно використовується openssl-1.0.x тому одразу робимо символічне посилання на потрібний конфігураційний файл:

Тепер відкриємо файл/etc/openvpn/easy-rsa/vars і відредагуємо в ньому наступні рядки, вказавши власні облікові дані, наприклад:

Збережемо файл і перейдемо до створення власного CA, для цього перейдемо до директоріїeasy-rsa і завантажимо змінні:

Потім здійснимо очищення та ініціалізацію нашого центру сертифікації:

Перша команда здійснить повне очищення робочої директорії з ключами та службовими файлами і її випадкове виконання на працюючому CA призведе до його знищення. Друга команда створить комплект із відкритого та закритого ключів центру сертифікації.

каналів
У процесі створення ключа ви отримуватимете питання, відповіді за замовчуванням на які містяться у квадратних дужках і засновані на ваших даних з файлуvars, тому просто підтверджуємо їх натисканнямEnter (або вводимо свої значення).

Після виконання цієї операції в папці/etc/openvpn/easy-rsa/keys з'являться файлиca.crt таca.key. Перший є сертифікатом з публічним ключем і має бути присутнім на всіх вузлах OpenVPN мережі, а файл з розширенням.key - закритий (приватний) ключ і доступ до ньогомає бути обмежений. Файлca.key потрібен виключно для роботи центру сертифікації і не повинен нікуди копіюватися або передаватися, особливо незахищеними каналами.

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

Результатом виконання цієї команди буде поява в директорії з ключами файлуdh2048.pem, який потрібен лише серверу, але в той же час секретним він не є.

Нарешті сформуємо ключі для сервера:

У процесі генерації вам також доведеться підтвердити параметри з файлуvars, або вказати свої, в кінці ви отримаєте два питання про підпис та випуск сертифіката, на обидва відповідаємо ствердно.

Перейдемо в папку з ключамиeasy-rsa і скопіюємо необхідні ключі та сертифікати:

Потім розпакуємо та скопіюємо в/etc/openvpn шаблон файлу конфігурації:

Нагадаємо, щоб не набирати довгі шляхи можна скористатися автодоповненням по клавішіTab.

Дані опції встановлені за замовчуванням і задають порт, протокол і тип тунелю, міняти їх не слід, проте на поганих каналах іноді є сенс використовувати протоколtcp. Нижче додамо опцію, що вказує на топологію створюваної VPN-мережі:

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

Синтаксис конфігураційного файлу допускає вказівку відносних шляхів, у цьому випадку кореневою вважатиметьсяпапка/etc/openvpn.

Задамо діапазон OpenVPN мережі:

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

Потім перейдемо до налаштувань маршрутизації. Перш за все вкажемо стандартний шлюз для OpenVPN мережі, яким повинен бути сервер:

Задамо маршрут до клієнтської мережі, якщо мереж кілька - рядків теж має бути кілька. Ця опція вказує OpenVPN при запуску створити маршрути в системі для зазначених підмереж для направлення призначених їм пакетів у тунель.

Передамо всім клієнтам аналогічну команду, але для мережі за сервером:

Встановимо параметри перевірки активності:

Ця опція встановлює інтервал перевірки вузла (10 с) і час після якого, за відсутності відповіді, клієнт вважається неактивним.

Вкажемо тип шифрування, на вибір пропонується три види шифру, але Triple-DES має найбільші накладні витрати, тому вибирати слід між Blowfish і AES. Однозначно дати рекомендації тут важко, але слід враховувати, що AES де-факто є промисловим стандартом і підтримується апаратно в процесорах Intel.

З метою безпеки знизимо права запущеного сервера:

При цьому обов'язково проконтролюйте наявність таких опцій, які забезпечують правильну роботу з ресурсами після зниження прав:

Вкажемо розташування логів:

Наступні опції задають подробиці лога і кількість повідомлень, що повторюються в лозі:

Для налагодження проблем із підключенням рівень лога слід підняти до 5-6.

На цьому налаштування сервера закінчено, зберігаємо файл конфігурації та створюємо директорію для конфігурацій клієнтів, інакше отримаєте помилку під час запуску служби:

Тепер можна спробувати запустити сервер:

Впевнімося в наявності мережевого інтерфейсу тунелю командою

І перевіримо таблицю маршрутизації:

Як бачимо – необхідні маршрути додані автоматично.

Налаштування клієнта OpenVPN

Настроювання клієнта починається на сервері з генерації ключової пари. Для цього знову перейдемо до директоріїeasy-rsa і завантажимо змінні (якщо ви створюєте клієнтські ключі одночасно із серверними, то повторно завантажувати змінні не потрібно).

Виконаємо генерацію клієнтських ключів та сертифікатів командою:

деclient1 - ім'я ключа та сертифіката.

На комп'ютер клієнта нам потрібно передатиca.crt,client1.crt таclient1.key, останній файл є секретним і не повинен передаватися у відкритому вигляді незахищеними каналами .

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

Відкриємо цей файл і внесемо до нього рядки:

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

Встановимо необхідні пакети:

Створимо директорію для ключів та розмістимо в ній ключі та сертифікати:

Скопіюємо файл із шаблоном конфігурації клієнта:

І перейдемо до його редагування:

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

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

Знижуємо права служби після запуску (якщо файл конфігурації призначений для Windows-машин дані опції не потрібні):

Обов'язково перевіряємо наявність:

Вказуємо розташування ключів та сертифікатів:

Наступна опція запобігає потенційним атакам класу "людина посередині":

Потім вкажемо тип шифрування, він повинен збігатися з тим, що ви вказали на сервері:

Задаємо розташування логів та їх деталізацію:

Зберігаємо файл конфігурації та запускаємо службу з явною вказівкою клієнта, інакше буде виконана спроба знайти та запустити конфіг сервера:

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

Наприклад, ми додали такий маршрут на клієнтському ПК з Windows 8.1:

Після чого без будь-яких проблем змогли отримати доступ до комп'ютерів у мережі офісу (доданий вручну маршрут ми виділили на скріншоті).

офісами
А також у зворотному напрямку.

каналів
Зверніть увагу, що в цьому випадку додаткових маршрутів до мережі 192.168.18.0 на клієнтському ПК прописувати немає необхідності.