Установка і настройка клієнта openvpn в ubuntu

Колись давним-давно, коли кавуни на деревах були зовсім ще зеленими, я познайомився з чудовим проектом OpenVPN. які зробили мою роботу щодо зв'язування розподілених локальних мереж воєдино. Першим досвідом стала настройка сервера під FreeBSD, ну а далі, як то кажуть, понеслося. На сьогоднішній день майже всі сервери, налаштовані мною, працюють під Ubuntu Linux тієї чи іншої версії.







І ось недавно я звернув увагу на те, що серед барахла, що зберігається в /etc/init.d. скромненько причаївся скрипт з ім'ям «openvpn». «Ну і че?» - тут же запитає досвідчений адміністратор. Вся справа в тому, що до недавніх пір підняття мережевих інтерфейсів, в тому числі і TUN. я організовував виключно через / etc / network / interfaces. оперуючи опціями pre-up для запуску демона OpenVPN і опціями pre-down для його зупинки. Все це «неподобство» повсюдно розбавлялося різними командами, маніпулюють таблицями маршрутизації. Загалом, досить громіздка картинка виходила. В принципі, все працювало цілком собі пристойно, але раз є наданий розробниками інший (Ubuntu-way?) Шлях, то чому б їм не скористатися, тим більше, що це дозволить значно розвантажити / etc / network / interfaces. Отже, що у мене вийшло.

установка OpenVPN

Установка OpenVPN в Ubuntu не вимагає яких-небудь фінтів вухами:

$ Sudo apt-get install openvpn

Обов'язково підтвердіть установку всіх залежностей.

Тим же, кому хочеться / потрібно встановити OpenVPN з вихідних кодів, доведеться ознайомитися з відповідною інформацією.

Якщо вас цікавлять бінарні пакети під інші платформи, відвідайте сторінку завантажень проекту.

Розміщення файлів ключів

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

  • закритий ключ шифрування клієнта в форматі .pem (назвемо файл client.key);
  • підписаний центром сертифікації сертифікат клієнта в форматі .pem. (Назвемо файл client.crt);
  • сертифікат центру сертифікації сервера в форматі .pem. яким був підписаний файл client.crt (назвемо файл ca.crt)

Отримавши ключ і сертифікати, обов'язково подбайте про їхню безпеку. Хорошим рішенням буде розміщення всього цього добра на флешці, зашифрованою, наприклад, TrueCrypt. У цій статті будемо вважати, що ключі та сертифікати розміщені в каталозі / media / keys. Також, обов'язково залиште мінімум прав доступу до каталогу з ключем і сертифікатами:

файл конфігурації

Фали конфігурації OpenVPN, як правило, розташовуються в каталозі / etc / openvpn або / usr / local / etc / openvpn. У цій статті я припускаю, що ви встановили OpenVPN з репозитаріїв Ubuntu і каталогом для зберігання конфігурації є / etc / openvpn.

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







client
remote myvpnsrv.com
ca /media/keys/ca.crt
key /media/keys/client.key
cert /media/keys/client.crt
daemon
dev tun
proto udp
comp-lzo

Перший рядок повідомляє OpenVPN, що підключення буде здійснюватися в режимі клієнта.

Значення параметрів ca. keys і cert визначають шляхи до файлу сертифіката CA, закритому ключу і сертифікату клієнта відповідно.

Зазначенням параметра daemon ми змушуємо OpenVPN відчепитися від консолі і працювати у фоновому режимі.

Параметр dev вказує тип мережевого інтерфейсу, який буде використовуватися для обміну шифрованих трафіком з сервером. Може мати значення tun або tap. Принципову різницю між цими двома типами інтерфейсів можна дізнатися тут і тут.

Параметр proto визначає протокол, в який буде завертатися зашифрований зв'язок. Краще використовувати UDP.

Наявність параметра comp-lzo змушує OpenVPN стискати трафік, що дуже корисно при наявності «вузького» каналу передачі даних.

Маршрутизація і зовнішні скрипти

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

Відразу ж відзначте собі один тонкий момент. Для того, щоб OpenVPN-демон зміг запускати зовнішні програми, йому необхідно це явно дозволити робити, передавши параметр script-security зі значенням, не нижче 2. Безпека, однако.

Для того, щоб вказати шлях до програми, що викликається автоматично після того, як мережевий інтерфейс буде піднято, використовуйте параметр up. передавши йому в якості значення шлях до програми і, можливо, додаткові параметри.

Для того, щоб запускати зовнішню програму після відключення мережевого інтерфейсу, використовуйте параметр down. повідомивши йому, природно, шлях і параметри спричиненої програми. Якщо ж необхідно, що програма запускалася перед відключенням інтерфейсу, також вкажіть параметр down-pre без значення.

Тепер трохи про специфіку виклику зовнішніх програм демоном OpenVPN. Справа в тому, що вони не просто «тупо» викликаються, а їм передаються ще деякі параметри підключення, що дуже зручно при роботі з таблицями маршрутизації.

Формат виклику зовнішньої програми демоном OpenVPN при ініціалізації tun-інтерфейсу наступний:

tun_dev tun_mtu link_mtu ifconfig_local_ip ifconfig_remote_ip [init | restart]

Для tap-інтерфейсу формат той же, за винятком того, що замість ifconfig_remote_ip передається ifconfig_netmask. що містить маску підмережі, в якій знаходиться наш клієнт.

Також, слід зазначити, що всі параметри, які ви будете передавати зовнішній програмі, за допомогою up / down. будуть підставлені перед параметрами, перерахованими вище.

Теорії, думаю, досить, перейдемо до справи. Припустимо, вам необхідно, щоб під час запуску / перезапуску / зупинки демона OpenVPN якимось чином видозмінювалася таблиця маршрутизації вашого хоста. Для двох мережевих інтерфейсів я вирішив цю задачу наступним скриптом на bash:

А виклик скрипта здійснюється двома параметрами OpenVPN:

up '/usr/local/bin/routes.sh up'
down '/usr/local/bin/routes.sh down'

Тобто, що запускається скрипт отримує приблизно такі параметри:

  • $ 1 - up або down;
  • $ 2 - ім'я інтерфейсу. У розглянутій мною системі їм може бути tun0 або tun1;
  • $ 3 - наприклад 1500;
  • $ 4 - наприклад 1542
  • $ 5 - наприклад, 10.8.0.5
  • $ 6 - наприклад, 10.8.0.6
  • $ 7 - init або restart (параметр мною повністю ігнорований, так що маніпуляції з маршрутами виконуються завжди, навіть якщо мережевий інтерфейс не був відключений, а всього лише мав місце «штатний» перезапуск демона в зв'язку з відсутністю зв'язку).

Само-собою зрозуміло, можна (і потрібно) використовувати значення параметрів $ 3 - $ 6. Наприклад, якщо ви хочете якусь частину трафіку «загорнути» через VPN-тунель, то можна в скрипті використовувати щось на зразок:

ip route add from 192.168.0.0/24 via $

Запуск і зупинка демона

Власне, до чого всі ці танці з викликом зовнішніх скриптів і відмовою від старого-доброго / etc / network / interfaces. А ось до чого.

Відкрийте файл / etc / default / openvpn і в змінної AUTOSTART вкажіть ім'я файлу (або декількох, через пробіл) конфігурації з каталогу / etc / openvpn. відкусивши розширення «.conf». Для нашого прикладу це буде виглядати так:

Або ж, якщо потрібно, щоб OpenVPN виконав підключення на основі всіх знайдених файлів конфігурації:

Тепер «досить однієї Таблетка» у вигляді:

sudo service openvpn start

і скрипт з /etc/init.d/openvpn дбайливо запустить OpenVPN для всіх знайдених конфігурацій.

Зупинка демона також не дуже складна:

sudo service openvpn stop

І на останок. Якщо вам знадобилося, щоб жоден з існуючих в / etc / openvpn конфігураційних файлів не оброблявся, досить визначити в / etc / default / openvpn:







Схожі статті