OpenVPN-сервер на Keenetic

В ОС NDMS v2.10 був доданий OpenVPN-клієнт. А чи можна налаштувати OpenVPN-сервер?

Так, якщо встановлений компонент із назвою Клієнт OpenVPN, інтернет-центр Keenetic можна використовувати як клієнт і як сервер. Режим роботи OpenVPN в основному визначається його файлом конфігурації. У режимі сервера на Keenetic знадобиться дати лише кілька додаткових команд.

Розглянемо приклад.

openvpn.png

Будемо підключати до сервера на Keenetic # 1 (Home-сегмент 192.168.1.0/24, адреса кінця тунелю: 10.1.0.1) клієнт Keenetic # 2 (Home-сегмент 192.168.2.0/24, адреса кінця тунелю: 10.1.0.2).

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

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

dev tun
ifconfig 10.1.0.1 10.1.0.2
cipher AES-128-CBC
<Secret>
<- Сюди вставимо загальний секретний ключ
</ Secret>
verb 3
route 192.168.2.0 255.255.255.0

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

dev tun
remote KEENETIC-1.mykeenetic.ru <- доменне ім'я або ip-адреса сервера
ifconfig 10.1.0.2 10.1.0.1
cipher AES-128-CBC
<Secret>
<- Сюди вставимо загальний секретний ключ
</ Secret>
verb 3
route 192.168.1.0 255.255.255.0
або
route 0.0.0.0 0.0.0.0 <- якщо необхідно загортати в тунель весь трафік

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

У нашому прикладі будемо використовувати версію 2.4.4-I601 для Windows.

За замовчуванням програму буде встановлено в теку C: \ Program Files \ OpenVPN.
Запустіть командний рядок (Command Prompt) Windows від імені адміністратора.
Зайдіть в теку C: \ Program Files \ OpenVPN \ bin та виконайте команду:

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

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

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

1.5 Зайдіть в веб-інтерфейс 1-го Keenetic і в меню Інтернет на закладинці PPPoE / VPN додайте з'єднання. Переконайтеся, що встановлена ​​галочка Увімкнути. Виберіть Тип (протокол) - OpenVPN і вставте у вікно Конфігурація OpenVPN вміст файлу конфігурації static-server.ovpn:

1.6 За аналогією додайте з'єднання типу OpenVPN в веб-інтерфейсі іншого Keenetic, але зі зміною static-client.ovpn:



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

interface OpenVPN0 no ip global
interface OpenVPN0 security-level private

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

ip nat OpenVPN0

і збережіть налаштування командою system configuration save

1.8 І нарешті, необхідно відкрити порт для з'єднання OpenVPN. За замовчуванням використовується UDP port 1194. Для цього в меню Безпека на закладинці Міжмережевий екран, виберіть Правила для інтерфейсу - Broadband connection (ISP) і натисніть Додати.

У правилі фільтрації виберіть Дія - Підтвердити, Протокол - UDP, Номер порту призначення - Рівний 1194 та натисніть Зберегти.

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



Для перевірки спробуйте пропінгувати кінці тунелю з обох боків:

ping 10.1.0.1
ping 10.1.0.2

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

ping 192.168.1.1
ping 192.168.2.1

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

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

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

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

 

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

init-config.bat

У результаті ми отримаємо файл vars.bat, який налаштовує середу для генерування ваших ключів і сертифікатів.
Відкрийте цей файл у Блокноті (Notepad) Windows та вкажіть теку для їх зберігання, за замовчуванням keys:

set KEY_DIR = keys

а також значення полів власника ваших сертифікатів за замовчуванням, наприклад так:

set KEY_COUNTRY = RU
set KEY_PROVINCE = YourProvince <- ваша область / район
set KEY_CITY = YourCity <- ваше місто
set KEY_ORG = YourOrganisation <- ваша організація
set KEY_EMAIL=mail@example.ru <- ваш e-mail
set KEY_CN = CommonName <- ім'я хоста
set KEY_NAME = KeyName <- ім'я ключа
set KEY_OU = OrganisationUnit <- ваше підрозділ в організації

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

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

vars
clean-all

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

vars
build-ca

При цьому в теці C:\Program Files\OpenVPN\easy-rsa\keys з'являться згенеровані файли ключа ca.key та сертифіката ca.cert вашого посвідчуваного центру.

2.4 Створіть файл Діффі-Хелмана для захисту трафіку від розшифровки. Він знадобиться для використання сервером TLS. Процедура може зайняти значний час (десятки хвилин), але робиться одноразово:

vars
build-dh

У результаті в теці C:\Program Files\OpenVPN\easy-rsa\keys з'явиться файл dh4096.pem

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

vars
build-key-server Keenetic-1

При цьому, коли скрипт запитає CommonName (CN), введіть ім'я серверу, у нашому прикладі – Keenetic-1. А наприкінці зробіть подвійне підтверження (y), що підписуєте сертифікат.

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

vars
build-key Keenetic-2

КОли скрипт запитає CommonName (CN), введіть ім'я першого клієнта – Keenetic-2. Виконайте подвійне підтверження (y), що підписуєте сертифікат.

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

vars
build-key Keenetic-3

КОли скрипт заитає CommonName (CN), введить ім'я другого клієнта – Keenetic-3. Виконайте подвійне підтверження (y), що підписуєте сертифікат.

Аналогічним чином можна створити ключі, запити та сертифікати для довільного числа клієнтів.

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

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

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

Для використання в конфігах OpenVPN-сервера і клієнтів нам знадобляться наступні файли:
ca.crt - сертифікат, що засвідчує,
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-атак і флуду
Залишилося тільки додати їх вміст в текстові файли конфігурації сервера і клієнтів.

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

2.8.1 Замініть рядок:
ca ca.crt

на секцію:
<Ca>
----- BEGIN CERTIFICATE -----
<- Сюди вставте тіло сертифіката, що засвідчує, з файлу ca.crt
----- END CERTIFICATE -----
</ Ca> <

2.8.2 Замініть:
cert server.crt

на секцію:
<Cert>
----- BEGIN CERTIFICATE -----
<- Сюди вставте тіло сертифіката сервера OpenVPN з файлу Keenetic-1.crt
----- END CERTIFICATE -----
</ Cert>

2.8.3 Замініть рядок:
key server.key

на секцію:
<Key>
----- BEGIN PRIVATE KEY -----
<- Сюди вставте тіло закритого ключа сервера OpenVPN з файлу Keenetic-1.key
----- END PRIVATE KEY -----
</ Key>

2.8.4 Замініть рядок:
dh dh2048.pem

на секцію:
<Dh>
----- BEGIN DH PARAMETERS -----
<- Сюди вставте вміст файлу Діффі-Хелмана dh4096.pem
----- END DH PARAMETERS -----
</ Dh>

2.8.5 Розкоментуйте рядок:
topology subnet

2.8.6 Закоментуйте рядок:
; Ifconfig-pool-persist ipp.txt

2.8.7 Замініть рядок:
tls-auth ta.key 0

на секцію
<Tls-auth>
----- BEGIN OpenVPN Static key V1 -----
<- Сюди вставте вміст файлу ta.key
----- END OpenVPN Static key V1 -----
</ Tls-auth>

і додайте рядок:
key-direction 0

2.8.8 Закоментуйте рядок:
; Status openvpn-status.log

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

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

2.9.2 Замініть рядок:
ca ca.crt

на секцію:
<Ca>
----- BEGIN CERTIFICATE -----
<- Сюди вставте тіло сертифіката, що засвідчує, з файлу ca.crt
----- END CERTIFICATE -----
</ Ca>

2.9.3 Замініть рядок:
cert client.crt

на секцію:
<Cert>
----- BEGIN CERTIFICATE -----
<- Сюди вставте тіло сертифіката першого клієнта OpenVPN з файлу Keenetic-2.crt
----- END CERTIFICATE -----
</ Cert>

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

на секцію:
<Key>
----- BEGIN PRIVATE KEY -----
<- Сюди вставте тіло закритого ключа першого клієнта OpenVPN з файлу Keenetic-2.key
----- END PRIVATE KEY -----
</ Key>

2.9.5 Замініть рядок
tls-auth ta.key 1

на секцію
<Tls-auth>
----- BEGIN OpenVPN Static key V1 -----
<- Сюди вставте вміст файлу ta.key
----- END OpenVPN Static key V1 -----
</ Tls-auth>

і додайте рядок:
key-direction 1

2.9.6 Додайте рядок з маршрутом в локальну мережу сервера:
route 192.168.1.0 255.255.255.0
або
route 0.0.0.0 0.0.0.0 якщо необхідно весь трафік направляти в тунель.

2.10 Повторіть аналогічні дії для другого клієнта, взявши дані з файлів 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.ru на доменне ім'я або публічну ip-адресу вашого сервера Keenetic-1, а сертифікати і ключі на згенерований вами у всіх файлах.

Тепер залишилося лише завантажити їх на роутери Keenetic по аналогії з пп 1.5, 1.6 і виконати дії, описані в пп 1.7, 1.8 цієї інструкції.

На цьому налаштування завершене. Перевірте, що тунелі встановилися.

mceclip17.png

Для цього з боку клієнтів запустіть ping на адресу тунеля серверу:
ping 10.8.0.1

та на адресу верверу в його домашній мережі:
ping 192.168.1.1

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

Додаткова інформація. 

Документація по OpenVPN 2.4
https://ru.wikipedia.org/wiki/OpenVPN
https://ru.wikipedia.org/wiki/TUN/TAP


KB-5258

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

12 з 15 вважають статтю корисною