Настройка OpenVPN
- Информация о материале
- Категория: Servers (ru)
- Опубликовано: 05.08.2014, 15:55
- Автор: Super User
- Просмотров: 4012
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/dh1024.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/dh1024.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
-
dh1024.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