install and configure openvpn server

Что такое Оpenvpn?

Openvpn – бесплатная реализация виртуальной частной сети (Virtual Private Network)  создана Джеймсом Йонаном (James Yonan).  Дает возможность создать так называемый тоннель для передачи данных между двумя машинами с шифрованием. Виртуальная частная сеть  потому, что тоннель  создается по уже существующей сети (Интернет соединение).  Одна из особенностей Оpenvpn в том, что все передаваемые данные шифруются и если даже кто-то перехватит данные, он их не сможет прочесть без ключа шифрования. Частная сеть потому, что доступ к сети могут иметь только сотрудники компании, например,  то есть только  машины, которые вошли в виртуальную сеть.  Openvpn предоставляет несколько методов аутентификации: сертификатную (certificates) и с помощью логина пароля (based), смарт карты, можно также совмещать.

Установка Оpenvpn на Centos 5.4.

В данной статье опишу установку виртуальной частной сети Оpenvpn с шифрованием в режиме клиент\сервер (client/server mode)  с сертификатным методом аутентификации. Технология клиент\сервер дает возможность подключать n-е количество клиентов к виртуальной сети и устанавливать частную сеть клиентских машин как с сервером, так и между собой.

Нужно убедиться что на сервере включено перенаправление ip (IP forwarding)  и перенаправление TUN пакетов (TUN packet forwarding):

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -i tun+ -j ACCEPT


Данная установка проводилась на openvz VPS сервере, по этому открываем для ВПС нужные интерфейсы, как описано в openvz wiki:

vzctl set 101 --devices c:10:200:rw --save
vzctl set 101 --capability net_admin:on --save
vzctl exec 101 mkdir -p /dev/net
vzctl exec 101 mknod /dev/net/tun c 10 200
vzctl exec 101 chmod 600 /dev/net/tun

Перед установкой  на сервере были установлены уже RPM пакеты openssl и openssl-devel. Также ставим lzo билиотеку для компресии(сжимания) передаваемого трафика по создаваемой сети и С++ компилятор.

yum install gcc-c++
cd /usr/local/src/
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.00.tar.gz
tar -xzf lzo-2.00.tar.gz
cd lzo-2.00
./configure && make &&make install

Ставим pkcs11-helper, для больших возможностей в будущем по настройке виртуальной частной сети Оpenvpn, если будите  использовать стандарт шифрования  pkcs11. Я так понимаю, что на данном этапе можно было бы и без это обойтись.

cd /usr/local/src/
wget http://www.opensc-project.org/files/pkcs11-helper/pkcs11-helper-1.07.tar.bz2
tar -xjf pkcs11-helper-1.07.tar.bz2
cd pkcs11-helper-1.07
./configure  && make && make install
cd ../

Ставим сам openvpn (на сайте разработчиков можно выбрать нужную версию ). Обычно устанавливается в системные папки по умолчанию. Я предпочел, что бы все поставилось и находилось в одной папке –  /usr/local/openvpn, для этого добавляем –prefix=/usr/local/openvpn.

wget http://openvpn.net/release/openvpn-2.1.1.zip
cd ../openvpn-2.1.1
./configure  --prefix=/usr/local/openvpn
make && make install

Создаем папку /usr/local/openvpn/keys где будут сохраняться сертификаты и ключи. Копируем папки easy-rsa в /usr/local/openvpn для генерации сертификатов.  Папка easy-rsa должна находиться в корне директории с исходниками.

mkdir /usr/local/openvpn/keys
cp -rp /usr/local/src/openvpn-2.1.1/easy-rsa /usr/local/openvpn/
Создаем  master CA(Certigicate Authority) certificate/key:
cd /usr/local/openvpn/easy-rsa/2.0
source ./vars    #(или ./vars)
./clean-all
./build-ca

Нужно будет заполнить предложенные поля:

Country Name (2 letter code) [KG]:
State or Province Name (full name) [NA]:
Locality Name (eg, city) [BISHKEK]:
Organization Name (eg, company) [OpenVPN-TEST]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:OpenVPN-CA
Email Address [me@myhost.mydomain]:

Генерим дальше сертификат, ключ сервера и клиентских машин, при генерации клиентских сертификатов поле Common Name для отдельного клиента должно быть уникальным, можно оставлять по умолчанию.

./build-key-server server
./build-key client1
./build-key client2

Создаем Diffie Hellman параметры:

./build-dh

Должно выдать следующее:

ai:easy-rsa # ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
……………..+…………………………………….
……………….+………….+……………..+………
………………………………..

Копируем следующие сгенеренные файлы в папку /usr/local/openvpn/keys.

cp ca.crt ca.key dh1024.pem server.crt server.key client*.crt client*.key /usr/local/openvpn/keys

Копируем примеры конфигурационных файлов (она находятся в корне папки с исходниками).

cp -rp /usr/local/src/openvpn-2.1.1/sample-config-files  /usr/local/openvpn

Там теперь можем найти пример конфигурационного файла сервера server.conf

Мой конфиг сервера:

port 1194
proto tcp
dev tun
ca keys/ca.crt
cert keys/server.crt
key keys/server.key  # This file should be kept secret
dh keys/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push “route 10.8.0.0 255.255.255.0”
push “dhcp-option DNS 10.8.0.1”
client-to-client
keepalive 10 120
comp-lzo
max-clients 10
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log         openvpn.log
log-append  openvpn.log
verb 3

Дальше создаем  скрипт запуска и остановки сервера виртуальной частной сети openvpn.

cp /usr/local/src/openvpn-2.1.1/sample-scripts/openvpn.init /etc/rc.d/init.d/openvpn

В файле /etc/rc.d/init.d/openvpn изменяем путь к бинарнику запуска сервера openvpn.

openvpn=”/usr/local/openvpn/sbin/openvpn”

Чтобы ничего больше не менять, делаем символическую ссылку:

ln -s /usr/local/openvpn /etc/openvpn
chmod 755 /etc/rc.d/init.d/openvpn
chkconfig --add openvpn

Запускаем наш Openvpn сервер

/etc/init.d/openvpn start

Ставим на машине-клиенте openvpn-клиент (скачать его можно на сайте разработчика). Я ставил на Windiws XP, никаких дополнительных интерфейсов настроек сети руками настраивать не нужно было. Конфигурационный файл клиента у меня находится в C:\Program Files\OpenVPN\config, вот что в нем прописано client.conf:

client
dev tup
proto tcp
remote <ip адрес openvz сервера> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca keys/ca.crt
cert keys/client2.crt
key keys/client2.key
comp-lzo
verb 3
pull

Как видите сертификаты клиента и мастер сертификат ca.crt у меня скопированы с openvpn сервера в папку C:\Program Files\OpenVPN\config\keys

После этого запускаем openvpn клиент,  и можем соединиться с сервером, где стоит наш openvpn сервер используя ip адрес 10.8.0.1. Таким образом, используя openvpn сеть с нашей простой настройкой решает как минимум две пролемы:

1. Безопасность передачи данных. Так как используется SSL шифрование при передаче данных, даже если кто-то будет перехватывать трафик, расшифровать переданную информацию не сможет.

2. Количество передаваемого трафика. Использование библиотеки lzo (сжатие передаваемых данных) дает возможность уменьшить количество передаваемого трафика, соответственно это способствует ускорению передачи данных.

C:\Program Files\OpenVPN\config

One comment on “install and configure openvpn server

  1. Andrey 10.09.2010 16:48

    Отлично описано. Как раз то, что искал

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>