суббота, 31 августа 2013 г.

OpenVPN

OpenVPN
"OpenVPN — это свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT-firewall, без необходимости изменения их настроек." В этой статье попытаемся разобраться с 2-мя типами названых выше каналов между компьютерами на Linux (Ubuntu) и Windows. Начнем с более простого варианта туннеля "точка-точка".

Настройка OpenVPN-туннеля типа "точка-точка"

1.   Для начала, необходимо загрузить и установить, последний дистрибутив OpenVPN, для пользователей Windows это удобнее сделать, перейдя на официальный сайт разработчика openvpn, для Ubuntu достаточно в терминале выполнить команду
   apt-get install openvpn
2. Теперь нужно выбрать тип шифрования, OpenVPN поддерживает 2 типа шифрования: статический ключ и Transport Layer Security (TLS). В этом случае будем использовать первый тип шифрования, с помощью статического ключа, т.к. его очень просто и быстро реализовать. Для генерации ключа шифрования в Windows выберите пункт меню (Пуск->Все программы->OpenVPN-Utilities ->Generate a static OpenVPN key), для Ubuntu выполните команду   
   openvpn --genkey --secret /etc/openvpn/static.key
статический ключ нужно сгенерировать на одной из машин, между которыми устанавливается OpenVPN-туннель, и безопасно передать на другую, также необходимо разместить его в следующую директорию: для Windows (C:\Program Files\OpenVPN\сonfig\), для Ubuntu ( /etc/openvpn/)
3. Переходим к созданию и описанию конфигурационных файлов. Конфигурационный файл создается в той же директории, что и статический ключ п. 2, для Windows он имеет расширение "ovpn" (например server.ovpn), для Ubuntu "conf" (server.conf). Содержимое конфигурационных файлов достаточное для установки OpenVPN-туннеля следующее:
server.conf
dev tun
port 1194
ifconfig 10.8.0.1 10.8.0.2
secret static.key
dev tun - указывается тип интерфейса и режим работы (tun = L3-туннель, tap = L2-туннель), port 1194 - указывается номер порта для туннеля, ifconfig 10.8.0.1 10.8.0.2 - серверу назначается первый адрес из подсети/30, следующий клиенту, secret static.key - указывается имя статического ключа, сгенерированного ранее п. 2.
client.conf
remote server.ru
dev tun
port 1194
ifconfig 10.8.0.2 10.8.0.1 
secret static.key
содержимое конфигурационного файла клиента аналогично серверу, единственное, добавляется строка адреса сервера remote server.ru, здесь вместо server.ru укажите адрес своего сервера.
Теперь можно установить соединение, для Windows это делается легко через GUI интерфейс, а для Ubuntu командой:
   service openvpn start
4. Для открытия доступа к подсетям расположенным за сервером и за клиентом, относительно OpenVPN-туннеля, необходимо в конфигурационных файлах прописать маршруты к этим сетям через опцию route. Например если за сервером есть подсеть 192.168.0.0 маска подсети 255.255.255.0, а за клиентом 192.168.10.0 c маской 255.255.255.0, то конфигурационные файлы примут следующий вид:
server.conf
dev tun 
port 1194 
ifconfig 10.8.0.1 10.8.0.2
route 192.168.10.0 255.255.255.0 10.8.0.2
secret static.key
client.conf
remote server.ru 
dev tun 
port 1194 
ifconfig 10.8.0.2 10.8.0.1 
route 192.168.0.0 255.255.255.0 10.8.0.1 
secret static.key
теперь подсети 192.168.0.0/24 и 192.168.10.0/24 видят друг друга и могут обмениваться между собой пакетами, которые пойдут через OpenVPN-туннель. На этом настройка туннеля "точка-точка" закончена, мы связали 2 компьютера в одну локальную сеть создав между ними VPN - туннель, но у этой реализации есть один минус с ее помощью можно связать только 2 компьютера, для связи же с другими компьютерами нужно делать новый туннель "точка-точка" для каждой пары компьютеров, это очень неудобно и также сильно загрузит процессор компьютера. Благо для этого случая в OpenVPN предусмотрена технология сервер-клиенты, которую мы далее и рассмотрим.

Настройка OpenVPN-туннеля типа "сервер-клиенты"

В отличии от типа соединения "точка-точка" в режиме "сервер - клиенты" один участник (компьютер) виртуальной частной сети (VPN) выбирается в качестве сервера, а все остальные участники (клиенты) подключаются к нему, этот подход является более удобным если мы хотим соединить в одну виртуальную частную сеть (VPN) большое число компьютеров.
1. Первое что необходимо сделать это сгенерировать ключи и сертификаты, которые необходимы для аутентификации участников виртуальной частной сети (VPN). В режиме сервер-клиенты, для сервера и для каждого клиента необходимо генерировать отдельный ключ и сертификат. Все ключи и сертификаты создаются на сервере OpenVPN, сервер у нас будет расположен на ОС Linux (Ubuntu). Приступим к созданию ключей и сертификатов, для этого перейдем в директорию:
   cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
повысим себе права до root-а, для того чтобы каждый раз не вводить команду sudo
   sudo -s
выполним команду для запуска скрипта генерации ключей и сертификатов
  . ./vars
затем очистим все командой
   ./clean-all
создадим корневой сертификат, который будут использовать все участники виртуальной частной сети (VPN)
   ./build-ca
система попросит заполнить поля о Вашем территориальном нахождении, организации и т.д, можно их заполнить, но в тестовом примере мы заполнять ничего не будем, просто при каждом запросе ввода данных, нажимаем клавишу Enter. теперь создадим сертификат и приватный ключ для сервера
   ./buid-key-server server
для тестового примера никакие данные и пароль так же вводить не будем, в итоге создадутся два файла server.crt и srever.key далее, создадим сертификат и приватный ключ для клиента
   ./build-key client1
client1 это имя приватного ключа и сертификата клиента, оно должно быть уникальным для каждого клиента, здесь так же заполнять поля данными не будем, в итоге создадутся два файла client1.crt и client1.key которые позже нужно будет переместить на компьютер клиента OpenVPN. Аналогичным образом необходимо сгенерировать ключи и сертификаты для каждого клиента (client2, client3 и т.д.).
Ещё для сервера необходимо сгенерировать параметры Diffie Hellman'а
   ./build-dh
2. После создания, ключи и сертификаты необходимые для работы сервера OpenVPN, из директории /usr/share/doc/openvpn/examples/easy- rsa/2.0/keys/ скопируем в директорию /etc/openvpn/. Перейдем в каталог с нашими ключами:
   cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/
и скопируем файлы сa.crt server.crt server.key dh1024.pem в директорию /etc/openvpn/
   cp ca.crt /etc/openvpn/ca.crt 
   cp server.crt /etc/openvpn/server.crt 
   cp server.key /etc/openvpn/server.key 
   cp dh1024.pem /etc/openvpn/dh1024.pem
Файлы ca.crt client1.crt client1.key необходимо переместить на компьютер клиента OpenVPN, в директорию /etc/openvpn/ (либо C:\Program Files\OpenVPN\config\ если клиент на Windows) это можно сделать, например подняв удаленные каталоги SSHFS, аналогичные действия нужно проделать для остальных клиентов, если их несколько.
3. Теперь когда ключи и сертификаты готовы и лежат в нужных нам директориях, можно приступить к описанию конфигурационных файлов. На сервере OpenVPN создадим файл server.conf и внесём в него следующие изменения:
server.conf 
dev tun ;режим работы L3-туннель 
port 1194 ;порт для OpenVPN 
ca /etc/openvpn/ca.crt ;корневой сертификат 
cert /etc/openvpn/server.crt ;сертификат сервера 
key /etc/openvpn/server.key ;приватный ключ сервера 
dh /etc/openvpn/1024dh.pem ;параметр Diffie Hellman'а 
topology sudnet ;каждому клиенту выдается по 1 адресу 
server 10.8.0.0 255.255.255.0 ;10.8.0.1 выдается серверу следующие 
;клиентам
ifconfig-pool-persist ipp.txt ;запоминать в пул ip - адреса 
push "route 192.168.1.0 255.255.255.0" ;передача клиенту маршрута 
;до сети за сервером 
route-gateway 10.8.0.1 ;шлюз в openvpn сеть 
client-config-dir ccd ;директория файла с именем клиента, и 
;команды для клиента в нём
route 192.168.2.0 255.255.255.0 ;маршрут до сети за клиентом 
persist-key ;не перечитыват ключи после перезапуска OpenVPN 
persist-tun ;не перезапускать туннель после перезапуска OpenVPN 
comp-lzo ;включить сжатие
также на сервере создадим директорию /etc/openvpn/ccd/ и в ней создадим файл с именем сертификата клиента, в нашем случае client1, внесем изменения:
client1 
ifconfig-push 10.8.0.2 255.255.255.0 ;постоянный адрес для клиента при 
;установлении OpenVPN соединения 
push "route-gateway 10.8.0.1" ;передать клиенту адрес шлюза в openvpn 
;сеть 
iroute 192.168.2.0 255.255.255.0 ;частная сеть клиента имеет доступ к 
;VPN, работает только в режиме tun
Аналогичные файлы можно создать и для других клиентов OpenVPN, со своими параметрами. Настало время перейти к настройке конфигурационного файла клиента OpenVPN, в директории /etc/openvpn/ (либо C:\Program Files\OpenVPN\config\ для Windows) создадим файл client.conf (client.ovpn для Windows) и внесём в него следующие изменения:
client.conf
remote server.ru ;адрес сервера OpenVPN 
client ;укзываем что это клиент 
port 1194 
proto udp 
dev tun 
ca /etc/openvpn/ca.crt ;корневой сертификат 
cert /etc/openvpn/client1.crt ;сертификат клиента 
key /etc/openvpn/client1.key ;приватный ключ клиента 
copm-lzo 
persist-key 
persisit-tun 
keepalive 10 60 ;пинговать каждые 10 сек. и если сервер не отвечает 60 ;сек. считать соединение разорванным, переподключение
Аналогичным образом производится настройка конфигурационных файлов других клиентов, только не забываем, что для каждого клиента, сертификат и приватный ключ необходимо генерировать свой, и создавать его нужно на сервере OpenVPN.

Комментариев нет:

Отправить комментарий