OpenVPN-Server

Устанавливаем репозиторий EPEL (если нет)
# yum install epel-release

Устанавливаем NET-Tools (если нет)
# yum install net-tools

Установка OpenVPN-Server и Easy-RSA
# yum install openvpn easy-rsa

Создаем директорию для генерации сертификатов и копируем туда Easy-RSA
# mkdir /etc/openvpn/easy-rsa
# cp -rf /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa

Переходим в директорию и создаем файл vars
# cd /etc/openvpn/easy-rsa
# vi vars

Записываем в файл vars

set_var EASYRSA                 "$PWD"
set_var EASYRSA_PKI             "$EASYRSA/pki"
set_var EASYRSA_DN              "cn_only"
set_var EASYRSA_REQ_COUNTRY     "RU"
set_var EASYRSA_REQ_PROVINCE    "Moscow"
set_var EASYRSA_REQ_CITY        "Moscow"
set_var EASYRSA_REQ_ORG         "My Organisation"
set_var EASYRSA_REQ_EMAIL       "admin@itdraft.ru"
set_var EASYRSA_REQ_OU          "IT department"
set_var EASYRSA_KEY_SIZE        4096
set_var EASYRSA_ALGO            rsa
set_var EASYRSA_CA_EXPIRE       7500
set_var EASYRSA_CERT_EXPIRE     3650
set_var EASYRSA_NS_SUPPORT      "no"
set_var EASYRSA_NS_COMMENT      "CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR         "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST          "sha512"

Делаем файл исполняемым
# chmod +x vars



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

Инициализация каталог PKI
# ./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: /etc/openvpn/easy-rsa/pki

Создать ключ CA
# ./easyrsa build-caбудет запрошен пароль, его будет запрашивать в дальнейшем при создании сертификатов

Создадим ключ сервера (название сервера srv-openvpn)
# ./easyrsa gen-req srv-openvpn nopassопция nopass — отключение пароля для srv-openvpn

Подпишем ключ srv-openvpn используя наш CA-сертификат
# ./easyrsa sign-req server srv-openvpnна вопрос: Confirm request details: - ответить: yes
в процессе у нас спросят пароль, который мы задавали CA

Проверим файлы сертификата, что бы убедится, что сертификаты сгенерировались без ошибок
# openssl verify -CAfile pki/ca.crt pki/issued/srv-openvpn.crt
pki/issued/srv-openvpn.crt: OK



Создание ключа клиента

Сгенерируем ключ клиента client-01
# ./easyrsa gen-req client-01 nopass

Подпишем ключ client-01, используя наш CA сертификат
# ./easyrsa sign-req client client-01на вопрос: Confirm request details: - ответить: yes
в процессе у нас спросят пароль, который мы задавали CA

Проверим файлы сертификата
# openssl verify -CAfile pki/ca.crt pki/issued/client-01.crt
pki/issued/client-01.crt: OK



Дополнительная настройка OpenVPN сервера

Сгенерируем ключ Диффи-Хеллмана
# ./easyrsa gen-dh

Сгенерируем CRL ключ необходимый для отзыва клиентских сертификатов
# ./easyrsa gen-crl

Для того, что бы отозвать сертификат надо выполнить команду (НА БУДУЩЕЕ)
# ./easyrsa revoke client-02после каждого отозванного сертификата необходимо обновлять CRL ключ

Копируем сертификаты сервера
# cp pki/ca.crt /etc/openvpn/server/
# cp pki/issued/srv-openvpn.crt /etc/openvpn/server/
# cp pki/private/srv-openvpn.key /etc/openvpn/server/
# cp pki/dh.pem /etc/openvpn/server/
# cp pki/crl.pem /etc/openvpn/server/

Копируем сертификаты клиента
# cp pki/ca.crt /etc/openvpn/client/
# cp pki/issued/client-01.crt /etc/openvpn/client/
# cp pki/private/client-01.key /etc/openvpn/client/



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

Создадим файл конфигурации server.conf
# cd /etc/openvpn
# vi server.conf

Записываем в файл server.conf

# OpenVPN Port, Protocol and the Tun
port 1194
#proto udp
proto tcp
dev tun

# OpenVPN Server Certificate - CA, server key and certificate
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/srv-openvpn.crt
key /etc/openvpn/server/srv-openvpn.key

# DH and CRL key
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem

# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.0.10.0 255.255.255.0
push "redirect-gateway def1"
#push "route 82.146.59.16 255.255.255.255"

# Using the DNS from https://dns.watch
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

# Enable multiple client to connect with same Certificate key
duplicate-cn

# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache

# Other Configuration
keepalive 20 60
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody

# OpenVPN Log
log-append openvpn.log
verb 3



Настройка Firewalld

Отредактировать файл /etc/sysctl.conf:
Добавить:
net.ipv4.ip_forward = 1

Выполняем команду
# sysctl -p

Настройка
# firewall-cmd --permanent --add-masquerade
# firewall-cmd --zone=public --add-port=1194/tcp --permanent
# firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT
# firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -i 10.0.10.0/24 -o eth0 -j MASQUERADE
# firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i 10.0.10.0/24 -o eth0 -j ACCEPT
# firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i eth0 -o 10.0.10.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT
# firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -p tcp --tcp-flags SYN,RST SYN -s 10.0.10.0/24 -j TCPMSS --clamp-mss-to-pmtu
# firewall-cmd --reload

Запустим OpenVPN и добавим его в автозагрузку
# systemctl start openvpn@server
# systemctl enable openvpn@server

Проверим
# systemctl status openvpn@server



Настройка OpenVPN клиента

Создадим файл конфигурации client-01.ovpn
# cd /etc/openvpn/client
# vi client-01.ovpn

Записываем в файл client-01.ovpn

client
dev tun
proto tcp

remote xx.xx.xx.xx 1194

ca ca.crt
cert client-01.crt
key client-01.key

cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3
в строке ‘remote xx.xx.xx.xx 1194‘ надо прописать IP-адрес вместо ‘xx.xx.xx.xx‘

Теперь для надо заархивировать сертификаты (ca.crt, client-01.crt), ключ клиента (client-01.key), файл конфигурации (client-01.ovpn), и передать их на ПК, который будет подключаться к OpenVPN серверу

Для подключения с андройда лучше использовать: OpenVPN for Android