Установка OpenVPN сервера и генерация ключей клиентов

В настоящее время пользуется особой популярностью сервер OpenVPN для фильтрации, сжатия и шифрования трафика.
Существуют и другие цели использования openVPN, конечно же.
Поводом для написания именно этой статьи стало то, что везде описан способ установки сервера OpenVPN и генерации ключей к нему, но везде в результате получают 3-4 файла, лежащие в разных директориях на сервере.

Для Windows юзверей копирование этих файлов на компьютер и написание нужного конфига под эти ваши Винды становится сложнопроходимым квестом. Хотя установка OpenVPN клиента под Windows практически ни у кого проблемы не вызывает. В данной статейке описано, как сгенерировать скриптом всего один ovpn файл, который содержит в себе все необходимые настройки и легко импортируется Windows, Mac и Android клиентом.
Я использовал несколько статей в интернете и устанавливал сервер OpenVPN на FreeBSD 10 и 11.
Конфиги сервера и клиента будут одинаковыми и для остальных Unix ОСей, а вот команды для установки будут отличаться.
Итак, начнем с установки сервера. Перед началом установки обновим обязательно порты FreeBSD. Некоторые администраторы утверждают (в их числе сам Залманзон), что можно установить при помощи pkg, но мы то с вами знаем, что собранный вручную пакет работает как минимум втрое быстрее :). Поэтому:

Обновляем порты FreeBSD:

portsnap fetch
portsnap extract
Теперь устанавливаем openvpn:
cd /usr/ports/security/openvpn
make install clean

Создаем конфиги сервера OpenVPN:

mkdir /usr/local/etc/openvpn
mkdir /usr/local/etc/openvpn/keys
cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/openvpn.conf
cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa

Конфигурируем Easy-RSA:

cd /usr/local/etc/openvpn/easy-rsa
nano ./vars
# Исправляем следующие строки:
set_var EASYRSA_REQ_COUNTRY     ""
set_var EASYRSA_REQ_PROVINCE    ""
set_var EASYRSA_REQ_CITY        ""
set_var EASYRSA_REQ_ORG         ""
set_var EASYRSA_REQ_EMAIL       ""
set_var EASYRSA_REQ_OU          ""
 
Раскомментируем следующие строки:
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_CA_EXPIRE       3650
set_var EASYRSA_CERT_EXPIRE     3650

Генерируем необходимые ключи OpenVPN сервера:

По-умолчанию FreeBSD использует csh, но для генерирования ключей нужно использовать sh, поэтому меняем интерпретатор:

sh
./easyrsa init-pki

Должны увидеть такой ответ:

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /usr/local/etc/openvpn/easy-rsa/pki

# Генерируем ca:
 
./easyrsa build-ca
 
# Генерируем ключ для реализации протокола Диффи — Хеллмана:
 
./easyrsa.real gen-dh
 
# А так же генерируем ta.key:
 
openvpn --genkey --secret /usr/local/etc/openvpn/keys/ta.key
 
# Распихиваем готовые ключи по директориям:
 
cp pki/dh.pem \
           pki/ca.crt \
           pki/issued/openvpn-server.crt \
           pki/private/openvpn-server.key \
           /usr/local/etc/openvpn/keys

Конфигурируем сервер:

cd /usr/local/etc/openvpn
Редактируем файл конфигурации сервера openvpn.conf

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

# Раскомментируем
user nobody
group nobody
comp-lzo
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
 
# Указываем
proto udp
 
# Указываем пути к файлам сертификатов
 
ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/openvpn-server.crt
key /usr/local/etc/openvpn/keys/openvpn-server.key
dh /usr/local/etc/openvpn/keys/dh.pem
tls-auth /usr/local/etc/openvpn/keys/ta.key
# Сохраняем файл
Рестартуем сервер
# Перезапуск сервера OpenVPN
service openvpn restart
# Для того, чтобы сервер автоматически стартовал после перезагрузки, добавим его в rc.conf
sysrc openvpn_enable="YES"
На этом настройка сервера OpenVPN завершена.

Настройка клиента для подключения к OpenVPN серверу

Настройка клиента для вашей ОС сводится к установке клиента OpenVPN для вашей ОС и генерации конфига клиента.

Установка клиента OpenVPN на подключаемом компьютере

Для Debian — подобных систем выполните apt install openvpn -y
Для CentOS — yum install -y openvpn
Для Windows скачайте клиент здесь
Для Android скачайте клиент здесь
Для MAC скачайте клиент здесь

Генерация конфига для подключения клиента OpenVPN

Генерацию конфига клиентов удобнее всего сделать с помощью скрипта, выполняемого на сервере. Затем полученный конфиг нужно передать любым удобным вам способом на компьютер или телефон клиента.
Скачать скрипт можно с этого сайта и затем выполнить генерацию ключа для каждого подключаемого клиента.
На сервере с FreeBSD это делается так:

# Скачиваем скрипт на сервер
fetch chast.in/keygen.sh
# Для генерирования ключа выполняем скрипт:
sh ./keygen.sh  [USERNAME] [[IP.ADDRESS]] 
# Генерируем ключ для пользователя zalmanzon
sh ./keygen.sh zalmanzon

Если не указать IP.ADRESS, то система определит внешний IP адрес самостоятельно. Вместо IP.ADRESS допускается указать любой url, например vpn.regdo.ru
В директории скрипта появится файл USERNAME.ovpn, в данном случае — zalmanzon.ovpn
Файл .ovpn необходимо передать на компьютер или телефон клиента.

Для подключения к серверу импортируйте файл ovpn в ваш OpenVPN клиент и работайте в защищенном и зашифрованном соединении. Удобство генерации файла конфигурации клиентам при помощи предоставленного скрипта сложно переоценить :). В течении 3-х минут можно без ошибок сгенерировать десятки ключей и отправить их клиентам почтой.

Комментарии 1

  • Спасибо. Очень Интересно. Установка VPN server-а описана просто и доступно.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *