Подготовка

Устанавливаем пакет openvpn

$ apt update && apt install openvpn -y

Делаем симлинк на каталог с переменными и настройками easy-rsa

$ ln -s /usr/share/easy-rsa /etc/openvpn/easy-rsa

И настраиваем переменные в каталоге /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="RU"
export KEY_PROVINCE="Moscow"
export KEY_CITY="Moscow"
export KEY_ORG="MySiteCompay"
export KEY_EMAIL="admin@custom.domain"
export KEY_CN="DOMAIN"
export KEY_OU="DOMAIN"
export KEY_NAME="openvpn-custom.domain"
export KEY_ALTNAMES="openvpn-server"

Запускаем скрипт

$ . ./vars

Настройка сервера

Генерация сертификатов

PKI

$ ./easyrsa init-pki

CA

$ ./easyrsa build-ca

Ключ для протокола Diffie–Hellman

$ ./easyrsa gen-dh

Генерируем сертификат сервера

$ ./easyrsa gen-req server nopass
$ ./easyrsa sign-req server server

Для повышение безопасности, можно запустить без параметра nopass

Еще сделаем ключ для tls-аутентификации

$ openvpn --genkey --secret pki/ta.key

Конфигурация

Создаем файл /etc/openvpn/server/server.conf

port 1337
proto udp

dev tun

cipher AES-256-GCM
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/vpn-server.crt
key /etc/openvpn/easy-rsa/pki/private/vpn-server.key
tls-auth /etc/openvpn/easy-rsa/pki/ta.key  0 
persist-key
persist-tun

dh /etc/openvpn/easy-rsa/pki/dh.pem

topology subnet
server 10.2.0.0 255.255.255.0

client-config-dir /etc/openvpn/server/ccd/
;ifconfig-pool-persist /etc/openvpn/server/ipp.txt
status /etc/openvpn/server/status.log

push "dhcp-option DNS 10.2.0.1"

client-to-client

keepalive 30 900

user nobody
group nogroup

;log         /var/log/openvpn/openvpn.log
;log-append  /var/log/openvpn/openvpn.log
verb 3
;mute 20
explicit-exit-notify 1

Проверяем настройку

$ openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf

Включаем юнит для автозапуска через systemd и проверяем статус

$ systemctl enable openvpn-server@server.service
$ systemctl start openvpn-server@server.service
$ systemctl status openvpn-server@server.service

Добавление клиента

Переходим в /etc/openvpn/easy-rsa/ и запускаем скрипт, который проставит переменные окружения

$ . ./vars

Создаем сертификат и ключ клиента

$ ./easyrsa build-client-full client-name nopass

Копируем сгенерированные файлы в конфиг клиента (например, создаем client-name.ovpn)

client
dev tun

proto udp
remote custom.domain 1337

resolv-retry infinite

nobind

persist-key
persist-tun

<ca>
Копируем контент из /etc/openvpn/easy-rsa/pki/ca.crt
</ca>

key-direction 1
<tls-auth>
Копируем контент из /etc/openvpn/easy-rsa/pki/ta.key
</tls-auth>

<cert>
Копируем контент из /etc/openvpn/easy-rsa/pki/issued/client-name.crt
</cert>

<key>
Копируем контент из /etc/openvpn/easy-rsa/pki/private/client-name.key
</key>

remote-cert-tls server
cipher AES-256-GCM

verb 3

Удаление клиента

./easyrsa revoke client-name