Что такое О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 (сжатие передаваемых данных) дает возможность уменьшить количество передаваемого трафика, соответственно это способствует ускорению передачи данных.