Налаштування OpenVPN за допомогою двосторонньої TLS-автентифікації
Недоліком методу автентифікації за секретним ключем є те, що його крадіжка з одного з VPN-хостів-учасників призводить до необхідності зміни цього ключа у всіх учасників. Це викликає питання, як безпечно передати новий ключ через незахищений канал Інтернету. Тому, якщо потрібно підключити до сервера кілька клієнтів, слід вибрати TLS-автентифікацію.
У цьому випадку кожна сторона має власний приватний ключ, який нікуди не передається. Передається лише сертифікат відкритого ключа клієнта, підписаний центром сертифікації (CA). Такі сертифікати видаються на певний термін спеціалізованими організаціями за гроші. Але для організації VPN всередині вашої компанії, якщо немає особливих вимог до безпеки, ви можете використовувати власний центр сертифікації.
Тепер розглянемо приклад створення ключів та сертифікатів у Windows для підключення двох клієнтів: Keenetic-2 та Keenetic-3 до сервера Keenetic-1.
Для створення всіх необхідних ключів та сертифікатів нам знадобиться набір скриптів EasyRSA з пакета OpenVPN версії 2.4.6-I602 для Windows, який також використовує утиліту openssl, що входить до його складу.
Щоб інсталювати EasyRSA, позначте компонент EasyRSA 2 Certificate Management Scripts під час інсталяції OpenVPN:

У версіях OpenVPN 2.5.x, щоб інсталювати скрипти EasyRSA, натисніть кнопку Customize на першому екрані інсталятора та прокрутіть до кінця списку компонентів.


Відкрийте командний рядок Windows від імені адміністратора.
Перейдіть до
C:\Program Files\OpenVPN\easy-rsaта запустіть:init-config.bat

У результаті ми отримаємо файл
vars.bat, який налаштовує середовище для створення ваших ключів та сертифікатів.Відкрийте цей файл у Блокноті Windows і вкажіть папку для їх зберігання; за замовчуванням це
keys:set KEY_DIR=keys
а також значення за замовчуванням для полів власника сертифіката, наприклад:
set KEY_COUNTRY=GB set KEY_PROVINCE=YourProvince set KEY_CITY=YourCity set KEY_ORG=YourOrganisation set KEY_EMAIL=mail@example.com set KEY_CN=CommonName set KEY_NAME=KeyName set KEY_OU=OrganisationUnit
Збережіть змінений файл.
Створіть нові допоміжні файли
index.txtта serial, виконавши (один раз) у командному рядку Windows:vars clean-all

Створіть
приватний ключтасертифікатдля вашого центру сертифікації, виконавши наступні дії:vars build-ca

Згенеровані файли вашого центру сертифікації
ca.keyтаca.certз'являться в папціC:\Program Files\OpenVPN\easy-rsa\keys.Створіть файл
Діффі-Геллманадля захисту вашого трафіку від розшифровки. Його буде використовувати TLS-сервер. У деяких випадках процедура може зайняти деякий час (наприклад, при розмірі ключа4096 бітце займає десятки хвилин), але це потрібно зробити лише один раз:vars build-dh

Файл
dh2048.pem(або dh4096.pem при використанні ключа розміром4096 біт) з'явиться в папціC:\Program Files\OpenVPN\easyrsa\keys.Створіть приватний ключ і сертифікат для сервера OpenVPN TLS (Keenetic-1), виконавши:
vars build-key-server Keenetic-1Коли скрипт запитає
Common Name (CN), введіть ім'я сервера, наприклад, Keenetic-1. В кінці двічі підтвердьте (y), що ви підписуєте сертифікат.
Створіть
приватний ключ,PEM-запиттасертифікатдля першого клієнта OpenVPN TLS (Keenetic-2), виконавши:vars build-key Keenetic-2Коли скрипт запитає
Common Name (CN), введіть ім'я першого клієнта — Keenetic-2. Двічі підтвердьте (y), що ви підписуєте сертифікат.
Повторіть попередній крок для другого клієнта (Keenetic-3):
vars build-key Keenetic-3Коли скрипт запитає
Common Name (CN), введіть ім'я другого клієнта — Keenetic-3. Двічі підтвердьте (y), що ви підписуєте сертифікат.Аналогічно можна створювати
ключі,запититасертифікатидля будь-якої кількості клієнтів.Створіть
HMAC-ключдля додаткового захисту від DoS-атак та флуду, виконавши:vars openvpn.exe --genkey --secret keys\ta.key

На цьому етапі всі необхідні файли створено:

Для використання в конфігураціях сервера та клієнтів OpenVPN потрібні наступні файли:
ca.crt— сертифікат центру сертифікаціїdh2048.pem (або dh4096.pem)— файл Діффі-ГеллманаKeenetic-1.crt— сертифікат сервера OpenVPN (Keenetic-1)Keenetic-1.key— приватний ключ сервера OpenVPN (Keenetic-1)Keenetic-2.crt— сертифікат 1-го клієнта OpenVPN (Keenetic-2)Keenetic-2.key— приватний ключ 1-го клієнта OpenVPN (Keenetic-2)Keenetic-3.crt— сертифікат 2-го клієнта OpenVPN (Keenetic-3)Keenetic-3.key— приватний ключ 2-го клієнта OpenVPN (Keenetic-3)ta.key— HMAC-ключ для додаткового захисту від DoS-атак та флуду
Залишилося лише додати їхній вміст до текстових файлів конфігурації сервера та клієнта.
Щоб створити файл конфігурації сервера OpenVPN, скористайтеся прикладом
server.ovpn, що знаходиться вC:\Program Files\OpenVPN\sample-config\. Вам потрібно буде вставити в ньогоключітасертифікатинаступним чином:Замініть рядок:
ca ca.crt
секцією:
<ca> -----BEGIN CERTIFICATE----- <--Insert the body of the certificate of the certification centre from the file ca.crt here -----END CERTIFICATE----- </ca>
Замініть:
cert server.crt
секцією:
<cert> -----BEGIN CERTIFICATE----- <--Insert the body of the OpenVPN server certificate from the Keenetic-1.crt file here -----END CERTIFICATE----- </cert>Замініть рядок:
key server.key
секцією:
<key> -----BEGIN PRIVATE KEY----- <--Insert the body of the OpenVPN server private key from the Keenetic-1.key file here -----END PRIVATE KEY----- </key>Замініть рядок:
dh dh2048.pem
секцією:
<dh> -----BEGIN DH PARAMETERS----- <--Insert the contents of the file Diffie-Helman dh4096.pem here -----END DH PARAMETERS----- </dh>
Розкоментуйте рядок:
topology subnet
Замініть рядок:
server 10.8.0.0 255.255.255.0
рядком:
server 10.1.0.0 255.255.255.0
Закоментуйте рядок:
;ifconfig-pool-persist ipp.txt
Замініть рядок:
tls-auth ta.key 0
секцією:
<tls-auth> -----BEGIN OpenVPN Static key V1----- <--Insert the contents of the ta.key file here -----END OpenVPN Static key V1----- </tls-auth>
і додайте рядок:
key-direction 0
Закоментуйте рядок:
;status openvpn-status.log
Щоб створити
файл конфігураціїдля першого клієнта OpenVPN, скористайтеся прикладомclient.ovpn, що знаходиться вC:\Program Files\OpenVPN\sample-config\. Вам потрібно буде вставити в ньогоключітасертифікатинаступним чином:У рядку:
remote my-server-1 1194
замініть
my-server-1на доменне ім'я або публічну IP-адресу вашого сервера OpenVPN (Keenetic-1).Замініть рядок:
ca ca.crt
секцією:
<ca> -----BEGIN CERTIFICATE----- <--Insert the body of the certificate of the certification authority from the file ca.crt here -----END CERTIFICATE----- </ca>
Замініть рядок:
cert client.crt
секцією:
<cert> -----BEGIN CERTIFICATE----- <--Insert the body of the certificate of the first OpenVPN client from the file Keenetic-2.crt -----END CERTIFICATE----- </cert>Замініть рядок:
key client.key
секцією:
<key> -----BEGIN PRIVATE KEY----- <--Insert the body of the private key of the first OpenVPN client from the Keenetic-2.key file here -----END PRIVATE KEY----- </key>Замініть рядок:
tls-auth ta.key 1
секцією:
<tls-auth> -----BEGIN OpenVPN Static key V1----- <--Insert the contents of the ta.key file here -----END OpenVPN Static key V1----- </tls-auth>
і додайте рядок:
key-direction 1
Додайте рядок з маршрутом до локальної мережі сервера:
route 192.168.1.0 255.255.255.0
або:
route 0.0.0.0 0.0.0.0
якщо весь трафік потрібно направляти в тунель.
Повторіть ті ж дії для другого клієнта, взявши дані з файлів
Keenetic-3.crtтаKeenetic-3.keyвідповідно.Приклади таких файлів конфігурації для трьох Keenetic клієнтів додаються в кінці статті:
Ви можете їх використовувати, замінивши у файлах клієнтів
KEENETIC-1.mykeenetic.co.ukна доменне ім'я або публічну IP-адресу вашого сервера Keenetic-1, а такожсертифікатитаключіна файли, які ви згенерували.Тепер все, що вам потрібно зробити, це завантажити їх на маршрутизатори Keenetic так само, як у 1.5, 1.6, і виконати дії, описані в 1.7, 1.8 цього посібника.
На цьому налаштування завершено. Перевірте, чи встановлені тунелі.
Для цього запустіть
pingтунельної адреси сервера з боку клієнта:ping 10.1.0.1
та адресу сервера в його домашній мережі:
ping 192.168.1.1
Підказка
У другій частині прикладу для простоти ми виконували всі операції в одній папці, хоча з міркувань безпеки рекомендується розміщувати центр сертифікації на окремому комп’ютері, ізольованому від Інтернету, і зберігати секретний ключ лише на ньому; а сертифікат переносити на знімних носіях. Подібним чином, приватні ключі сервера та клієнтів OpenVPN повинні розміщуватися лише на відповідних сторонах тунелю. Можна обмінюватися лише сертифікатами.
Рекомендуємо ознайомитися з наступною інформацією: