Как установить и настроить openvpn в операционной системе Linux

Одной из востребованной технологий во времена "ПАНДЕМИИ" является VPN (виртуальная частная сеть). Используется для объединения несколько подсетей в одну. Примером такого объединения может быть организация удаленного доступа сотрудникам находящимся дома к ресурсам компании.

OpenVPN - ВПН протокол, который используется для создания защищенного туннеля между клиентом и сервером не только в операционной системе Линукс, а также в других системах таких как: Windows; cisco; MikroTik, Android...

Рассмотрим особенности OpenVPN:

  • использует 256 битное шифрование по умолчанию;
  • не поддерживает протоколы L2TP, IPSec и PPTP, вместо них использует свой собственный алгоритм.
  • поддерживает локальную сеть, это значит клиент может подключиться к компьютеру в локальной сети, где не установлен VPN сервер.

Для понимания, рассмотрим простую схему реализации удаленного доступа.

Схема ВПН

На рисунке выше видно, что есть сервер с операционной системой Centos. Туда установим openvpn сервер и сертификаты. На ноутбук передадим открытые ключи и установим с официального сайта openvpn клиент.

Установка

Рассмотрим установку на примере Centos 8.

Подключаем репозиторий epel-release.

# dnf -y install epel-release

Установка.
# dnf -y install openvpn

Для работы сервера, необходимо создать сертификаты. Создадим папку "keys", затем через утилиты Easy-RSA создадим ключи.

# mkdir /etc/openvpn/keys

Установка Easy-RSA 3.

На github ищем ссылку на дистрибутив и копируем ее в буфер обмена.

Ссылка на easy-rsa 3

Скачиваем Easy-RSA в папку keys.

cd /etc/openvpn/keys

wget https://github.com/OpenVPN/easy-rsa/archive/master.zip

Как видно выше дистрибутив скачался в zip архиве, чтобы распаковать его установим еще пакеты.

# dnf -y install unzip zip

Распаковка архива.

# unzip master.zip

Создание структуры ключей.
cd /etc/openvpn/keys/easy-rsa-master/easyrsa3

Переименовываем файл vars.example в vars.

mv vars.example vars

# ./easyrsa init-pki

PKI ключи

Создание удостоверяющего центра CA.

# ./easyrsa build-ca

Создание сертификатов

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

  1. /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key
  2. /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/ca.crt

ca.key ключ секретный, его нужно оставить на сервере.

ca.crt - открытый.

# ./easyrsa gen-req server nopass

Подписываем сертификат.

# ./easyrsa sign-req server server

Во время выполнения команды, необходимо ввести пароль от "CA", который вводили в прошлом на этапе создания удостоверяющего центра.

Создадим ключ Диффи-Хелмана.

# ./easyrsa gen-dh

Деффи ХелманСкопируем созданные ключи в каталог сервера /etc/openvpn/server.

cp pki/ca.crt /etc/openvpn/server/ca.crt
cp pki/dh.pem /etc/openvpn/server/server/dh.pem
cp pki/issued/server.crt /etc/openvpn/server/server.crt
cp pki/private/server.key /etc/openvpn/server/server.key

Ключ для сервера создали и скопировали, теперь создадим для клиента (в моем случае для ноутбука).

# ./easyrsa gen-req polzovatel-noutbok nopass
# ./easyrsa sign-req client polzovatel-noutbook

ВАЖНО! Для каждого пользователя нужно создавать свой ключ.

Настройка

По умолчанию после установки openvpn создается каталог /etc/openvpn. Однако он пустой, в нем нет файлов. Для создания конфига есть два варианта:

  1. скопировать его из директории /usr/share/doc/openvpn/sample/sample-config-files/server.conf
  2. создать новый в каталоге /etc/openvpn/server.

Воспользуемся вторым вариантом, скопируем файл и уберем из него комментарии "#" и ";".

cat /usr/share/doc/openvpn/sample/sample-config-files/server.conf | egrep "^[^#*;]" > /etc/openvpn/server/server.conf

ВАЖНО! Если скопировать файл конфигурации не получилось, создайте новый server.conf и скопируйте мой конфиг ниже.

Откроем конфиг редактором nano.

nano /etc/openvpn/server/server.conf

Получился такой файл конфигурации по умолчанию.

Файл конфигурации

Редактируем его, меняем стандартный порт и пути к ключам, а также к логам.


# стандартный порт 1194, для безопасности рекомендуется использовать нестандартный порт
port 9222
# протокол udp, при желании можно изменить на tcp
proto udp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
# подсеть для туннеля, может быть любой
server 172.16.0.0 255.255.255.0
#указываем подсеть, к которой будем обращаться через vpn
route 192.168.50.0 255.255.255.0
# передаем маршрут клиентам
push "route 192.168.50.0 255.255.255.0"
# файл с записями соответствий clinet - ip
ifconfig-pool-persist ipp.txt
# позволяет клиентам openvpn подключаться друг к другу
client-to-client
# каталог с настройками клиента
client-config-dir /etc/openvpn/client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3

Создадим каталог для логов.
mkdir /var/log/openvpn

Добавим конфиг клиента, с помощью редактора nano

nano /etc/openvpn/client/client
iroute 192.168.50.0 255.255.255.0

Файл конфигурации клиента

Настройка в файле client означает, что подсеть 192.168.50.0 255.255.255.0 относится к клиенту, если команду iroute убрать, то сеть в локальной сети клиента не будет видна.

Наконец, запускаем VPN на сервере.

systemctl start openvpn-server@.service

Добавляем в автозагрузку.
systemctl enable openvpn-server@.service

Проверяем слушается ли порт 9222

netstat -tulnp | grep 9222

Установка клиента на windows 10

Первом делом, скачаем дистрибутив для ноутбука. Для этого, необходимо зайти на официальный сайт openvpn.net.

Затем нажимаем на кнопку "GET OPENVPN".GET OPENVPN

Далее выбираем "WINDOWS".

WINDOWS

 

Скачиваем файл и устанавливаем на windows.

Открываем папку  C:\Program Files\OpenVPN\config

Копируем сертификаты (ключи) из сервера:

  • polzovatel-noutbok.key
  • polzovatel-noutbok.crt
  • ca.crt.

С помощью блокнота создаем файл config.ovpn со следующим содержимом:
dev tun
proto udp
remote внешний IP-адрес сервера Centos
port 9222
client
resolv-retry infinite
ca ca.crt
cert user1.crt
key user1.key
persist-key
persist-tun
comp-lzo