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