OpenVPN сервер на Ubuntu 12.04 Debian 7,8 и подключение клиентов

Добрый день.

Понадобилось настроить VPN сервер, в заметке буду использовать OpenVPN сервер с системой Ubuntu 12.04.

Теоретическая часть:

VPN ( Virtual Private Network — виртуальная частная сеть) — обобщенное название технологий, позволяющих обеспечить одно или несколько сетевых соединений (логическую сеть) поверх другой сети. Несмотря на то, что коммуникации осуществляются по сетям с меньшим или неизвестным уровнем доверия (например, по публичным сетям), уровень доверия к построенной логической сети не зависит от уровня доверия к базовым сетям благодаря использованию средств криптографии (шифрования, аутентификации, инфраструктуры открытых ключей)

В зависимости от применяемых протоколов и назначений, VPN может обеспечивать соединения трех видов: узел-узел, узел-сеть и сеть-сеть.

Я буду реализовывать соединение типа: узел-сеть. Где будет OpenVPN сервер (Ubuntu 12.04) и клиенты: 2 ПК с Windows XP.

OpenVPN — свободная реализация технологии VPN с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами.

Принцип работы:
Сначала сервер и клиент обмениваются своими публичными ключами (они не секретны и можно их не прятать и не беспокоиться о их доступности). Потом обеими сторонами проводится проверка полученных ключей на предмет легитимности, то есть срок действия, проверка подписи СА, проверка в списке отозванных ключей и так далее. Если все отлично, то начинается обмен данными:

  • Отправляемый пакет шифруется с помощью открытого ключа получателя;
  • Потом пакет подписывается закрытым ключом отправителя;
  • Пакет отправляется на другую сторону;
  • У получаемого пакета проверяется подпись с помощью открытого ключа отправителя;
  • Если подпись верна. то пакет расшифровывается с помощью закрытого ключа получателя.

В нашем случае Ubuntu будет выступать в роли центра сертификации (СА) и openvpn сервера, который обеспечивает возможность подключения удаленных клиентов.

Центр сертификации — отдельная папка на винчестере, в которой находятся:

  • Пара файлов ca.key и ca.crt — ключ и сертификат центра сертификации;
  • Простейшая база данных из двух файлов:
    • Файл serial — счетчик;
    • Файл index.txt — список выданных сертификатов.
  • Файлы уже выданных сертификатов (*.crt) для возможности их отзыва;
  • Файл crl.pem, в котором накапливается информация об отозванных ключах;
  • Несколько скриптов для генерации новых ключей и сертификатов.
Походу установки и настройки, я буду делать лирические отступления для пояснения. Приступим:

1. Установка openvpn сервера

Пожалуй сама установка самое простое:

2. Установка центра сертификации (СА)

Что бы установить свой собственный центр сертификации и сгенерировтаь сертификаты и ключи для OpenVPN сервера и нескольких клиентов необходимо сначала скопировать easy-rsa в каталог /etc/openvpn. Это будет гарантировать, что любые изменения в сценариях не будут потеряны при обновлении пакета.
sudo mkdir /etc/openvpn/easy-rsa
sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
Далее необходимо отредактировать соответствующие строки в конце файла /etc/openvpn/easy-rsa/vars, содержащего различные переменные, которые будут загружаться в командную оболочку перед каждым сеансом генерации сертификатов и ключей.
sudo nano /etc/openvpn/easy-rsa/vars
Я только поменяю такие строки:
export KEY_COUNTRY=»UA» # страна
export KEY_PROVINCE=»Crimea» # регион
export KEY_CITY=»Sevastopol» # город
export KEY_ORG=»home test vpn» # организация
export KEY_EMAIL=»qqw1mb0@gmail.com» # почтовый адрес
Это редактирование можно и пропустить, так как при генерации ключей и сертификатов все равно опять будут запрашиваться все эти параметры, просто если этот файл отредактировать, то данные, которые мы вписали будут использоваться по умолчанию. Да и вообще эти данные можно не изменять, если вы не серьезная контора. Так как никакой функциональной нагрузки они не несут.
Создадим главный сертификат центра сертификации (СА) и ключ:
cd /etc/openvpn/easy-rsa
source vars
Скорее всего мы увидим такое сообщение об отсутсвтии файла openssl.cnf, если же его нет то можно пропустить этот момент. Благо разработчики OpenVPN о нас позаботились и в папке /etc/openvpn/easy-rsa уже есть несколько шаблонов: openssl-0.9.6.cnf , openssl-0.9.8.cnf , openssl-1.0.0.cnf , openssl-1.0.0.cnf-old-copy.
Узнаем, какая версия openssl стоит у нас в системе:
aptitude show openssl
Нас интересует строка Version, в ней указано 1.0.1-4ubuntu5.9.
Ну что же, файла с такой версией нет, но нам подойдет и openssl-1.0.0.cnf , переименуем его, так как нам нужен файл openssl.cnf:
sudo mv openssl-1.0.0.cnf openssl.cnf
Теперь мы можем загрузить переменные:
source vars 
или можно воспользоваться: # . vars , так как «source» одно и тоже что «.» .
На что мы должны получить ответ:
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
Вот как раз дальше мы и выполним:
 ./clean-all
Однако на это мы получим ответ:
mkdir: cannot create directory `/etc/openvpn/easy-rsa/keys’: Permission denied
Интересно и почему так? а потому что мы копировали easy-rsa с правами суперпользователя (root) и владельцем всего easy-rsa является root, а мы выполняем ./clean-all с правами пользователя.
Я решил эту проблему так:
sudo chown -R $USER /etc/openvpn/easy-rsa/
Переменная $USER — это переменная в которой хранится имя пользователя. Вот так мы сделали владельцем каталога easy-rsa своего пользователя. Теперь выполним, то что хотели:
 ./clean-all
И мы не увидим никаких ошибок. И сгенерируем наконец сертификат и ключ центра сертификации:
 ./build-ca
Теперь в /etc/openvpn/easy-rsa/keys лежат сертификат центра сертификации ca.crt и приватный ключ центра сертификации ca.key.  Сертификат центра сертификации находится как на сервере, так и на клиенте, так что в будущем его надо будет скопировать на клиентскую машину, но об этом позже.
Приватный ключ центра сертификации чрезвычайно секретный и не должен попасть в чужие руки. Нужно как можно лучше его спрятать, после генерации ключей для клиентов.
 

3. Сертификаты сервера

Далее мы сгенерируем сертификат и закрытый ключ для OpenVPN сервера:
 ./build-key-server server1
где server1 любое имя вашего OpenVPN сервера.
Большая часть вопросов аналогична вопросам при генерации сертификата и ключа для центра сертификации однако есть и новые поля:
Часть я обрезал, что бы скрины не были уж слишком большими.
Больше всего нас интересуют два вопроса:
  • Sign the certificate? [y/n]:
  • 1 out of 1 certificate requests certified, commit? [y/n]:
На которые нужно ответить утвердительно: y
Для сервера OpenVPN необходимо использовать алгоритм Диффи-Хеллмана:
 ./build-dh
Вывод будет примерно таким:

Все сертификаты и ключи были сгенерированы в подкаталоге keys/. Обычно их копируют в /etc/openvpn/ , зачем и мне отличаться? Да и потом в конфиге меньше букв набирать:
cd keys/
sudo cp ca.crt dh1024.pem server1.crt server1.key /etc/openvpn/

4. Конфигурация сервера OpenVPN

Вместе с утсновкой OpenVPN мы получаем примеры нужных нам конфигурационных файлов (и многих других, если присмотреться):
ls -l /usr/share/doc/openvpn/examples/sample-config-files/
Однако нас интересует один файл server.conf.gz.
Скопируем его в /etc/openvpn/ и разархивируем:
cd /etc/openvpn
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gzip -d server.conf.gz
Отредактируем server.conf:
sudo nano server.conf
 
так, что бы убедиться, что следующие строки указывают на корректные сертификаты и ключи:
ca ca.crt
cert server1.crt
key server1.key
dh dh1024.pem
Тут мне пришлось изменить только строки cert и key, так как я назвал свой сервер: server1, а по умолчанию идет: server.
Так же на самом деле можно как угодно назвать файлы, главное указать в соответсвтующих строках (это может помочь сбить с толку злоумышленника).
Стандартных настроек server.conf вполне хватает для работоспособного сервера, однако вы можете по изучать интернет на эту тему, с OpenVPN можно делать очень интересные и хитрые штуки.
Стартанем OpenVPN сервер:
sudo /etc/init.d/openvpn start
Демон успешно стартовал. Проверим, создался ли сетевой интерфейс:
ifconfig tun0
По умолчанию OpenVPN первому серверу назначает первый IP: 10.8.0.1. Нас это вполне устраивает. Так что перейдем к настройке клиентов.

5. Генерация сертификатов и ключей для клиентов.

Для каждого клиента необходимо индивидуально создавать ключи и сертификаты:
cd /etc/openvpn/easy-rsa/
source vars
 ./build-key client1
Вывод будет такой же, как при создании ключа и сертификата для сервера OpenVPN (пункт 3).
В подкаталоге keys/ появиться три файла: client1.crt — сертификат, client1.key — ключ, clien1.csr — вроде как мусор, он нам дальше не пригодится.
Необходимо каким либо безопасным образом скопировать файлы:
ca.crt , clien1.crt, client1.key скопировать на клиентский компьютер.
Так же поступим для генерации ключа и сертификата для второго клиента:
cd /etc/openvpn/easy-rsa/
source vars
./build-key client2
Для копирования на Windows клиенты можно воспользоваться WinSCP или существует много других способов.

6. serial и index.txt

Ранее я упоминал об этих файлах:
serial — серийный номер;
index.txt — список выданных ключей.
можно глянуть их содержимое:
 cat /etc/openvpn/easy-rsa/keys/serial
04
cat /etc/openvpn/easy-rsa/keys/index.txt
Так же можно избавиться от файлов: client1.crt, client1.csr, client1.key, client2.crt, client2.csr, client2.key:
 rm client*

7. Настройка клиентов Windows XP

Переходим на страницу: http://openvpn.se/download.html
И скачиваем openvpn-2.0.9-gui-1.0.3-install.exe
Устанавливаем OpenVPN GUI соглашаясь со всеми пунктами.
Теперь возьмем файлы: ca.crt, client2.crt, client2.key и скопируем в каталог:
C:\Program Files\OpenVPN\config
Далее возьмем файл C:\Program Files\OpenVPN\sample-config\client.ovpn и скопируем его в C:\Program Files\OpenVPN\config.

У меня почему-то файлы сертификатов (*.crt) поменяли расширение на *.cer. Но это не страшно, просто главное заметить.

UPD: Если расширение файла у вас не поменялось с crt на cer, то в конфиге нужно указывать соответственно то расширение, которое имеют файлы (если у файлов расширение crt то в конфиге нужно указать: ca ca.crt и cert client2.crt). Спасибо за уточнение Мостовому Павлу.

Откроем файл C:\Program Files\OpenVPN\config\client.ovpn и приведем к такому виду:
client
dev tun
proto udp
remote 192.168.1.104 1194 # Это адрес моего OpenVPN сервера, а 1194 — стандартный порт для OpenVPN
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.cer
cert client2.cer
key client2.key
comp-lzo
verb 3
Теперь нажмем дважды на значок OpenVPN GUI в трее:
И увидим примерно такую картину:
А после успешного подключения увидим в трее:
Теперь вспомним, что когда мы запустили OpenVPN сервер у нас получил IP-адрес: 10.8.0.1 и попробуем его пропинговать:
И это при том, что у меня в сети адреса были только в диапазоне: 192.168.1.0/36
Вот мы и получили рабочий сервер OpenVPN и подключили к нему клиентов.
Далее я напишу заметку, для чего я все это делал.
Ссылки:
Большую часть информации я взял отсюда, хорошая статья: тыц
Описание много чего в конфиге OpenVPN: тыц
Взято отсюда: тыц

Post Author: botanik

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *