OpenVPN - це програмний комплекс, що дозволяє захистити від «прослушки» інтернет-трафік користувача, забезпечуючи зашифровану передачу даних від пристрою клієнта до сервера з встановленим OpenVPN. Дуже добре підходить при використання публічних wifi точок доступу, де інформація може бути перехоплена третіми особами. Або в разі, коли ваш ip заблокований на певному сайті і потрібно безпечно обійти це обмеження.
Крім установки і настройки ОпенВПН на сервері, необхідно вміти налаштувати клієнт для доступу з комп'ютера, де в якості операційної системи буде використовуватися Windows.
Використовуючи стандартний менеджер пакетів, встановимо openvpn.
# Aptitude install openvpn
Зміст статті:
- Создание сертификатов 1 Створення сертифікатів
- Настройка сервера 2 Налаштування сервера
- Перенаправление трафика через OpenVPN 3 Перенаправлення трафіку через OpenVPN
- OpenVPN клиент на Windows 4 OpenVPN клієнт на Windows
- OpenVPN совместно с NetworkManager 5 OpenVPN спільно з NetworkManager
створення сертифікатів
ОпенВПН в обов'язковому порядку вимагає генерації сертифікатів для сервера і клієнтів. Це і логічно, адже з'єднання від клієнта до сервера повинно бути зашифровано.
Перейдіть в папку openvpn:
# Cd / etc / openvpn
Генерувати ключі ми будемо за допомогою easy-rsa.
Створюємо папку з файлами і посиланнями на скрипти генерації сертифікатів:
# Make-cadir rsa # Cd rsa
Відкрийте конфігураційний файл vars і змініть параметри:
export KEY_COUNTRY = "US" export KEY_PROVINCE = "CA" export KEY_CITY = "SanFrancisco" export KEY_ORG = "Fort-Funston" export KEY_EMAIL = "me@myhost.mydomain"
KEY_COUNTRY - вкажіть код країни (RU, UA і т.д.);
KEY_PROVINCE - даний пункт не актуальний, якщо ви не проживаєте в США. :) Можна замінити на XX;
KEY_CITY - ваше місто, де ви проживаєте;
KEY_EMAIL - адреса вашої електропошти.
А також розкоментуйте рядок export KEY_CN, як значення для якої вкажіть ім'я сервера:
export KEY_CN = "example.com"
Всі змінні заповнюються латиницею.
Збережіть файл і запустіть його виконання:
#. vars
Потім запустіть видалення старих сертифікатів:
# ./clean-all
Створіть кореневий сертифікат:
# ./build-ca
Якщо при генерації кореневого сертифіката ви отримаєте помилку error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:618:line 198
, додайте в файл vars рядок:
export KEY_ALTNAMES = "something"
А після повторно здійснити попередні команди:. vars, ./clean-all, ./build-ca.
Наступний крок - створення ключа і сертифіката сервера.
# ./Build-key-server server
Після чого створіть сертифікат і ключ для клієнта:
# ./Build-key client
Зверніть увагу: для кожного клієнта слід генерувати власні сертифікат і ключ. Потрібно лише вказувати різні імена (замість client) і змінювати шляху до них в конфігураційних файлах. При цьому, ви можете захистити ключі клієнтів паролем, для цього використовуйте команду build-key-pass замість build-key.
Далі потрібно створити ключ Діффі-Хеллмана для можливості використання Forward Secrecy:
# ./build-dh
І ключ для tls-аутентифікації:
# Openvpn --genkey --secret /etc/openvpn/ta.key
Тепер необхідно скопіювати серверні сертифікати і ключі в папку налаштувань OpenVPN:
# Cp keys / ca.crt keys / server.crt keys / server.key keys / dh2048.pem / etc / openvpn /
А також виставити на них права, що дозволяють читання і зміна тільки для їх власника.
# Chmod 0600 /etc/openvpn/ca.crt /etc/openvpn/server.crt /etc/openvpn/server.key /etc/openvpn/dh2048.pem /etc/openvpn/ta.key
Обов'язково скопіюйте собі на комп'ютер, наприклад, на робочий стіл, з папки keys ключі, необхідні для підключення клієнта: client.crt, client.key, ca.crt, ta.key.
На цьому процес підготовки сертифікатів закінчений.
Налаштування сервера
У каталозі / usr / share / doc / openvpn / розташовується файл-приклад для настройки сервера Openvpn. Скопіюйте його в каталог / etc / openvpn / і розархівуйте:
cd / etc / openvpn; cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz / etc / openvpn /; gunzip server.conf.gz
Тепер розглянемо необхідні для роботи openvpn параметри.
Порт, на якому Openvpn буде приймати з'єднання. За замовчуванням, 1194. Рекомендую змінити його з метою приховування. Можна навіть замаскувати опенвпн під Web-сервер, вказавши порт 80.
port 20100
Прописуємо шляху до файлів сертифікатів і ключа сервера.
ca ca.crt cert server.crt key server.key
Шлях до ключу Діффі-Хеллмана.
dh dh2048.pem
Можуть бути вказані як шляху щодо каталогу / etc / openvpn (якщо файли розміщені в ньому), так і абсолютні.
Знаходимо і раскомментіруем рядок:
push "redirect-gateway def1 bypass-dhcp"
Вона потрібна для можливості виходу в інтернет через сервер ОпенВПН. Якщо її НЕ розкоментувати, то будуть доступні лише комп'ютери всередині мережі.
Також потрібно вказати dns-сервери для клієнтів, що підключаються.
push "dhcp-option DNS 213.183.57.55" push "dhcp-option DNS 87.98.175.85"
Залежно від місця розташування сервера, можна підібрати інші dns-сервери, наприклад, на проекті OpenNIC .
Далі знаходимо і раскомментіруем параметр tls-auth.
tls-auth ta.key 0
Увага! В налаштуваннях клієнта остання цифра цього параметра повинна бути замінена на 1 - tls-auth ta.key 1.
Трохи нижче в конфігураційному файлі слід перерахування доступних шифрів. Розкоментуйте шифр AES-128-CBC.
cipher AES-128-CBC # AES
При необхідності, його можна замінити на AES-256-CBC. У файлі конфігурації клієнта шифр повинен бути ідентичний серверного шифру.
Також додайте параметр auth. За замовчуванням, для аутентифікації використовуються ключі sha1 довжиною 160 біт, але алгоритм sha1 визнаний вразливим. При вказівці нижченаведеного параметра будуть використовуватися ключі SHA512 довжиною 512 біт.
auth SHA512
А також параметр tls-version-min, який визначає використовувану версію tls. В даному випадку, останню версію 1.2. Увага! Network Manager не підтримує (на момент написання статті) цей параметр. Тому, якщо ви плануєте підключатися до ВПН сервера через Network Manager, то цей параметр НЕ прописуємо в настройках сервера.
tls-version-min 1.2
OpenVPN не слід запускати від імені root. Тому розкоментуйте рядки:
user nobody group nogroup
Не зайвим буде включення логів для OpenVPN. Особливо, на перших порах використання після настройки для пошуку помилок і т.д.
log /var/log/openvpn.log
Всі інші параметри конфігураційного файлу /etc/openvpn/server.conf залиште зі значеннями за замовчуванням. На цьому настройка сервера OpenVPN закінчена.
Активуйте openvpn командою:
# Systemctl enable openvpn
І перезапустите:
# Service openvpn restart
Також не зайвим буде перевірити лог на наявність помилок.
Перенаправлення трафіку через OpenVPN
Щоб мати можливість виходу в інтернет через сервер опенвпн, необхідно дещо зробити для цього.
1. Налаштувати sysctl
В консолі запустіть команду:
# Sysctl net.ipv4.ip_forward
Якщо висновок команди буде рівним net.ipv4.ip_forward = 1, то змінювати що-небудь не потрібно. Якщо ж значення змінної буде дорівнює 0, то в файл /etc/sysctl.conf потрібно додати рядок:
net.ipv4.ip_forward = 1
І перезавантажити правила командою:
# Sysctl -p
2. Налаштувати iptables
По черзі виконайте в консолі наступні команди:
# Iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED, RELATED -j ACCEPT # Iptables -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT # Iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Таким чином, ми дозволимо пропускати трафік через сервер OpenVPN для підмережі 10.8.0.0 в рамках вже встановлених з'єднань.
Якщо клієнту openvpn потрібно присвоїти певний зовнішній ip адресу сервера, то замість останньої команди зі списку попередніх для iptables, необхідно виконати цю:
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 127.0.0.1
Де після параметра -to-source слід вказати зовнішній ip сервера.
OpenVPN клієнт на Windows
Приступаємо до налаштування Openvpn клієнта на Windows. Тут все просто: завантажуємо клієнт з офіційного сайту, встановлюємо, створюємо конфігураційний файл і запускаємо.
Варто відзначити, що запускати опенвпн на Windows слід з правами адміністратора, якщо активний контроль облікових записів.
Якщо ви не змінювали шлях установки, то приклади конфігураційних файлів на вашому ПК розташовуються в каталозі C: \ Program Files \ OpenVPN \ sample-config. Скопіюйте звідси файл client.ovpn і помістіть його в каталог C: \ Program Files \ OpenVPN \ config.
Пам'ятайте про створених для клієнта сертифікатах? Їх теж слід завантажити з сервера і скопіювати в цей каталог.
Відкрийте конфігураційний файл client.ovpn і знайдіть параметр remote my-server-1 1194. Замість my-server вкажіть ip або доменне ім'я вашого сервера. Потім порт, який ми змінили раніше. В результаті рядок може виглядати так:
remote 192.168.0.1 20100
Далі потрібно вказати шляхи до сертифікатів, які ви згенерували на сервері. Для кожного клієнта створюється ключ з унікальним ім'ям, який слід вказувати нижче, замість client.
ca ca.crt cert client.crt key client.key
Також слід розкоментувати параметр, який вказує шлях до tls-ключу.
tls-auth ta.key 1
Раніше вже говорилося про те, що остання цифра на сервері повинна бути 0, на клієнті - 1.
І останні параметра - це шифри, які ви встановили на сервері.
cipher AES-128-CBC auth SHA512 tls-version-min 1.2
Це все, що потрібно для налаштування клієнта. Спробуйте запустити клієнт OpenVPN і підключитися до вашого сервера. Необхідна інформація про підключення буде відображена в віконці openvpn gui.
OpenVPN спільно з NetworkManager
Встановлюємо графічний інтерфейс для Network Manager.
# Aptitude install network-manager-openvpn-gnome
І перезапускаємо.
# Service network-manager restart
Копіюємо згенеровані для клієнта сертифікати в довільну папку на ком'ютера. Наприклад, в /home/user/.openvpn/.
Натискаємо правою клавішею миші на значку network manager, вибираємо пункт «змінити з'єднання», додаємо нове підключення типу «OpenVPN».
вказуємо:
- Назва з'єднання
- Шлюз (домен або ip сервера)
- Тип: сертифікати
Сертифікат користувача - сертифікат, який ми згенерували на початку для клієнта (client.crt).
Сертифікат ЦС - файл ca.crt.
Особистий ключ - ключ клієнта (client.key).
Натискаємо на кнопку «Додатково». У вікні, у вкладці «Загальні» буде потрібно змінити кілька пунктів.
- Використовувати інший порт шлюзу (якщо ви вказали нестандартний при налаштуванні сервера)
- Використовувати стиснення lzo
Перемикається на вкладку «Безпека». Вибираємо шифр, як в параметрах сервера. Як значення параметра «Аутентифікація hmac» слід вказати алгоритм, як в значенні auth сервера. У статті ми вибрали SHA512.
Відкриваємо вкладку «Аутентифікація TLS» і відзначаємо галочкою пункти:
- Verify peer ...
- Використовувати додаткову аутентифікацію TLS
Для останнього параметра вказуємо шлях до файлу ta.key, в якості напрямку ключа зі списку вибираємо 1. Аналогічно конфігураційного файлу для Windows.
Зберігаємо з'єднання і намагаємося підключитися. :)
Про всяк випадок, дивимося, що пише NM при підключенні в системний лог:
# Tail -f / var / log / syslog
Дякую за статтю. Дуже допомогла.
Відмінна стаття, автор шанована людина!
Автор як я не намагався зробити дебаггінг щоб зрозуміти чому у мене клієнти не можуть підключитися, openvpn НЕ птішет логи! підкажи що зробити!
Значить, потрібно перевірити логи клієнтів. OpenVPN GUI такий лог обов'язково веде. Правий клік миші -> показати журнал.
Може бути, пропущений якийсь пункт з інструкції ...
Спасибі, але як виявилося потрібно було зробити так #openvpn /opt/vp/vp.conf і додаток зачепило конфиг файл - логи пішли - я все переглянув і зробив ВПН робочим.
Ещеби мануальчік автор у тебе запитати. Як зробити тунель між сервером на дебіане і мікротіком. З'єднати їх локальну мережу. 2 квартири.
Спасибі за пост. Ще цікавить настройка мобільних клієнтів, типу як тут - http://sysadm.pp.ua/linux/shifrovanie/openvpn-client-server.html . Порадьте, будь ласка, добре і зручно мобільний OpenVPN клієнт?
У себе на андроїд-смартфон використовую офіційний клієнт від розробника Openvpn - «Openvpn connect» https://play.google.com/store/apps/details?id=net.openvpn.openvpn
Він досить простий в налаштуванні. Згенеровані файли для клієнта потрібно закинути в будь-яку папку на флешці телефону. Потім запустити Openvpn Connect, в меню вибрати пункт "Import", далі - «Import Profile from SD card». Відкриється файловий менеджер, де потрібно вибрати файл * .ovpn, клікнути на кнопку «Select». На підтвердження успішного імпорту на екрані відобразиться повідомлення «Profile imported».
Для підключення натискаємо кнопку «Connect». От і все. :)
Не знаю про інших клієнтів, але цей прекрасно працює.
PS Якщо планується підключатися одночасно і з комп'ютера, і з телефону, то для останнього слід згенерувати власні ключ і сертифікат.
Стаття допомогла вникнути в принципи роботи openvpn в цілому. Дякуємо.
ОТСТОЙ І НЕ ПРАЦЮЄ ЗА ЦІЄЮ ІНСТРУКЦІЇ ніфіга!
Дякуємо. Все працює!
upd.
п.2 зважився установкою прав на ключ client.key (мабуть прогледів спочатку). + Знадобилося виставити тип підключення TCP явно і вказати тип адаптера - TAP / TUN
Дякуємо! Відмінна стаття!
Налаштував все за інструкцією, однак є така проблема:
Клієнт з'єднується з сервером, але інету немає. З клієнта пінгуєтся як сервер VPN 10.8.0.1, так і виділений ip сервера. З самого сервера зовнішні сайти пінгуються без проблем. Виходить що собака зарита десь в IPtables і ip.frwarding. Є якісь думки? може що швидше порадите, ніж розбиратися з цим лісом?
Треба прописати інші правила маршрутизації
iptables -t nat -A POSTROUTING -o venet0 -j SNAT -to IP_АДРЕС_ВАШЕГО_СЕРВЕРА
iptables -A FORWARD -i venet0 -o tun0 -m state -state RELATED, ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun0 -o venet0 -j ACCEPT