Установка и настройка OpenVPN Server на CentOS 6

openvpn

Эта статья поможет вам установить и настроить OpenVPN Server на CentOS 6 x64. А также подключить к серверу Windows, OS X и Linux клиентов. Но перед тем как начать, – вам необходимо подключить EPEL-репозиторий. Именно этом репозитории хранятся пакеты для OpenVPN Server.

wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm

Первоначальное конфигурация

Для начала произведем установку OpenVPN из EPEL

yum install openvpn -y

Вместе с пакетом OpenVPN-сервера идут примеры конфигурации, которые мы скопируем в каталог /etc/openvpn

cp /usr/share/doc/openvpn-2.*/sample/sample-config-files/server.conf /etc/openvpn

После того, как у нас в нужном каталоге появился основной файл конфигурации OpenVPN, приведем базовые настройки к виду

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
user nobody
group nobody

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

Только что мы закончили конфигурирование OpenVPN, и теперь нам необходимо сгенерировать ключи и сертификаты. Как и файл server.conf, скопируем необходимые скрипты в каталог /etc/openvpn. Только важно не забыть перед этим установить пакет easy-rsa.

yum install easy-rsa
mkdir -p /etc/openvpn/easy-rsa/keys
cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa

После чего необходимо открыть файл /etc/openvpn/easy-rsa/vars любимым редактором и привести заполнить некоторые поля

export KEY_COUNTRY="US"
export KEY_PROVINCE="NY"
export KEY_CITY="New York"
export KEY_ORG="Organization Name"
export KEY_EMAIL="administrator@example.com"
export KEY_CN=droplet.example.com
export KEY_NAME=server
export KEY_OU=server

OpenVPN может неверно определить версию OpenSSL на CentOS 6 и не запуститься. Чтобы исключить это скопируем openssl-1.0.0.cnf с именем openssl.cnf

cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

Изменим рабочий каталог на /etc/openvpn/easy-rsa и сгенерируем CA-сертификат

cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca

После этого мы можем создать сертификат для нашего OpenVPN-сервера. В конце напишите yes

./build-key-server server

Также нам необходимо сгенерировать Diffie Hellman ключ, используя скрипт build-dh и скопировать все файлы в каталог /etc/openvpn

./build-dh
cd /etc/openvpn/easy-rsa/keys
cp dh1024.pem ca.crt server.crt server.key /etc/openvpn

И на последок, чтобы позволить клиентам подключаться, – нужно создать клиентские сертификаты. Вы можете проделать генерацию клиентских сертификатов и ключей любое количество раз

cd /etc/openvpn/easy-rsa
./build-key client

Маршрутизация и запуск OpenVPN

Создадим в iptables правило, позволяющее ходить пакетам за пределы подсетей OpenVPN

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save

И разрешим IP Forwarding в sysctl. Открываем /etc/sysctl.conf и определяем параметр

net.ipv4.ip_forward = 1

Ну и в завершение сохраним настройки sysctl и включим OpenVPN в автозагрузку и запустим его

sysctl -p
chkconfig openvpn on
service openvpn start

Конфигурация OpenVPN клиентов

Итак, ваш OpenVPN сервер запущен и готов к подключению внешних клиентов. Процедура подключения в разных операционных системах может незначительно отличаться. Но, в общем и целом, она сводится к тому, чтобы программе клиенту подключить конфигурационный файл(без кавычек)

client
dev tun
proto udp
remote x.x.x.x 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
<ca>
Contents of ca.crt
</ca>
<cert>
Contents of client.crt
</cert>
<key>
Contents of client.key
</key>

Вместо x.x.x.x вам необходимо прописать IP-адрес OpenVPN-сервера. А в блоки ca, cert и key содержимое файлов /etc/openvpn/easy-rsa/keys/ca.crt, /etc/openvpn/easy-rsa/keys/client.crt и /etc/openvpn/easy-rsa/keys/client.key соответственно.

Сохраните файл конфигурации клиента с расширением .ovpn по следующей таблице

Операционная система Программа                           Путь к файлу конфигурации
Windows              OpenVPN Community Edition binaries  C:\Program Files\OpenVPN\config
Linux                openvpn                             any

В Linux подключение происходит следующей командой

sudo openvpn --config ~/path/to/client.ovpn

Возможные ошибки:

TLS_ERROR: BIO read tls_read_plaintext error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Исправление:
Проверяем сертификат клиента

openssl verify -CAfile ca.crt client.crt

в случе успеха получим

client.crt: OK

Если же ошибка, заново перегенериваем все сертификаты, так чтоб наверняка :)

Опубликовано в Linux, openVPN

Рубрики