Сервер OpenVPN

OpenVPN – один із найпопулярніших протоколів для підключення до VPN. Його можна використовувати для створення віртуальної приватної мережі або для з’єднання локальних мереж. OpenVPN є відкритим кодом і розповсюджується безкоштовно за ліцензією GNU GPL. Він забезпечує вищу швидкість з’єднання, ніж інші протоколи VPN. Крім того, OpenVPN можна назвати одним із найбезпечніших протоколів. Усі передані дані надійно захищені бібліотекою шифрування OpenSSL і протоколами SSLv3/TLSv1, що забезпечує високу безпеку та анонімність.

Маршрутизатор Keenetic підтримує режим TCP і UDP для підключення OpenVPN, аутентифікацію TLS, використання сертифікатів і ключів шифрування для підвищення безпеки підключення VPN.

NOTE: Важливо! Маршрутизатор Keenetic, який розміщуватиме сервер OpenVPN, має бути підключений до Інтернету за допомогою публічної ("білої") IP-адреси, а під час використання деменного імені  KeenDNS, його необхідно налаштувати в режимі прямого доступу. Якщо будь-яка з цих умов не виконується, підключитися до такого сервера з Інтернету буде неможливо.

Встановлення системного компонента «Клієнт і сервер OpenVPN» необхідне для налаштування підключення OpenVPN. За допомогою цього компонента ви можете використовувати як клієнт, так і сервер OpenVPN у своєму Keenetic. Детальний опис режиму клієнта ви можете знайти в статті 'Клієнт OpenVPN'. Ви можете встановити системний компонент на сторінці «Загальні налаштування системи» в розділі «Параметри компонентів системи», натиснувши «Змсінити набір компонентів».

mceclip0.png

Режим OpenVPN (клієнт або сервер) в основному визначається файлом конфігурації.

NOTE: Важливо! Вимоги до конфігурації OpenVPN для використання в Keenetic:

  • Конфігурація має бути в одному файлі.
  • Сертифікати, ключі, тощо мають міститись у цьому файлі.
  • Сертифікати, ключі тощо повинні бути включені в цей файл. У конфігурації ви повинні використовувати лише параметри, перелічені в документіhttps://community.openvpn.net/openvpn/wiki/Openvpn24ManPage.
  • Деякі з описаних вище параметрів можуть не підтримуватися. Наприклад, наша реалізація OpenVPN не підтримує параметри, пов’язані з IPv6.
  • Порядок параметрів і ввімкнених сертифікатів і ключів не мають значення.
  • Файл конфігурації OpenVPN не зберігається у файлі конфігурації startup-config. Щоб отримати резервну копію налаштувань інтерфейсу клієнта OpenVPN, ви повинні зберегти її окремо.

Розглянемо приклад підключення OpenVPN типу «сайт-сайт».

openvpn-site-to-site-en.png

Ми підключимо клієнт Keenetic#2 (домашній сегмент 192.168.2.0/24, адреса тунелю: 10.1.0.2) до сервера на Keenetic#1 (домашній сегмент 192.168.1.0/24, адреса тунелю: 10.1.0.1)

1. Спочатку розглянемо найпростішу конфігурацію з використанням спільного секретного ключа.

1.1 Мінімальна конфігурація сервера OpenVPN для Keenetic#1:

dev tun
ifconfig 10.1.0.1 10.1.0.2
cipher AES-128-CBC
<secret>
  <--insert the secret key here
</secret>
verb 3
route 192.168.2.0 255.255.255.0


1.2 Мінімальна конфігурація клієнта OpenVPN для Keenetic#2:

dev tun
remote KEENETIC-1.mykeenetic.net <-- server's domain name or IP address
ifconfig 10.1.0.2 10.1.0.1
cipher AES-128-CBC
<secret>
  <--insert the secret key here
</secret>
verb 3
route 192.168.1.0 255.255.255.0
or
redirect-gateway def1 
or
route 0.0.0.0 0.0.0.0 <-- if it's neccessary to route all the traffic in the tunnel

 

1.3 Згенеруйте спільний секретний ключ. Для цього завантажте та встановіть OpenVPN звідси: https://openvpn.net/index.php/download/community-downloads.html
У цьому прикладі ми будемо використовувати версію 2.4.6-I602 для Windows.

Після встановлення програмного забезпечення перезавантажте комп’ютер.

За замовчуванням програму буде встановлено в теку C:\Program.

Запустіть командний рядок Windows від імені адміністратора. Перейдіть до C:\Program Files\OpenVPN\bin і виконайте команду:

openvpn.exe --genkey --secret static.key


openvpn01-en.png

1.4 Відкрийте згенерований файл static.key із спільним секретним ключем у будь-якому текстовому редакторі (наприклад, Блокнот), скопіюйте його вміст у буфер обміну (Ctrl-A, Ctrl-C) і вставте (Ctrl-V) у відповідні місця клієнта і файли конфігурації сервера.

Приклади конфігураційних файлів static-server.ovpn Keenetic#1 та static-client.ovpn для Keenetic#2 із спільним секретним ключем додаються в кінці цієї статті. У цих файлах є інші закоментовані (починаються з ';') налаштування OpenVPN, які можна використати пізніше, якщо це необхідно. Ви можете використовувати ці конфігураційні файли для перевірки, замінивши доменне ім’я KEENETIC-1.mykeenetic.ru у static-client.ovpn на доменне ім’я вашого Keenetic#1 або його загальнодоступну IP-адресу та спільний секретний ключ на згенерований вами в обох файлах.

1.5 Перейдіть на сторінку «Інші підключення» у веб-інтерфейсі першого Keenetic і натисніть «Створити підключення» в розділі «VPN-підключення». У вікні «Параметри VPN-підключення» виберіть «OpenVPN» у полі «Тип (протокол)».

Потім введіть назву з’єднання в полі «Ім’я з’єднання» та вставте вміст файлу конфігурації static-server.ovpn у поле «Конфігурація OpenVPN». Збережіть налаштування.

mceclip1.png

NOTE: Important! Починаючи з KeeneticOS 3.4.1, сервер працює лише тоді, коли вказано «Підключатися через» — «Будь-яке інтернет-з'єднання».

1.6 Таким же чином додайте підключення OpenVPN до веб-інтерфейсу другого Keenetic, але з конфігурацією static-client.ovpn:mceclip2.png


1.7 Крім того, на стороні Keenetic#1 (сервер) потрібно буде виконати наступні команди через  інтерфейс командного рядка (CLI) маршрутизатора:

interface OpenVPN0 no ip global
interface OpenVPN0 security-level private


Щоб дозволити трафік між інтерфейсами Home і OpenVPN0, які мають приватний рівень безпеки, виконайте команду:

no isolate-private


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

ip nat 10.1.0.2 255.255.255.255


і збережіть налаштування за допомогою команди:

system configuration save


openvpn-cli.png

1.8 Нарешті, необхідно відкрити порт для підключення OpenVPN. Стандартним портом є UDP/1194. Для цього створіть правило для інтерфейсу «Провайдер» або для інтерфейсу, який використовується для доступу до Інтернету на сторінці «Міжмережевий екран» (окрім «Провайдера», це можуть бути інтерфейси PPPoE, L2TP або PPTP).

mceclip5.png

У вікні «Правило міжмережевого екрану» виберіть «Дозволити» в полі «Дія», «UDP/1194-OpenVPN» у полі «Протокол».

mceclip6.png

На цьому налаштування тунелю OpenVPN завершено. Успішне встановлення тунелю можна підтвердити повідомленнями в системному журналі (на сторінці 'Diagnostics':

openvpn-log-en.png

Спробуйте перевірити обидва кінці тунелю:

ping 10.1.0.1
ping 10.1.0.2


 та віддалені підмережі:

ping 192.168.1.1
ping 192.168.2.1

 

2. Конфігурація з використанням двосторонньої аутентифікації TLS.

Недоліком згаданого вище методу аутентифікації за допомогою загального секретного ключа є те, що його викрадення з одного з учасників VPN-хостів призводить до необхідності зміни цього ключа у всіх учасників. У зв’язку з цим виникає питання, як безпечно передати новий ключ через незахищений інтернет-канал. Тому, якщо потрібно підключити до сервера кілька клієнтів, слід вибрати аутентифікацію TLS. При цьому у кожної сторони є свій закритий ключ, який нікуди не передається. Передається лише сертифікат відкритого ключа клієнта, підписаний ЦС. Такі довідки видаються на певний термін спеціалізованими організаціями за гроші. Але для організації VPN всередині вашої компанії, якщо немає особливих вимог до безпеки, ви можете використовувати власний сертифікаційний центр.

Тепер розглянемо приклад створення ключів і сертифікатів в Windows для підключення двох клієнтів: Keenetic-2 і Keenetic-3 до сервера Keenetic-1.

Для створення всіх необхідних ключів і сертифікатів нам знадобиться набір сценаріїв EasyRSA з пакету OpenVPN версії 2.4.6-I602 для Windows, який також використовує включену в нього утиліту openssl. Щоб інсталювати EasyRSA, позначте компонент «EasyRSA 2 Certificate Management Scripts» під час інсталяції OpenVPN:

openvpn07.png

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

Capture1.PNG

Capture4.PNG

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

init-config.bat


openvpn08-en.png

В результаті ми отримаємо файл 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

 

Збережіть змінений файл.

2.2 Створіть новий index.txt і серію допоміжних файлів, виконавши (один раз) у командному рядку Windows:

vars
clean-all


openvpn09-en.png
 

2.3 Створіть закритий ключ і сертифікат для свого центру сертифікації, виконавши такі дії:

vars
build-ca


openvpn10.png

Згенеровані файли ca.key і ca.cert вашого центру сертифікації з’являться в теці C:\Program Files\OpenVPN\easy-rsa\keys.

2.4 Створіть файл Diffy-Helman, щоб захистити свій трафік від дешифрування. Сервер TLS використовуватиме його. У деяких випадках процедура може зайняти деякий час (наприклад, коли розмір ключа становить 4096 біт, це займає десятки хвилин), але її потрібно виконати лише один раз:

vars
build-dh


openvpn11.png

Файл dh2048.pem (або dh4096.pem, якщо використовується розмір ключа 4096 біт) з’явиться в папці C:\Program Files\OpenVPN\easyrsa\keys.

2.5 Створіть закритий ключ і сертифікат для сервера OpenVPN TLS (Keenetic-1), виконавши:

vars
build-key-server Keenetic-1


Коли сценарій запитує Common Name (CN), введіть назву сервера, наприклад Keenetic-1. Нарешті двічі підтвердьте (y), що ви підписуєте сертифікат:

openvpn12.png

2.6 Створіть закритий ключ, запит PEM і сертифікат для першого клієнта OpenVPN TLS (Keenetic-2), виконавши:

vars
build-key Keenetic-2


Коли скрипт запитає Common Name (CN), введіть назву першого клієнта - Keenetic-2. Двічі підтвердьте (y), що ви підписуєте сертифікат.

openvpn13.png

2.7 Повторіть попередній крок для другого клієнта (Keenetic-3):

vars
build-key Keenetic-3

 

Коли скрипт запитає Common Name (CN), введіть ім'я другого клієнта - Keenetic-3. Двічі підтвердьте (y), що ви підписуєте сертифікат. Так само ви можете створювати ключі, запити та сертифікати для будь-якої кількості клієнтів.

2.8 Створіть ключ HMAC для додаткового захисту від DoS-атак і затоплення, виконавши:

vars
openvpn.exe --genkey --secret keys\ta.key


openvpn14.png

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

openvpn15.png

Наступні файли потрібні для використання в конфігураціях сервера та клієнтів OpenVPN:

ca.crt - certificate of the certification centre
dh2048.pem (or dh4096.pem) - Diffy-Helman file
Keenetic-1.crt - OpenVPN server certificate (Keenetic-1)
Keenetic-1.key - OpenVPN server private key (Keenetic-1)
Keenetic-2.crt - certificate of the 1st OpenVPN client (Keenetic-2)
Keenetic-2.key - private key of the 1st OpenVPN client (Keenetic-2)
Keenetic-3.crt - certificate of the 2nd OpenVPN client (Keenetic-3)
Keenetic-3.key - private key of the 2nd OpenVPN client (Keenetic-3)
ta.key - HMAC key for additional protection against DoS-attacks and flooding

Єдине, що залишилося зробити, це додати їх вміст до текстових файлів конфігурації сервера та клієнта.

2.9 Щоб створити файл конфігурації сервера OpenVPN, скористайтеся прикладом server.ovpn, який знаходиться в C:\Program Files\OpenVPN\sample-config\. Вам потрібно буде вставити в нього ключі та сертифікати наступним чином:

2.9.1 Замініть рядок:

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>


2.9.2 Замініть:

cert server.crt


секцією:

<cert>
-----BEGIN CERTIFICATE-----
  <--Insert the body of the OpenVPN server certificate from the Keenetic-1.crt file here
-----END CERTIFICATE-----
</cert>


2.9.3 Замініть рядок:

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>


2.9.4 Замініть рядок:

dh dh2048.pem


секцією:

<dh>
-----BEGIN DH PARAMETERS-----
  <--Insert the contents of the file Diffie-Helman dh4096.pem here
-----END DH PARAMETERS-----
</dh>


2.9.5 Розкоментуйте рядок:

topology subnet

 

2.9.6 Замініть рядок:

server 10.8.0.0 255.255.255.0

рядком:

server 10.1.0.0 255.255.255.0

 


2.9.7 Закоментуйте рядок:

;ifconfig-pool-persist ipp.txt


2.9.8 Замініть рядок:

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


2.9.9 Закоментуйте рядок:

;status openvpn-status.log

2.9 Щоб створити файл конфігурації для першого клієнта OpenVPN, скористайтеся прикладом client.ovpn, який знаходиться в C:\Program Files\OpenVPN\sample-config\ . Вам потрібно буде вставити в нього ключі та сертифікати наступним чином:

2.10.1 У рядку:

remote my-server-1 1194


замініть my-server-1 на доменне ім'я або публічну IP адерсу вашого OpenVPN серверу (Keenetic-1).

2.10.2 Замініть рядок:

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>


2.10.3 Замініть рядок:

cert client.crt


секцією:

<cert>
-----BEGIN CERTIFICATE-----
  <--Сюда вставьте тело сертификата первого клиента OpenVPN из файла Keenetic-2.crt
-----END CERTIFICATE-----
</cert>


2.10.4 Замініть рядок:

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>


2.10.5 Замініть рядок:

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


2.10.6 Додайте рядок з маршрутом до локальної мережі серверу:

route 192.168.1.0 255.255.255.0


або:

route 0.0.0.0 0.0.0.0 

якщо весь трафік потрібно спрямувати в тунель.

2.11 Повторіть ті ж дії для другого клієнта, взявши дані з файлів Keenetic-3.crt і Keenetic-3.key відповідно.

Приклади таких конфігураційних файлів для трьох клієнтів Keenetic додаються в кінці статті:

tls-server-keenetic-1.ovpn
tls-client-keenetic-2.ovpn
tls-client-keenetic-3.ovpn
Ви можете використовувати їх, замінивши ім’я клієнта 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

 

TIP: Порада: У другій частині прикладу для спрощення ми виконували всі операції в одній теці, хоча з міркувань безпеки рекомендується розмістити центр сертифікації на окремому комп’ютері, ізольованому від Інтернету, а секретний ключ зберігати лише на цьому; та мати сертифікат на знімному носії. Подібним чином особисті ключі сервера та клієнтів OpenVPN слід розміщувати лише на відповідних сторонах тунелю. Обміну підлягають лише сертифікати.

TIP: Примітка:

1. Клієнти OpenVPN, підключені до сервера, відображатимуться на сторінці «Список пристроїв» як «Незареєстровані пристрої». Якщо ви вибрали політику «Без доступу до Інтернету» на сторінці «Домашній сегмент» у розділі «Політика підключення для незареєстрованих пристроїв», не забудьте зареєструвати клієнтів OpenVPN, якщо вам також потрібно надати їм доступ до Інтернету.

2. Конфігурація інтерфейсу OpenVPN не зберігається у файлі startup-config. Для цілей резервного копіювання ми рекомендуємо створити резервну копію налаштувань OpenVPN в окремому файлі.

TIP: Порада: Ми рекомендуємо Вам ознайомитись з наступною інформацією:

 

Чи була ця стаття корисною?

99 з 168 вважають статтю корисною