Установка 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

Для тех, кто не является поклонником установки софта FreeBSD из портов, напишу команду установки через pkg:

# Не православная и не кошерная команда установки openvpn:
pkg install -y openvpn

Создаем конфиги сервера 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.real 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, потребуется ввести дважды 
# пароль для ключа (нужно записать или запомнить его):
# Пароль будет нужнокаждый раз указывать, это неудобно
# Поэтому добавляем nopass :o)
./easyrsa.real build-ca nopass
 
# Создаем сертификат сервера (Server Sertificate):
./easyrsa.real build-server-full openvpn-server nopass
 
# Генерируем ключ для реализации протокола Диффи — Хеллмана:
./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"
 
# Проверяем, что udp (некоторые используют tcp). 
proto udp
# Проверяем port (можно указать любой, например - 443)
port 1194
 
# Указываем пути к файлам сертификатов
 
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
# Сохраняем файл
Рестартуем сервер
# Для того, чтобы сервер автоматически стартовал 
# после перезагрузки, добавим его в rc.conf
sysrc openvpn_enable="YES"
# Перезапуск сервера OpenVPN
service openvpn restart
На этом настройка сервера 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-х минут можно без ошибок сгенерировать десятки ключей и отправить их клиентам почтой.

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

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

  • Не описан шаг с созданием этих ключей.
    pki/issued/openvpn-server.crt \
    pki/private/openvpn-server.key \

  • Вопрос про Генерацию конфига клиентов. Данный скрипт будет работать на archlinux?

  • Здравствуйте! У меня FreeBDS 12.1 при запуске скрипта пишет ./keygen.sh: [[: not found
    , что я делаю неправильно?

  • Здравствуйте!
    Следует установить bash: 1) pkg install bash 2) и выполнять bash keygen.sh

  • По идее — должно. Нужно пробовать, проверять

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

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