Налаштування OpenVPN
- Деталі
- Категорія: Servers (uk)
- Опубліковано: Четвер, 03 січня 2019, 15:41
- Автор: Super User
- Перегляди: 3816
OpenVPN
OpenVPN - вільна реалізація технології Віртуальної Приватної Мережі (VPN) з відкритим вихідним кодом для створення зашифрованих каналів типу точка-точка або сервер-клієнти. Вона дозволяє встановлювати з'єднання між комп'ютерами, що знаходяться за NAT-firewall, без необхідності зміни їх налаштувань. OpenVPN було створено Джеймсом Йонаном (James Yonan) і розповсюджується під ліцензією GNU GPL.
Для забезпечення безпеки керуючого каналу і потоку даних, OpenVPN використовує бібліотеку OpenSSL. Завдяки цьому задіюється весь набір шифрів, доступних в даній бібліотеці. OpenVPN використовується на операційних системах Solaris, OpenBSD, FreeBSD, NetBSD, GNU/Linux, Apple Mac OS X, QNX та Microsoft Windows. OpenVPN проводить всі мережеві операції через TCP, або UDP порт. Також можлива робота через більшу частину проксі серверів, через NAT і мережеві фільтри. Сервер може бути налаштований на призначення мережевих налаштувань клієнту. Наприклад: IP адреса, налаштування маршрутизації і параметри з'єднання. Також можливе використання бібліотеки компресії LZO, для стиснення потоку даних.
Використання в OpenVPN стандартних протоколів TCP і UDP дозволяє йому стати альтернативою IPsec в ситуаціях, коли Інтернет-провайдер блокує деякі VPN протоколи.
Налаштування OpenVPN
Створюємо конфігураційний файл для сервера /etc/openvpn/server.conf:
port 443
proto tcp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
server 10.10.10.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.0.0.0 255.255.255.0"
;duplicate-cn
keepalive 10 120
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 4
mute 20
client-to-client
Розберемо параметри файла конфігурації:
Зазначаємо, на якому порту приймати з'єднання:
port 443
Зазначаємо протокол (tcp або udp):
proto tcp
Зазначаємо, що саме будемо инкапсулировать в тунелі (ethernet фрейми — tap або ip пакети — tun)
dev tun
Прописуємо шляхи до ключів і сертифікатів:
ca /etc/openvpn/ca.crt
cert /etc/openvpn/test.crt
key /etc/openvpn/test.key
dh /etc/openvpn/dh2048.pem
Виділяємо внутрішній діапазон адрес для VPN:
server 10.10.10.0 255.255.255.0
В який файл будемо записувати видані для VPN адреси?:
ifconfig-pool-persist ipp.txt
Прописуємо на клієнті маршрут до домашньої мережі (тієї що за сервером):
push "route 192.168.7.0 255.255.255.0"
Пінгувати кожні 10 секунд, якщо хост не відповідає протягом 120 секунд, вважати його недоступним:
keepalive 10 120
Дозволити стискання пакетів:
comp-lzo
Прописуємо користувача і групу, від імені яких буде запускатися демон:
user nobody
group nogroup
вказує не перечитувати файли ключів при перезапуску тунелю.
persist-key
дана опція залишає без зміни пристрої tun/tap при перезапуску OpenVPN.
persist-tun
Рівень докладності логів (від 0 до 9):
verb 4
Чи не писати в логи повідомлення, що повторюються:
mute 20
Дозволити пересилання пакетів між клієнтами:
client-to-client
Создание ключей и сертификатов
Тепер необхідно створити ключі та сертифікати для шифрування і авторизації. Відповідні скрипти для цього знаходяться в папці /usr/share/doc/openvpn/examples/easyrsa/2.0 для Ubuntu server 12.04 або /usr/share/easy-rsa для Ubuntu server 14.04
Переходимо в каталог зі скриптами і створюємо CA (авторитетний сертифікат):
#. ./vars
#./clean-all
#./build-ca
Тепер створимо сертифікат і приватний ключ для сервера:
#./build-key-server server
Створюємо ключ для клієнта (якщо клієнтів декілька, процедуру доведеться повторити):
#./build-key client1
Зауваження: для кожного клієнта повинно бути вказано своє унікальне ім'я (в даному випадку client1).
Генеруємо параметри Діффі-Хеллмана:
#./build-dh
Кладемо наступні файли в теку /etc/openvpn/
-
ca.crt
-
server.crt
-
dh2048.pem
-
server.key
Настройка клиента OpenVPN
Конфігураційний файл клієнтської машини /etc/openvpn/client.conf буде виглядати наступним чином:
remote XX.XX.XX.XX 443
client
dev tun
proto tcp
resolv-retry infinite # this is necessary for DynDNS
nobind
user nobody
group nogroup
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key
comp-lzo
verb 4
mute 20
Тепер необхідно скопіювати з сервера в теку /etc/openvpn/ згенеровані клієнтські ключі і авторитетний сертифікат сервера:
ca.crt
client1.crt
client1.key
Після цього можна запускати клієнт OpenVPN і перевіряти зв'язок з сервером.
Настройка OpenVPN в режимі мосту
Іноді наведеної раніше конфігурації недостатньо. Найпростіший приклад - клієнти повинні отримувати адреси з внутрішньої мережі за OpenVPN.
У такому випадку налаштування сервера OpenVPN незначно змінюється.
Для початку необхідно встановити пакет bridge-utils
# apt-get install bridge-utils
Далі, в теці /etc/openvpn створюємо скрипти з наступним вмістом:
bridge-start.sh
#!/bin/bash
br="br0"
tap="tap0"
eth="eth0"
eth_ip=`ifconfig $eth| grep Mask| awk '{print $2}'| awk -F : '{print $2}'`
eth_netmask=`ifconfig $eth| grep Mask| awk '{print $4}'| awk -F : '{print $2}'`
eth_broadcast=`ifconfig $eth| grep Mask| awk '{print $3}'| awk -F : '{print $2}'`
gw=`route |grep ^default|awk '{print $2}'`
openvpn --mktun --dev $tap
brctl addbr $br
brctl addif $br $eth
brctl addif $br $tap
ifconfig $tap 0.0.0.0 promisc up
ifconfig $eth 0.0.0.0 promisc up
ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast
route add default gw $gw
bridge-stop.sh
#!/bin/sh
br="br0"
tap="tap0"
eth="eth0"
gw=`route |grep ^default|awk '{print $2}'`
eth_ip=`ifconfig $br| grep Mask| awk '{print $2}'| awk -F : '{print $2}'`
eth_netmask=`ifconfig $br| grep Mask| awk '{print $4}'| awk -F : '{print $2}'`
eth_broadcast=`ifconfig $br| grep Mask| awk '{print $3}'| awk -F : '{print $2}'`
ifconfig $br down
brctl delbr $br
openvpn --rmtun --dev $tap
ifconfig $eth $eth_ip netmask $eth_netmask broadcast $eth_broadcast
route add default gw $gw
Далі створюємо файл конфігурації для сервера /etc/openvpn/server.conf
port 443
proto tcp
dev tun0
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server-bridge 192.168.20.177 255.255.255.0 192.168.20.10 192.168.20.20
keepalive 10 120
cipher BF-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
verb 4
mute 20
client-to-client
up /etc/openvpn/bridge-start.sh
down /etc/openvpn/bridge-stop.sh
У порівнянні з минулим файлом конфігурації зміни були мінімальні:
dev tun0 – використовуємо мережевий інтерфейс типу tun
server-bridge 192.168.20.177 255.255.255.0 192.168.20.10 192.168.20.20 – де
192.168.20.177 – IP-адреса сервера OpenVPN
255.255.255.0 – маска мережі
192.168.20.10 початкова адреса діапазону для клієнтів OpenVPN
192.168.20.20 – кінцева адреса діапазону для клієнтів OpenVPN
up /etc/openvpn/bridge-start.sh – скрипт створення бриджу при старті сервісу OpenVPN
down /etc/openvpn/bridge-stop.sh – скрипт відключення бриджу при зупинці сервісу OpenVPN
Файл конфігурації клієнта змінюється тільки в описі інтерфейсу, що використовується.
Замість dev tap потрібно прописати dev tun0
OpenVPN у режимі bridge та VMWare ESXi
Якщо сервер OpenVPN розгорнений на ESXi і там налаштований бридж, то, швидше за все, за замовчуванням нічого не запрацює. Необхідно на віртуальному свічі, до якого підключений інтерфейс br0, включити promiscuous mode