У даній статті ми розглянемо установку і настройку OpenVPN сервера на базі Linux CentOS 7, і покажемо, як за допомогою налаштованого OpenVPN-сервера об’єднати в одну мережу два віддалених комп’ютера (або офісу), що знаходяться за NAT. Аутентфікацію VPN клієнтів ми будемо виконувати за сертифікатами.

VPN – набір технологій, які дозволяють побудувати захищену мережу поверх загальнодоступних мереж або Інтертета. За допомогою VPN можна об’єднати в єдину локальну мережу розділені інтернетом сегментисеті.

OpenVPN – одна з реалізацій технології VPN з відкритим вихідним кодом на базі SSL / TLS (заснований на бібліотеці OpenSSL). За допомогою OpenVPN можна об’єднувати в єдину мережу як віддалені офіси, так і окремі локальні ПК, які знаходяться за NAT.

Установка OpenVPN і Easy-RSA

Першим кроком потрібно підключити репозиторій EPEL і оновити систему:

yum install epel-release -y
yum update -y

Коли система оновиться, потрібно за допомогою менеджера пакетів yum встановити OpenVPN і Easy-RSA (Він нам знадобиться для реалізації інфраструктури PKI ключів на сервері VPN).

yum install openvpn easy-rsa -y

Налаштування Easy-RSA і випуск сертифікатів

Скопіюємо всі скрипти easy-rsa в каталог / etc / openvpn /:

cp -r /usr/share/easy-rsa /etc/openvpn/

Перейдемо в каталог / etc / openvpn / easy-rsa / 3 / і створимо там файл чия:

cd /etc/openvpn/easy-rsa/3/
nano 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 "MSK"
set_var EASYRSA_REQ_CITY "MSK"
set_var EASYRSA_REQ_ORG "IT-Company"
set_var EASYRSA_REQ_EMAIL "admin@server.vpn.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 і створити ключ ТО.
cd /etc/openvpn/easy-rsa/3/
# ./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/3/pki

створюємо ключ ТО:

./easyrsa build-ca

Після запуску команди, нам потрібно буде вказати пароль, щоб сертифікати і ключ згенерувати. Пароль буде потрібно надалі для підписання сертифікатів.

easyrsa створення ca ключа

Створимо ключ сервера (назва сервера server.vpn.ru):

варіант nopass – відключення пароля для server.vpn.ru

# ./easyrsa gen-req server.vpn.ru nopass

Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Generating a 4096 bit RSA private key
..............................++
..............++
writing new private key to '/etc/openvpn/easy-rsa/3/pki/private/server.vpn.ru.key.R4IYCbD1zP'
-----
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.vpn.ru]:
Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/3/pki/reqs/server.vpn.ru.req
key: /etc/openvpn/easy-rsa/3/pki/private/server.vpn.ru.key

У процесі випуску сертифіката, в графі Звичайне ім’я потрібно натиснути Введіть,.

Підпишемо ключ server.vpn.ru використовуючи наш CA-сертифікат:

./easyrsa sign-req server server.vpn.ru

При підписанні сертифіката потрібно пароль, який ми задавали при випуску сертифіката ТО:

easyrsa підписати openvpn сервер сертифікатом

Як зазначено на скріншоті, в процесі потрібно буде ввести так і пароль від ТО.

Щоб переконатися, що сертифікати згенерувати без помилок, виконайте команду:

# openssl verify -CAfile pki/ca.crt pki/issued/server.vpn.ru.crt

pki/issued/server.vpn.ru.crt: OK

Все сертифіката OpenVPN сервера створені.

  • Кореневий сертифікат розташований: ‘pki / ca.crt’
  • Закритий ключ сервера розташований: ‘pki / private / server.vpn.ru.key’
  • Сертифікат сервера розташований: ‘pki / issued / server.vpn.ru.crt’

Для генерації ключа клієнта, потрібно виконати команду:

./easyrsa gen-req имяклиента nopass

Згенеруємо ключ клієнта admin1:

# ./easyrsa gen-req admin1 nopass

Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Generating a 4096 bit RSA private key
..........++
........................++
writing new private key to '/etc/openvpn/easy-rsa/3/pki/private/admin1.key.R5OY6reT2e'
-----
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) [admin1]:
Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/3/pki/reqs/admin1.req
key: /etc/openvpn/easy-rsa/3/pki/private/admin1.key

Як і з ключем сервера, потрібно його підписати, використовуючи CA-сертифікат:

./easyrsa sign-req client admin1

easyrsa генерація ключів клієнта для openvpn

Сертифікат для користувача створено.

Додатково потрібно згенерувати ключ Діффі-Хеллмана, який буде використовуватися при обміні ключів:

./easyrsa gen-dh

Він генерується тривалий час:

easyrsa gen-dh

Після чого генеруємо TLS сертифікат:

openvpn --genkey --secret ta.key

Якщо ми надалі плануємо відкликати клієнтські сертифікати, нам необхідно згенерувати CRL ключ:

# ./easyrsa gen-crl

Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Using configuration from /etc/openvpn/easy-rsa/3/pki/safessl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/3/pki/private/ca.key:
An updated CRL has been created.
CRL file: /etc/openvpn/easy-rsa/3/pki/crl.pem

Щоб відкликати сертифікат треба виконати команду:

./easyrsa revoke admin1 – де admin1 це ім’я сертифіката

Необхідні для роботи сертифікати створені, скопіюємо їх в робочі директорії:

Сертифікати сервера:

cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/server.vpn.ru.crt /etc/openvpn/server/
cp pki/private/server.vpn.ru.key /etc/openvpn/server/
cp pki/private/dh.pem /etc/openvpn/server/
cp pki/private/ta.key /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/

Сертифікати клієнта:

cp pki/issued/admin1.crt /etc/openvpn/client/
cp pki/private/admin1.key /etc/openvpn/client/

Налаштування OpenVPN сервера: конфігураційний файл, фаєрвол

Перейдемо до налаштувань конфігураційного файлу OpenVPN. Спочатку створимо файл конфігурації OpenVPN server.conf:

cd /etc/openvpn/ && nano server.conf

Міняємо вміст файлу на наступне:

# Указываем порт, протокол и устройство
port 1194
proto udp
dev tun
# Указываем пути к сертификатам сервера
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.vpn.ru.crt
key /etc/openvpn/server/server.vpn.ru.key
#Пути до CRL и DH ключей
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem
# Указываем настройки IP сети, адреса из которой будет будут получать VPN клиенты
server 15.10.2.0 255.255.255.0
push "redirect-gateway def1"
# Указываем назначаемые DNS сервера
push "dhcp-option DNS 77.88.8.8"
push "dhcp-option DNS 8.8.4.4"
# Разрешить подключаться разным клиентам, с одинаковым ключем
duplicate-cn
# TLS защита
tls-auth /etc/openvpn/server/ta.key 0
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
# Другая конфигурация
keepalive 20 60
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody
# Путь до лог файла
log-append /var/log/openvpn.log
verb 3

Після чого зберігаємо файл. Я вказав стандартний UDP порту 1194 для VPN сервера, але для роботи OpenVPN ви можете вказати будь-який вільний порт на сервері.

Залишилося налаштувати правила брандмауера, щоб дозволити підключення і маршрутизацію між сегментами.

Якщо ви використовуєте Firewalld, спочатку потрібно активувати модуль ядра експедирування:

# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
# sysctl -p

net.ipv4.ip_forward = 1

Додати службу openvpn v брандмауер, І інтерфейс tun0 в довірену зону

firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-interface=tun0

Активуємо ‘MASQUERADE’ для довіреної зони брандмауер:
firewall-cmd --permanent --zone=trusted --add-masquerade

Активувати NAT:

firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 15.10.2.0/24 -o IPсервера -j MASQUERADE
firewall-cmd –reload

Якщо ви використовуєте iptables без брандмауер, То потрібно виконати наступні команди:

iptables -t nat -A POSTROUTING -s 15.10.2.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -p tcp –dport 1194 -j ACCEPT
service iptables save

Запустимо OpenVPN і додамо його в автозавантаження Linux:

systemctl start openvpn@server
systemctl enable openvpn@server

Перевіримо слухається чи порт тисячі сто дев’яносто чотири сервісом:

# lsof -i:1194

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

openvpn 11887 nobody 5u IPv4 45892 0t0 UDP *:openvpn

Перевіримо настройки IP мережевого інтерефейса:

# ip a

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 15.10.2.1 peer 15.10.2.2/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::db7c:7fed:6d4f:70d2/64 scope link flags 800
valid_lft forever preferred_lft forever

Як бачимо, на пристрої tun0 додана зазначена при конфігурації мережі.

Це мінімальні настройки, які потрібно зробити для роботи OpenVPN.

Об’єднуємо кілька офісів (комп’ютерів) за допомогою OpenVPN

Розглянемо, як підключитися до OpenVPN сервера з двох віддалених комп’ютерів, які підключені до інтернету через NAT, і організувати спільну мережу між ними. Для підключення з Windows комп’ютера до сервера OpenVPN я використовую офіційний клієнт від розробників. Завантажити його можна на офіційному сайті, загострювати на цьому увагу не будемо, а перейдемо відразу до налаштування.

Після того як ви встановили клієнт, потрібно перейти до файлу конфігурації, який потрібно створити шляхом:

C:Program FilesOpenVPNconfig

Я створив файл клієнт і додав в нього наступне вміст:

client
dev tun
proto udp
remote 182.122.41.12 1194
resolv-retry infinite
nobind
block-outside-dns
persist-key
persist-tun
mute-replay-warnings
remote-cert-tls server
tls-client
auth SHA512
tls-auth "C:\Program Files\OpenVPN\config\ta.key" 1
remote-cert-eku "TLS Web Server Authentication"
ca "C:\Program Files\OpenVPN\config\ca.crt"
cert "C:\Program Files\OpenVPN\config\admin1.crt"
key "C:\Program Files\OpenVPN\config\admin1.key"
cipher AES-256-CBC
comp-lzo
verb 3

Для настройки нам будуть потрібні створені нами раніше сертифікати клієнта, безпеки і сервера. Їх потрібно завантажити з сервера і помістити в зручну вам директорію, після чого в файлі конфігурації клієнта OpenVPN потрібно вказати шлях до них шлях.

Після ми підключаємося через ярлик Open VPN client в треї:

підключення

підключення openvpn клієнта до сервера

Я підключився і отримав таку IP для свого ПК:

IPv4-адрес. . . . . . . . . . . . : 15.10.2.14
Маска подсети . . . . . . . . . . : 255.255.255.252

На другому комп’ютері за NAT я виконав ті ж дії, попередньо створивши сертифікат для другого користувача, при підключенні другої ПК так само отримав IP з мережі:

IPv4-адрес. . . . . . . . . . . . : 15.10.2.6
Маска подсети . . . . . . . . . . : 255.255.255.252

Після підключення, обидва комп’ютера виявилися в одній мережі і бачать один одного.

Запускаємо пінг на другому ПК:

Обмен пакетами с 15.10.2.14 по с 32 байтами данных:
Ответ от 15.10.2.14: число байт=32 время=67мс TTL=127

Запускаємо пінг на першому ПК:

Обмен пакетами с 15.10.2.6 по с 32 байтами данных:
Ответ от 15.10.2.6: число байт=32 время=71мс TTL=127

Обидва підключені VPN клієнта можуть обмінюватися пакетами, і передавати файли один одному безпосередньо. Таким чином ми змогли об’єднати в одну локальну мережу два ПК, що знаходяться в різних точках країни.

На сервері з OpenVPN ви можете створити необмежену кількість ключів і сертифікатів для користувачів. Якщо вам буде потрібно новий сертифікат, виконайте наступні команди в директорії / etc / openvpn / easy-rsa / 3:

./easyrsa gen-req имяклиента nopass
./easyrsa sign-req client имяклиента

Не забувайте періодично відкликати сертифікати клієнтів, якщо вони не використовуються, щоб зберегти в безпеці ваші дані.

Leave a Reply

Your email address will not be published. Required fields are marked *