Эта статья поможет вам установить и настроить 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
Если же ошибка, заново перегенериваем все сертификаты, так чтоб наверняка