В настоящее время пользуется особой популярностью сервер 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-х минут можно без ошибок сгенерировать десятки ключей и отправить их клиентам почтой.
Спасибо. Очень Интересно. Установка 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
По идее — должно. Нужно пробовать, проверять