OpenVPN-Server на Centos 7

Устанавливаем репозиторий 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

 

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

# cd /etc/openvpn/easy-rsa

Сгенерируем ключ клиента 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

Скачать APK OpenVPN for Android v-0.7.15

Скачать OpenVPN for Windows

Ярлык для автозапуска с подключением:

"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect client-01.ovpn --silent_connection 1

Расположение ярлыка для автозапуска:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

 

Клиент на Linux:

поместить файлы ca.crt, client-01.crt, client-01.key, client-01.ovpn в /etc/openvpn и выполнить:

# openvpn --config /etc/openvpn/client-01.ovpn

 

Ошибка при подключении клиента:

...
Mon Jul 06 18:59:29 2020 open_tun
Mon Jul 06 18:59:29 2020 TAP-WIN32 device [Подключение по локальной сети] opened: \\.\Global\{84AD4B1B-C918-4BC8-A992-8ED12C53F793}.tap
Mon Jul 06 18:59:29 2020 TAP-Windows Driver Version 9.24 
Mon Jul 06 18:59:29 2020 Notified TAP-Windows driver to set a DHCP IP/netmask of 10.0.10.6/255.255.255.252 on interface {84AD4B1B-C918-4BC8-A992-8ED12C53F793} [DHCP-serv: 10.0.10.5, lease-time: 31536000]
Mon Jul 06 18:59:29 2020 Successful ARP Flush on interface [30] {84AD4B1B-C918-4BC8-A992-8ED12C53F793}
Mon Jul 06 18:59:29 2020 MANAGEMENT: >STATE:1594051169,ASSIGN_IP,,10.0.10.6,,,,
Mon Jul 06 18:59:34 2020 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Mon Jul 06 18:59:34 2020 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 06 18:59:39 2020 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Mon Jul 06 18:59:39 2020 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 06 18:59:40 2020 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Mon Jul 06 18:59:40 2020 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 06 18:59:42 2020 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Mon Jul 06 18:59:42 2020 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 06 18:59:43 2020 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Mon Jul 06 18:59:43 2020 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 06 18:59:44 2020 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Mon Jul 06 18:59:44 2020 Route: Waiting for TUN/TAP interface to come up...
...

Решение:

Нажимаем WIN+X выбираем Панель управления, в открывшемся окне кликаем Программы и затем Включение и отключение компонентов Windows.
Ищем там Пакет администрирования диспетчера RAS-подключений (CMAK) и убеждаемся, что напротив него стоит галочка. Если не стоит ее нужно поставить.
Если пакет не установлен то он установится после того как вы поставите галочку.
Если пакет установлен закрываем все нажатием ОК.

Нажимаем WIN+R вводим services.msc и жмем Выполнить.
Откроется окно Службы.
Ищем службу Сетевые подключения, делаем двойной клик мышью на ней.
Вам откроется Свойства: Сетевые подключения выставляем Тип запуска: Автоматически. Если служба не запущена(Состояние: Выключена) то запускаем ее нажатием на кнопку Запустить. Если служба уже запущена можно по желанию перезапустить ее (Остановить|Запустить).
Закрываем это окно нажатием ОК.