Устанавливаем OpenvVPN сервер.

# pkg ins openvpn

Создаем директорию для сервера.

# mkdir /usr/local/etc/openvpn

Копируем стандартный конфиг для OpenVPN сервера.

# cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/openvpn.conf

Копируем директорию easy-rsa для сборки и генерации ключей и сертификатов.

# cp -r /usr/local/share/easy-rsa/ /usr/local/etc/openvpn/easy-rsa
# cd /usr/local/etc/openvpn/easy-rsa

Редактируем конфиг vars для сборки сертификата сервера.

# vi vars

Находим и раскомментируем и параметры:

set_var EASYRSA_REQ_COUNTRY        "US"
set_var EASYRSA_REQ_PROVINCE       "California"
set_var EASYRSA_REQ_REQ_CITY        "San Francisco"
set_var EASYRSA_REQ_ORG                  "Copyleft Certificate Co"
set_var EASYRSA_REQ_EMAIL                "Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра."
set_var EASYRSA_REQ_OU                     "My organizational Unit"

set_var EASYRSA_KEY_SIZE                   2048

set_var EASYRSA_CA_EXPIRE                3650

set_var EASYRSA_CERT_EXPIRE                3650

Переходим в оболочку sh.

# sh

Устаналиваем директорию для сборки сертификатов и ключей.

# ./easyrsa.real init-pki

Создаем сертификат сервера, пароль для него и указываем имя хоста.

# ./easyrsa.real build-ca

Отключаем ввод пароля для сертификата сервера. Вводим пароль, который мы создали.

# ./easyrsa.real build-server-full openvpn-server nopass

Создаем сертификат клиента и пароль для него. В конце создания сертификата потребуется ввести ранее созданный пароль для сертификата сервера.

# ./easyrsa.real build-client-full f2oclient

Генерируем сертификат Диффи-Хеллмана. Это может занять длительное время.

# ./easyrsa.real gen-dh

Создаем папку keys для ключей и сертификатов.

# mkdir /usr/local/etc/openvpn/keys

Копируем туда созданные сертификаты для сервера.

# cp pki/dh.pem ../keys
# cp pki/ca.crt ../keys
# cp pki/issued/openvpn-server.crt ../keys
# cp pki/private/openvpn-server.key ../keys

Переходим в корневую директорию OpenVPN сервера.

# cd ..

Редактируем openvpn.conf. 

# vi openvpn.conf

Находим и редактируем следующие параметры:

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

Добавляем следующие строчки:

push "route-gateway 192.168.1.1"      # Указываете вместо 192.168.1.1 адрес своего шлюза. Данная строчка пробрасывает интернет на подключающиеся клиенты.

remote-cert-tls client                           # Позволяет защиттиться от атак MITM

Настраиваем логирование.

# vi /etc/syslog.conf

Переходим в конец файла и перед строчкой:

!*

Пишем следующую:

!openvpn
*.* /var/log/openvpn.log

Настраиваем ротацию логов. Добавляем в файл /etc/newsyslog.conf следующую строчку:

/var/log/openvpn.log                                                   600    30        *        @T00    ZC

Включаем OpenVPN сервер.

# echo 'openvpn_enable="YES"' >> /etc/rc.conf
# echo 'openvpn_if="tun"' >> /etc/rc.conf
# service openvpn start

На клиент копируем следующие сертификаты и ключи:

ca.crt
f2oclient.crt
f2oclient.key