Устанавливаем репозитарий EPEL:
yum -y install epel-release
Обновляем приложения сервера до последних версий:
yum update -y
Устанавливаем OpenVPN-сервер и утилиту wget
:
yum install -y openvpn wget
Копируем файл конфигурации для сервера:
cp /usr/share/doc/openvpn-X.Y.Z/sample/sample-config-files/server.conf /etc/openvpn/
Где вместо X.Y.Z
будет версия OpenVPN.
Идём на Github проекта, в раздел релизов, и скачиваем свежую версию: https://github.com/OpenVPN/easy-rsa/releases.
Например, ссылка может быть такой: https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
Скачиваем:
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz -O /tmp/EasyRSA-3.0.7.tgz
Распаковываем:
cd /tmp tar xvzf EasyRSA-3.0.7.tgz
Копируем папку EasyRSA-3.0.7
как /etc/openvpn/easy-rsa
:
mkdir -p /etc/openvpn/easy-rsa cp -r /tmp/EasyRSA-3.0.7/* /etc/openvpn/easy-rsa
Если вы всё правильно скопировали, то содержимое каталога /etc/openvpn/easy-rsa
будет примерно таким:
[root@dfov tmp]# ls -liah /etc/openvpn/easy-rsa total 140K 33986276 drwxr-xr-x. 4 root root 214 Aug 29 14:03 . 33987918 drwxr-xr-x. 5 root root 69 Aug 29 13:52 .. 33986277 -rw-r--r--. 1 root root 4.5K Aug 29 14:03 ChangeLog 33986278 -rw-r--r--. 1 root root 1.3K Aug 29 14:03 COPYING.md 67402124 drwxr-xr-x. 2 root root 131 Aug 29 14:03 doc 33986279 -rwxr-xr-x. 1 root root 74K Aug 29 14:03 easyrsa 33986280 -rw-r--r--. 1 root root 18K Aug 29 14:03 gpl-2.0.txt 33986281 -rw-r--r--. 1 root root 1.1K Aug 29 14:03 mktemp.txt 33986282 -rw-r--r--. 1 root root 4.6K Aug 29 14:03 openssl-easyrsa.cnf 33991470 -rw-r--r--. 1 root root 2.1K Aug 29 14:03 README.md 33992093 -rw-r--r--. 1 root root 3.3K Aug 29 14:03 README.quickstart.md 33992094 -rw-r--r--. 1 root root 8.8K Aug 29 14:03 vars.example 100678152 drwxr-xr-x. 2 root root 122 Aug 29 14:03 x509-types
Редактируем файл /etc/openvpn/server.conf
.
Весь трафик от клиента будет проходить через VPN-сервер. Для этого раскомментируем строчку.
Было:
;push "redirect-gateway def1 bypass-dhcp"
Стало:
push "redirect-gateway def1 bypass-dhcp"
Указываем, какие DNS-сервера получит клиент после успешного подключения:
push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4"
Указываем пользователя nobody
:
user nobody group nobody
Раскомментируем строчку:
topology subnet
Чтобы сервер вёл журнал своей работы, раскомментируем строчку:
log-append openvpn.log
Создадим ta.key
файл:
openvpn --genkey --secret /etc/openvpn/ta.key
В данной статей рассматривается случай когда корневой центр сертификации находится на том же сервере где и OpenVPN. Для максимальной безопасности разделяют корневой сервер (CA) размещают отдельно.
cd /etc/openvpn/easy-rsa cp vars.example vars
Открываем файл vars
редактором, нас интересуют вот эти строчки:
#set_var EASYRSA_CERT_EXPIRE 825 #set_var EASYRSA_REQ_COUNTRY "US" #set_var EASYRSA_REQ_PROVINCE "California" #set_var EASYRSA_REQ_CITY "San Francisco" #set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" #set_var EASYRSA_REQ_EMAIL "me@example.net" #set_var EASYRSA_REQ_OU "My Organizational Unit"
Раскомментируем и вписываем значения, которые для нас актуальны:
Сколько дней будут действительны сертификаты:
По умолчанию — 825 дней (~ 2.2 года).
#set_var EASYRSA_CERT_EXPIRE 825
Страну:
set_var EASYRSA_REQ_COUNTRY "RU"
Провинцию\Область\Регион:
set_var EASYRSA_REQ_PROVINCE "Moscow"
Город:
set_var EASYRSA_REQ_CITY "Moscow"
Название организации (От имени которой мы будем выдавать сертификаты):
set_var EASYRSA_REQ_ORG "DFOV"
Почтовый адрес по умолчанию:
set_var EASYRSA_REQ_EMAIL "hello@dfov.ru"
Отдел:
set_var EASYRSA_REQ_OU "default"
cd /etc/openvpn/easy-rsa $ ./easyrsa init-pki Note: using Easy-RSA configuration from: /etc/openvpn/easy-rsa/vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /etc/openvpn/easy-rsa/pki
Затем:
$ ./easyrsa build-ca nopass Note: using Easy-RSA configuration from: /etc/openvpn/easy-rsa/vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Generating RSA private key, 2048 bit long modulus ........................+++ ...................................................................................+++ e is 65537 (0x10001) You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
Введите имя пользователя, хост или имя сервера. Для примера используем DFOV
.
$ cd /etc/openvpn/easy-rsa $ ./easyrsa gen-req server nopass Note: using Easy-RSA configuration from: /etc/openvpn/easy-rsa/vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Generating a 2048 bit RSA private key ...+++ ..........................+++ writing new private key to '/etc/openvpn/easy-rsa/pki/easy-rsa-5302.LfIZ4s/tmp.CFy2Jx' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [server]: Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/pki/reqs/server.req key: /etc/openvpn/easy-rsa/pki/private/server.key
Копируем полученный файл:
cp pki/private/server.key /etc/openvpn/
Выпускаем сертификат:
$ ./easyrsa sign-req server server Note: using Easy-RSA configuration from: /etc/openvpn/easy-rsa/vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 825 days: subject= commonName = server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes Using configuration from /etc/openvpn/easy-rsa/pki/easy-rsa-5448.VtsIpt/tmp.XbNtc9 Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'server' Certificate is to be certified until Dec 2 14:48:34 2022 GMT (825 days) Write out database with 1 new entries Data Base Updated Certificate created at: /etc/openvpn/easy-rsa/pki/issued/server.crt
Копируем:
cp pki/ca.crt /etc/openvpn/ cp pki/issued/server.crt /etc/openvpn/ cp pki/private/ca.key /etc/openvpn/ cp pki/private/server.key /etc/openvpn/
$ ./easyrsa gen-dh ... DH parameters of size 2048 created at /etc/openvpn/easy-rsa/pki/dh.pem
Копируем ключ:
$ cp pki/dh.pem /etc/openvpn/dh2048.pem
Обновляем права:
chown -R openvpn: /etc/openvpn find /etc/openvpn -type f -name "*.key" -exec chmod o-rwx {} \;
systemctl enable openvpn@server
Теперь необходимо настроить доступ и правильную маршрутизацию трафика для OpenVPN.
$ firewall-cmd --zone=public --add-service openvpn --permanent $ firewall-cmd --permanent --add-masquerade $ SHARK=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}') $ firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $SHARK -j MASQUERADE $ firewall-cmd --reload
Включаем опцию ip_forward
в параметрах ядра. Редактируем /etc/sysctl.conf
:
net.ipv4.ip_forward = 1
И применяем её "на лету", чтобы не перезагружать операционную систему:
sysctl net.ipv4.ip_forward=1
Перезапускаем сеть:
$ systemctl restart network.service
$ systemctl start openvpn@server.service
Если сервер запустился, команда status
покажет примерно такой вывод:
$ systemctl status openvpn@server.service openvpn@server.service - OpenVPN Robust And Highly Flexible Tunneling Application On server Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; enabled; vendor preset: disabled) Active: **active (running)** since Wed 2020-08-14 15:20:11 EDT; 7s ago Main PID: 1864 (openvpn) Status: "Initialization Sequence Completed" CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─2824 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf
Теперь вы можете установить web-интерфейс для управления сервером.