Клієнт і сервер OpenVPN
OpenVPN є одним з найпопулярніших протоколів для VPN з'єднань. Його можна використовувати для створення віртуальної приватної мережі або для з'єднання локальних мереж. OpenVPN є протоколом з відкритим кодом і розповсюджується безкоштовно під Ліцензією GNU GPL. Він забезпечує більш високу швидкість з'єднання, ніж інші протоколи VPN. Крім того, OpenVPN можна назвати одним з найбезпечніших протоколів. Всі передані дані надійно захищені шифруванням OpenSSL та протоколами SSLv3/TLSv1 , що забезпечує високу безпеку і анонімність.
Маршрутизатор Keenetic підтримує режими TCP та UDP для з'єднання OpenVPN, автентифікацію TLS, використання сертифікатів та ключів шифрування для підвищення безпеки VPN-з'єднання.
Важливо
МаршрутизаторKeenetic, на якому буде розміщено сервер OpenVPN, повинен бути підключений до Інтернету з публічною IP-адресою, а при використанні доменного імені KeenDNS його потрібно налаштувати в режимі «Прямий доступ». Якщо жодна з цих умов не виконується, під'єднатися до такого сервера з Інтернету буде неможливо.
Для налаштування з'єднання OpenVPN необхідно встановити системний компонент Клієнт і сервер OpenVPN. За допомогою цього компонента ви можете використовувати як клієнт, так і сервер OpenVPN у вашому Keenetic. Ви можете встановити системний компонент на сторінці Параметри системи в розділі KeeneticOSОновлення та параметри компонентів, натиснувши Змінити набір компонентів.

Режим роботи OpenVPN (клієнт або сервер) в основному визначається його файлом конфігурації.
Важливо
Вимоги до конфігурації OpenVPN для використання в Keenetic:
Конфігурація повинна бути в одному файлі.
У цей файл повинні бути включені сертифікати, ключі тощо.
У конфігурації слід використовувати тільки ті параметри, що перераховані в документі: OpenVPN 2.4 ManPage.
Деякі з описаних вище опцій можуть не підтримуватися. Наприклад, наша реалізація OpenVPN не підтримує параметри, пов'язані з IPv6.
Порядок параметрів, включених сертифікатів і ключів не має значення.
Ключі OpenSSL повинні бути встановлені без пароля, оскільки інтерфейс маршрутизатора не має можливості його ввести.
OpenVPN конфігурація не зберігається у файлі конфігурації
startup-config. Щоб мати резервну копію налаштувань інтерфейсу OpenVPN , необхідно зберегти її окремо.
Для моделей KN-1110, 1210, 1310, 1410, 1510, 1610, 1710, 1810 та 1910 кількість клієнтських підключень обмежується розміром виділеного розділу службової пам'яті 24 Кбайт для зберігання конфігурацій VPN. Це особливо важливо для підключень OpenVPN, оскільки загальний розмір їхніх конфігурацій не повинен перевищувати 24 Кбайт. Для сучасних моделей Keenetic з індексом KN-XXXX розмір сховища, де у стислому вигляді розміщуються файл конфігурації startup-config і змінні середовища (включаючи ключі), було збільшено і становить від 260 Кбайт до 2 Мбайт (залежно від моделі).
Розглянемо приклад підключення OpenVPN типу 'site-to-site'.

Ми підключимо клієнт Keenetic#2 (домашній сегмент 192.168.2.0/24, адреса тунелю: 10.1.0.2) до сервера на Keenetic#1 (домашній сегмент 192.168.1.0/24, адреса тунелю: 10.1.0.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
Мінімальна конфігурація клієнта 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
Створіть спільний секретний ключ. Для цього завантажте та встановіть OpenVPN звідси: openvpn.net/завантаження.html
У цьому прикладі ми будемо використовувати версію
2.4.6-I602для Windows.Після установки програмного забезпечення перезавантажте комп'ютер.
За замовчуванням програма буде встановлена в
C:\Program folder.Запустіть командний рядок Windows від імені адміністратора. Перейти до
C:\Program Files\OpenVPN\binі виконайте команду:openvpn.exe --genkey --secret static.key

Відкрийте згенерований файл
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-адресу та спільний секретний ключ на той, який ви згенерували, в обох файлах.Перейдіть на сторінку Інші з'єднання у вебінтерфейсі Keenetic№1 та натисніть Створити підключення в розділі VPN-підключення. У вікні Налаштування VPN-підключення виберіть OpenVPN в полі Тип (протокол).
Потім введіть ім'я підключення в поле Ім'я підключення та вставте вміст файлу конфігурації
static-server.ovpnв поле Конфігурація OpenVPN. Збережіть налаштування.
Важливо
Починаючи з KeeneticOS
3.4.1, сервер працює, тільки якщо вказано Підключатися через — Будь-яке Інтернет-з'єднання.Так само додайте з’єднання OpenVPN до вебінтерфейсу Keenetic#2, але з конфігурацією
static-client.ovpn:
Додатково на стороні 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. Порт за замовчуванням —
UDP/1194. Для цього створіть правило для інтерфейсу Інтернет-провайдер або для інтерфейсу, що використовується для доступу в Інтернет, на сторінці Міжмережевий екран (окрім Інтернет-провайдера, це можуть бути інтерфейси PPPoE, L2TP або PPTP).
У вікні Правило міжмережевого екрана виберіть Дозволити в полі Дія, UDP в полі Протокол і Дорівнює
1194в полі Номер порту призначення.Після створення з'єднання встановіть перемикач на Увімкнено.

На цьому налаштування тунелю OpenVPN завершено. На сторінці Інші підключення відображатиметься статус з'єднання та статистика.
Спробуйте для перевірки зробити пінг на обидва кінці тунелю:
ping 10.1.0.1 ping 10.1.0.2
а потім віддалені підмережі:
ping 192.168.1.1 ping 192.168.2.1
Примітка
Конфігурація інтерфейсу OpenVPN не зберігається у файлі startup-config. Для резервного копіювання рекомендуємо створити резервну копію налаштувань OpenVPN в окремому файлі.
Якщо клієнтське з'єднання OpenVPN необхідно використовувати для доступу в Інтернет, призначте цьому з'єднанню найвищий пріоритет. Інформацію про пріоритети ви знайдете в статті Політики підключень.
У деяких випадках в конфігурації OpenVPN необхідно вказати логін і пароль для аутентифікації при підключенні VPN-тунелю. Для цього необхідно додати в файл конфігурації розділ
auth-user-pass, вказавши значення логіна і пароля. Наприклад:<auth-user-pass> vpnclient # login r3d23xs87 # password </auth-user-pass>
Приклад створення ключів і сертифікатів у Windows для підключення до сервера OpenVPN наведено в статті OpenVPN configuration using two-way TLS authentication.
Типові помилки та рішення:
auth-user-pass without inline credentials data is not supportedФайл конфігурації містить рядок для введення логіну/пароля, який Keenetic не підтримує. Помилка у файлі журналу Keenetic:
OpenVPN0 auth-user-pass without inline credentials data is not supported OpenVPN0 Exiting due to fatal error
Видаліть або закоментуйте всі рядки такого роду:
auth-user-passBlock-outside-dnsпомилкаblock-outside-dnsопція налаштована на Сервері OpenVPN, вона правильно обробляється тільки в Windows. Помилка у файлі журналу Keenetic:OpenVPN0 Unrecognized option or missing or extra parameter(s) in configuration: (line X): block-outside-dns (2.4.4) OpenVPN0 Exiting due to fatal error
Додайте рядок до файлу конфігурації OpenVPN клієнта:
pull-filter ignore "block-outside-dns"Помилка при підключенні до серверів PrivateTunnel
Виводиться помилка при спробі підключення:
OpenVPN0 Unrecognized option or missing or extra parameter(s) in configuration: (line 3): client-ip (2.4.4)
Додайте рядок до файлу конфігурації клієнта OpenVPN:
ignore-unknown-option client-ip block-ipv6Виникає помилка при використанні опції
/storage/key.txt:Error: private key password verification failed
Це обмеження поточної реалізації OpenVPN в Keenetic. Ви можете використовувати тільки ключ без пароля або з фіксованим паролем: '
password'.Після оновлення маршрутизатора до KeeneticOS
3.9.1, тунель VPN до серверів OpenVPN для певних постачальників VPN більше не може бути встановлений. У системному журналі можна побачити такі повідомлення:W [Dec 15 16:52:58] OpenVPN6: DEPRECATED OPTION: --cipher set to 'AES-128-CBC' but missing in --data-ciphers (AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305). OpenVPN ignores --cipher for cipher negotiations. Error: private key password verification failed
Проблема в застарілому форматі шифрування BF-CBC, який не підтримується, починаючи з клієнтської версії ОpenVPN
2.5.0(KeeneticOS3.9використовує версію клієнта OpenVPN2.6.0).Примітка
BF-CBCшифр більше не підтримується в конфігурації за замовчуванням. Версія OpenVPN2.5.0підтримує шифриAES-256-GCMіAES-128-GCMза замовчуванням. Ви можете змінити цю поведінку за допомогою опціїdata-ciphers, наприклад, вказавши в налаштуванняхdata-ciphers AES-256-GCM:AES-128-GCM:BF-CBC. Для підтримки дуже старих вузлів OpenVPN, які не підтримують узгодження шифрів (режим "--cipher«), можна вказатиdata-ciphers-fallback BF-CBC.При оновленні до нової версії OpenVPN налаштування '
cipher BF-CBC' в старих файлах конфігурації буде перетворене з додаваннямBF-CBCдоdata-ciphersсету. Крім того, буде увімкнений режимdata-ciphers-fallback.Для успішної установки тунелю потрібно змінити директиву:
cipher AES-128-CBCнаdata-ciphers AES-128-CBCабо наdata-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305Якщо не працює, то змініть директиву:
cipher AES-128-CBCнаdata-ciphers-fallback AES-128-CBCДля максимальної сумісності узгодження шифрів з віддаленим сервером вкажіть наступні директиви:
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305data-ciphers-fallback AES-128-CBCабо
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305data-ciphers-fallback AES-256-CBCВажливо
Шифрування залежить від віддаленого сервера OpenVPN. Перед зміною директиви
cipher, будь ласка, подивіться системний журнал.Якщо в журналі записана наступна помилка розміру ключа:
[E] Dec 16 19:01:38 OpenVPN0: Unrecognized option or missing or extra parameter(s) in configuration: (line 22): keysize (2.6_git) [E] Dec 16 19:01:38 OpenVPN0: Exiting due to fatal error [E] Dec 16 19:01:38 ndm: Service: "OpenVPN0": unexpectedly stopped.Error: private key password verification failed
Тоді в конфігурації тунелю потрібно прибрати директиву опції
keysize 256, яка застаріла для оновленого клієнта Опен-VPN2.6.0, і ще раз перевірити підключення тунелю.Ви можете знайти детальну інформацію про опцію '
keysize' за цим посиланням.
Рекомендуємо ознайомитися з наступною інформацією: