Налаштування OpenVPN

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

 

alt