Розширене використання OpenVPN. Частина 2

11 травня 2023 2 хвилин Автор: D2-R2

Для чого використовувати OpenVPN

І так довгоочікуване продовження теми просунутого використання OpenVPN. У попередній статті ми встановили сервер openvpn та програму easy-rsa, необхідну для генерації сертифікатів та ключів, згенерували самі ключі та сертифікати, виконали налаштування сервера, включили фаєрвол та дозволили підключення на потрібний нам порт. У цій статті ми створимо файл конфігурації для клієнта, налаштуємо і перевіримо, як усе працює. Вона надає можливість отримати безпечний та захищений доступ до мережі Інтернет зі смартфона або ноутбука при підключенні до недовіреної мережі, наприклад Wi-Fi у готелі або кафе. OpenVPN – це повнофункціональне рішення VPN з відкритим вихідним кодом, яке використовує протокол TLS і дозволяє використовувати широке коло конфігурацій.

OpenVPN має відкритий вихідний код та безкоштовно поширюється під ліцензією GNU GPL. OpenVPN можна назвати одним із найбезпечніших протоколів. Всі дані, що передаються, надійно захищені за допомогою бібліотеки шифрування OpenSSL і протоколів SSLv3/TLSv1, що забезпечує високу безпеку та анонімність. В інтернет-центрі Keenetic для підключення OpenVPN реалізовані такі можливості як режим TCP і UDP, автентифікація TLS, використання сертифікатів та ключів шифрування для підвищення безпеки VPN-підключення. OpenVPN має бути підключений до Інтернету з білою IP-адресою, а при використанні доменного імені KeenDNS, воно має бути налаштоване в режимі “Прямий доступ”, для якого також потрібна публічна IP-адреса. У разі недотримання будь-якої з цих умов підключення до такого сервера з Інтернету буде неможливо.

Перехід із OpenVPN 2.4.* на OpenVPN 2.5.*

Станом на осінь 2021 OpenVPN вже майже рік як перейшов на нову мажорну гілку 2.5.*. Якщо ви зволікали з оновленням, то тепер нову гілку можна вважати перевіреною часом. Тим не менш, якщо ви переходите з гілки 2.4, то вам може знадобитися відкоригувати конфігураційні файли.

1. У конфігураційних файлах сервера та клієнта замініть рядок:


На



 

2. Якщо ви використовуєте протокол TCP (що не рекомендується), то замість рядка:



Використовуйте на сервері рядок:


 

3. Використовуйте на клієнті рядок:



Протокол UDP на сервері та на клієнті позначається однаково:



4. При налаштуванні статичних IP адрес всередині віртуальної приватної мережі тепер використовується запис:



Наприклад :



Як використовувати OpenVPN з протоколом TCP

За промовчанням OpenVPN використовує протокол UDP і офіційно рекомендується використовувати його. Тим не менш, протокол TCP також чудово працює з OpenVPN і у разі потреби ви можете використовувати його. Теоретично, протокол TCP має більше «накладних витрат», тобто деяка частина даних, що передаються, не буде нести корисне навантаження, а необхідна тільки для нормальної роботи TCP, який відстежує збереження і цілісність переданих пакетів. У моєму випадку необхідність додати підтримку TCP виникла через те, що з деякими Інтернет-провайдерами OpenVPN на протоколі UDP не міг підключитися через помилку (помилка буде розглянута далі), але чудово працював на протоколі TCP. Для налаштування роботи OpenVPN з протоколом TCP потрібно знати такі моменти:

1. Протокол має бути вказано явно.

У налаштуваннях конфігураційних файлів замість рядка:



Використовуйте на сервері рядок:



Клієнтський рядок:



Для довідки: протокол UDP на сервері та на клієнті позначається однаково:



2. Протокол TCP має бути вказаний у конфігураційних файлах як сервера, і клієнта.

3. Не використовуйте опцію explicit-exit-notify.

У конфігураційному файлі сервера не використовуйте налаштування (просто видаліть цей рядок):



Інакше ви зіткнетеся з помилкою:



4. Порт має бути вільний.

Це однаково стосується роботи OpenVPN як з UDP, так і з TCP: вибраний порт повинен бути вільний, інакше ви зіткнетеся з помилкою «TCP/UDP: Address already in use (errno=98)», наприклад:



Сравнение производительности OpenVPN через UDP и TCP

Швидкість мого Інтернет-з’єднання без використання OpenVPN:



Швидкість мого Інтернет-з’єднання з використанням протоколу UDP:



Швидкість мого Інтернет-з’єднання з використанням OpenVPN за протоколом TCP.

Як можна побачити, втрата швидкості при переході з UDP на TCP досить значна. Різниця в швидкості між відсутністю OpenVPN і OpenVPN за протоколом UDP незначна – фактично, в обох випадках швидкість практично впирається в максимальну пропускну здатність моєї мережі.



Одночасне використання кількох OpenVPN на одному сервері

Ви можете одночасно використовувати відразу кілька OpenVPN процесів на одному сервері, при цьому вони працюватимуть на різних портах і надаватиму окремі віртуальні приватні мережі, що не перетинаються одна з одною. Робота декількох екземплярів OpenVPN передбачена з коробки, але потрібне додаткове налаштування.

1. Служби OpenVPN повинні використовувати різні порти

Всі служби OpenVPN повинні використовувати вільний порт. Пам’ятайте, що однакові номери портів UDP і TCP є різними портами, тобто, можна використовувати однаковий номер порту у двох примірниках OpenVPN за умови, що один з них є портом UDP, а інший TCP портом.

Якщо дві служби OpenVPN використовують однаковий порт, то перший екземпляр OpenVPN, що запускається, працюватиме без помилок, а другий екземпляр не запуститься через помилку «TCP/UDP: use (errno=98)», наприклад:



Для третьої служби можна вказати наступний діапазон IP-адрес і так далі:



2. Діапазон адрес віртуальної приватної мережі

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



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



3. Маршрутизація трафіку для всіх віртуальних приватних мереж

У розділі «Увімкнення маршрутизації трафіку на сервері OpenVPN» показано, як увімкнути NAT для трафіку віртуальних приватних мереж, щоб вони могли робити підключення до мережі Інтернет. У прикладі вказаного розділу показано налаштування маршрутизації для трафіку з підмережі 10.8.1.0/24. Оскільки для додаткових екземплярів служби OpenVPN використовуються інші підмережі (наприклад, 10.8.1.0/24), то для того, щоб клієнти даних віртуальних мереж могли виходити в Інтернет, необхідно налаштувати маршрутизацію для кожної з цих мереж.

Приклад вихідного вмісту файлу /root/bin/vpn_route.sh:



Файл /root/bin/vpn_route.sh + NAT для підмережі 10.8.1.0/24, 10.8.2.0/24 та 10.8.3.0/24:



Щоб перевірити налаштування NAT, виконайте команду:





4. Налаштування локальних статичних адрес

Якщо ви використовували розділ “Як зробити статичні IP для клієнтів OpenVPN” і додавали записи виду “ifconfig-push 10.8.0.10 255.255.255.0” у файл “/etc/openvpn/ccd/client1“, то вам потрібно використовувати інші імена клієнтів для другої та наступних мереж OpenVPN, оскільки вони використовують інші діапазони IP-адрес віртуальної приватної мережі.

5. Запуск и добавление второй и последующих служб OpenVPN в автозагрузку

Зверніть увагу, що з systemctl можна використовувати команду виду:



Де <configuration> – це конфігураційний файл, який лежить в папці /etc/openvpn/server/, але без розширення .conf. 0 Наприклад, другий конфігураційний файл другого екземпляра служби OpenVPN поміщені у файл /etc/openvpn/server/server-tcp.conf, тоді програма для запуску служби наступна:



Перевірка статусу служби з файлом конфігурації server-tcp.conf:



Перегляд помилок служби OpenVPN із конфігураційним файлом server-tcp.conf:



Додавання служби до автозавантаження:



Виправлення помилок

У процесі використання OpenVPN ви можете зіткнутися з ситуацією, коли не вдається підключитися до сервера OpenVPN без видимих причин. Наприклад, в цілому OpenVPN працює правильно і підключення відбуваються, але на певних Інтернет-провайдерах підключення не може виконати успішне рукостискання TLS.

Приклад логів на стороні сервера OpenVPN:



Приклад логів на стороні OpenVPN клієнта:



Причиною такої помилки може бути Інтернет-провайдер, який певним чином фільтрує трафік або використовує невдало налаштований NAT. Для виправлення помилки може виявитися достатнім виконати одну з таких дій:

  • змінити порт OpenVPN сервера
  • змінити протокол, що використовується, з UDP на TCP

Керування OpenVPN з’єднаннями в Linux

На відміну від Windows, для якої розробники OpenVPN створили та підтримують клієнт з графічним інтерфейсом, у Linux від розробників представлений тільки клієнт з інтерфейсом командного рядка. Але чудовою альтернативою для офіційного клієнта є NetworkManager. У більшості дистрибутивів NetworkManager вже встановлено і навіть додано в автозавантаження, оскільки ця служба відповідає за всі мережеві з’єднання, дротові та бездротові. У похідних Debian пакет називається network-manager, похідних Arch Linux пакет називається networkmanager.

Для NetworkManager є плагіни, деякі з яких є в репозиторіях дистрибутивів Linux. Оскільки ця нотатка фокусується на OpenVPN, то нас цікавить плагін для роботи OpenVPN, який у Debian називається network-manager-openvpn-gnome (не дивлячись на назву, у Xfce використовується той же плагін), а в Arch Linux це networkmanager-openvpn. Встановіть цей плагін, якщо він ще немає. Оскільки більшу частину функцій управління з’єднаннями OpenVPN бере на себе NetworkManager і плагін networkmanager-openvpn, то робота з OpenVPN в цілому схожа в різних дистрибутивах. Проте середовище робочого столу накладають свої особливості. Хоча особливості не є критичними, ми розглянемо роботу з OpenVPN у популярних середовищах робочого столу Linux.

Управление настройками VPN в Cinnamon

Середовище робочого столу Cinnamon характерне насамперед для Linux Mint.

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

  • Network Settings — налаштування мереж від Cinnamon (отже, є тільки в даному середовищі робочого столу)
  • Network Connections — налаштування мереж від NetworkManager (отже, є у будь-якому дистрибутиві з NetworkManager)

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



Network Settings містить список доступних для підключення Wi-Fi мереж, налаштувань, проксі, дротові з’єднання.

Network Connections не показує доступні для підключення Wi-Fi мережі, проте зберігає налаштування мереж, до яких комп’ютер коли-небудь підключався.





Керування підключеннями OpenVPN у Network Settings

Щоб видалити OpenVPN підключення, та натисніть знак мінус ().



Щоб додати OpenVPN підключення, натисніть знак плюс (+).



Вам буде запропоновано 2 опції:

  • OpenVPN (сумісне з сервером OpenVPN) — вам потрібно буде ввести налаштування вручну та вказати файли сертифікатів
  • Import from file — імпортувати параметри з файл.

При ручному налаштуванні вам не потрібно змінювати вкладки IPv4 та IPv6. Частина налаштувань розміщується на вкладці Identity, для доступу до інших налаштувань натисніть кнопку «Додатково»:



Щоб редагувати з’єднання OpenVPN, виберіть його та натисніть значок шестерні.



Частина налаштувань розміщується на вкладці Identity.

Щоб отримати доступ до інших параметрів, натисніть кнопку «Додатково».



Керування з’єднаннями OpenVPN у Network Connections

1. Щоб видалити OpenVPN підключення, натисніть знак мінус (-).

2. Щоб додати OpenVPN підключення, натисніть знак плюс (+).

.



У списку, що випадає, вам буде доступно багато опцій, 2 з них мають відношення до OpenVPN:

OpenVPN — потрібно ввести налаштування вручну та вказати файли сертифікатів.

Імпортувати збережену конфігурацію VPN



При ручному налаштуванні вам не потрібно змінювати зміни на вкладках Основне, Проксі, Параметри IPv4 і Параметри IPv6. Частина налаштувань розміщується на вкладці VPN, натисніть кнопку «Додатково», щоб отримати доступ до інших параметрів.

Щоб редагувати з’єднання OpenVPN, виберіть його та натисніть значок шестерні.



Підключення до сервера OpenVPN

Ви можете додати кілька OpenVPN підключень і включати будь-яке їх залежно від ваших потреб. Увімкнути їх можна як на основній панелі NetworkManager – натисніть на вибране підключення:



Також увімкнути VPN підключення можна в Network Settings, для цього виберіть потрібне VPN з’єднання і натисніть перемикач:



Керування налаштуваннями VPN у Xfce

Популярними дистрибутивами з Xfce є Kali Linux та Xubuntu. У Xfce є лише Network Connections. Є два способи додати нове з’єднання OpenVPN:

1) Клацніть правою кнопкою миші по іконці мережного підключення та виберіть «Параметри з’єднань»:



У вже знайомому Network Connections натисніть знак плюс (+).



2) Або клацніть лівою кнопкою миші по іконці мережного підключення та виберіть «З’єднання VPN» → «Додати VPN-з’єднання».



Виберіть тип VPN підключення.



Щоб імпортувати з’єднання VPN з файлу, виберіть «Імпортувати збережену конфігурацію VPN».



Натисніть кнопку «Створити» та вкажіть файл із налаштуваннями.

При ручному налаштуванні вам не потрібно змінювати зміни на вкладках Основне, Проксі, Параметри IPv4 і Параметри IPv6. Частина налаштувань розміщується на вкладці VPN, натисніть кнопку «Додатково», щоб отримати доступ до інших параметрів.



Для підключення до OpenVPN клацніть лівою кнопкою миші по іконці підключення до мережі та виберіть «З’єднання VPN» і виберіть бажане підключення.


У разі успішного підключення з’явиться галочка навпроти імені VPN з’єднання.



Щоб додати, змінити та видаляти VPN з’єднання, перейдіть до Network Connections, для цього клацніть правою кнопкою миші по іконці мережного підключення і виберіть «Параметри з’єднань».



Керування налаштуваннями VPN у Xfce

Популярними дистрибутивами з Xfce є Kali Linux та Xubuntu. У Xfce є лише Network Connections. Є два способи додати нове з’єднання OpenVPN:

1) Клацніть правою кнопкою миші по іконці мережного підключення та виберіть «Параметри з’єднань»:



У вже знайомому Network Connections натисніть знак плюс (+).



2) Або клацніть лівою кнопкою миші по іконці мережного підключення та виберіть «З’єднання VPN» → «Додати VPN-з’єднання».



Виберіть тип VPN підключення.



Щоб імпортувати з’єднання VPN з файлу, виберіть «Імпортувати збережену конфігурацію VPN».



Натисніть кнопку «Створити» та вкажіть файл із налаштуваннями.

При ручному налаштуванні вам не потрібно змінювати зміни на вкладках Основне, Проксі, Параметри IPv4 і Параметри IPv6. Частина налаштувань розміщується на вкладці VPN, натисніть кнопку «Додатково», щоб отримати доступ до інших параметрів.


Для підключення до OpenVPN клацніть лівою кнопкою миші по іконці підключення до мережі та виберіть «З’єднання VPN» і виберіть бажане підключення.



У разі успішного підключення з’явиться галочка навпроти імені VPN з’єднання.



Щоб додати, змінити та видаляти VPN з’єднання, перейдіть до Network Connections, для цього клацніть правою кнопкою миші по іконці мережного підключення і виберіть «Параметри з’єднань».



Керування налаштуваннями VPN у GNOME 3

Популярним прикладом дистрибутива Linux, який використовує GNOME 3, є Ubuntu. Щоб додати OpenVPN з’єднання, натисніть на іконку мережного підключення:

1. Розгорніть розділ підключення.



2. Виберіть «Параметри з’єднання»:



3. Опинившись у налаштуваннях ОС, на вкладці «Мережа» можна додати нове VPN підключення або керувати існуючими. Щоб додати новий, натисніть знак плюс (+).



4. При ручному налаштуванні вам не потрібно змінювати вкладки «IPv4» та «IPv6». Частина налаштувань розміщується на вкладці «Ідентифікація», для доступу до інших налаштувань натисніть кнопку «Додатково»:



Ви можете ввести дані вручну або імпортувати налаштування OpenVPN підключення з файлу .ovpn. Або увімкнути OpenVPN з’єднання ви можете натиснувши кнопку мережевих з’єднань, потім вибравши бажане VPN з’єднання.





При ручному налаштуванні вам не потрібно змінювати вкладки «IPv4» та «IPv6». Частина налаштувань розміщується на вкладці «Ідентифікація», для доступу до інших налаштувань натисніть кнопку «Додатково»:



Увімкнути OpenVPN з’єднання ви можете натиснувши кнопку мережевих з’єднань, потім вибравши бажане VPN з’єднання.

Ви також можете перейти в Налаштування мережі та увімкнути вибране OpenVPN з’єднання там.



Щоб редагувати з’єднання VPN, натисніть кнопку підключення до мережі, потім розгорніть список VPN і виберіть «Параметри VPN».



Виберіть з’єднання, яке потрібно змінити, і натисніть шестерню.



Щоб видалити OpenVPN з’єднання, перейдіть до його налаштувань, як це показано трохи вище, і натисніть кнопку «Видалити VPN».

Как подключиться к Tor через OpenVPN

Підключення до Tor через VPN на практиці зазвичай застосовується не так для підвищення анонімності (хоча і таке застосування має місце), скільки для обода блокування мережі Tor. У деяких країнах на державному рівні блокується мережа Tor, тому для підключення браузера Tor або служби Tor необхідно використовувати мости – проміжні вузли мережі Tor. Замість мостів можна підключатися до мережі Tor через VPN. Насправді підключення Tor через VPN навіть простіше, ніж використання мостів.

Зверніть увагу, що через особливості реалізації блокування (наприклад, блокування виконується лише на рівні провайдерів останньої милі), для обходу блокування підключення до мережі Tor можна використовувати навіть VPN тієї країни, де мережа Tor заблокована. Ознаки того, що Інтернет-провайдер блокує доступ до мережі Tor, полягають у тому, що підключення до Tor зупиняється на перших етапах. Наприклад, Tor Browser завмирає на написі:





Ще один варіант помилки:



При спробі використати службу Tor, запустивши її командою



Перевірка статусу



Покаже, що початкове завантаження зупинилося на 5%, тобто на етапі підключення до ретранслятора:





Для того, щоб здійснити підключення до мережі Tor через VPN, почніть з того, що підключіться до сервера VPN, наприклад, використовуючи OpenVPN. Відразу після цього можна користуватися службою Tor як завжди — додаткове налаштування не потрібне. Браузер Tor успішно підключається до мережі Tor та відкриває сайти.





tor успішно встановлює з’єднання з мережею Tor.


Скрипт для подключения и отключения от OpenVPN

Завдання:

Підмережі філій об’єднані через OpenVPN. Всі клієнти підключаються до сервера і маршрути в Інтернет прописані через сервер OpenVPN. Все працює, тільки є проблема. Якщо OpenVPN сервер з якоїсь причини залишається без Інтернету, то й інші філії теж залишаються без інтернету, адже трафік йде не через свій шлюз, а через сервер OpenVPN. Чи можна якось написати скрипт, щоб:

1. За відсутності зв’язку до OpenVPN сервера маршрути відновлювалися та працювали через власний шлюз.

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

3. При відновленні підключення маршрути прописувалися знову через OpenVPN сервер.

Теоретично, цілком можливо написати скрипт на Bash (для Linux) або PowerShell (для Windows) який би пінгував OpenVPN сервер і якщо сервер онлайн виконував би підключення до нього або якщо підключення вже присутній, то нічого б не робив. А якщо OpenVPN сервер офлайн, то виконував відключення від нього або нічого не робив, якщо сервер вже відключений. У Linux такий скрипт можна додати автозавантаження і потім регулярно його запускати за допомогою таймерів Systemd або Cron. У Windows також можна вирішити з допомогою Диспетчера завдань (Windows Task Scheduler).

Але ІМХО це кардинально неправильний підхід. Потрібно прагнути до того, щоб сервер OpenVPN завжди був онлайн. Оскільки для чогось він потрібен у роботі користувачів, якщо вони до нього підключаються? А якщо так, то при відключенні від OpenVPN будуть збої у підключенні до локальних ресурсів.

И тем не менее, вот примеры скриптов.

Для Windows скрипт написаний на PowerShell, створіть файл vpn.ps1 і скопіюйте в нього (замініть IP-адресу OpenVPN сервера та шлях до конфігураційного файлу на свої):



Перевіряти так:



1. OpenVPN сервер онлайн, тому скрипт виконує підключення до нього і під час наступних перевірок нічого не робить. Перевірка IP клієнта показує, що вихід в Інтернет виконується дійсно через OpenVPN:



2. OpenVPN офлайн, тому скрипт розриває зв’язок із ним. При наступних перевірках скрипт нічого не робить, поки OpenVPN сервер не стане доступним. Коли OpenVPN знову онлайн, підключається до нього.


Використовуйте Диспетчер задач Windows для запуску вашого скрипту приблизно наступним чином:



Приклад скрипта для Linux – створіть файл vpn.sh і скопіюйте в нього:



Запускати так:



OpenVPN сервер онлайн, тому скрипт виконує підключення до нього і під час наступних перевірок нічого не робить. Перевірка IP клієнта показує, що вихід в Інтернет виконується через OpenVPN. OpenVPN офлайн, тому скрипт розриває зв’язок із ним. При наступних перевірках скрипт нічого не робить, поки OpenVPN сервер не стане доступним. Коли OpenVPN знову онлайн, підключається до нього.



Для регулярного запуску використовуйте .timer systemd або cron. А на цьому сьогодні все, дякую всім за увагу.

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.