Создание VPN-сервера от А до Я

Создание VPN-сервера от А до Я 31 Марта 2022

Что такое VPN и зачем его использовать

Аббревиатура VPN расшифровывается как Virtual Private Network (виртуальная частная сеть). Эта сеть представляет собой технологию, с помощью которой поверх одной сети (например, Интернета) можно установить одно или несколько сетевых логических соединений. Также под VPN понимается сервис, который обеспечивает криптографическую защиту приватных данных и маркировку участников сети и их трафика при пользовании Интернетом.

VPN может применяться для решения таких задач как:

  • выполнение удаленной работы с доступом к сервисам и документам организации;
  • объединение нескольких офисов компании в общую систему с изоляцией отделов;
  • сохранность в браузере истории поиска, необходимой для создания таргетированной рекламы, а также для доступа к сайтам, которые заблокированы на определенной территории.
  • Кроме того, через VPN безопаснее подключаться к различным сайтам, на которых размещается конфиденциальная информация пользователя.

Сегодня мир проявляет повышенный интерес к VPN-серверам не только как корпоративному решению, но и как к средству обхода различных блокировок.

Как работает VPN?

Установка соединения через VPN предусматривает создание своеобразного «туннеля» между ПК пользователя и VPN-сервером с обязательной шифровкой данных перед их отправкой по этому «туннелю».

Работа VPN включает этапы:

  • подключения к VPN – система выполняет «опознание» сети пользователя и сверяет введенный пароль с внесенным в базу данных;
  • авторизации пользователя – сервер предоставляет ему возможность выполнять те или иные действия, например, читать почту или заниматься поиском информации в интернете.

При этом, чтобы открыть пользователю доступ к некоторым сайтам, VPN-сервер меняет IP-адрес, присвоенный ПК пользователя, на свой, что делает посещение закрытых сайтов анонимным.

Протоколы VPN-соединения

Основа любого VPN-сервиса – это VPN-протокол, который содержит протоколы передачи данных и стандарты шифрования информации для обмена ей с VPN-серверами. На сегодняшний день существует несколько VPN-протоколов:

  • PPTP (Point-to-Point Tunneling Protocol). Этот протокол поддерживается всеми ОС и нетребователен к вычислительным мощностям, однако он считается устаревшим и ненадежным. Поэтому им пользуются «за неимением лучшего»;
  • L2TP (Layer 2 Tunneling Protocol). Особенности этого протокола – требовательность к вычислительным ресурсам и отсутствие шифрования по умолчанию. Однако он применяется корпоративными пользователями при построении виртуальных сетей;
  • IPSec – Internet Protocol Security – группа протоколов, которые применяются для создания эффективного и безопасного соединения (чаще всего в сочетании с L2TP). Они имеют качественную архитектуру и надежные алгоритмы, но сложны в настройке и затратны в плане ресурсов. Но ресурсоемкость устраняется аппаратным ускорением с помощью алгоритма шифрования АЕС;
  • SSL – Secure Sockets Layer & TLS – Transport Layer Security – эти комплексы протоколов отличаются сложностью настройки, нуждаются в установке дополнительного ПО, имеют невысокую производительность, но свободно пропускаются разными публичными сетями. Такие протоколы чаще всего используются на сайтах с https в начале URL.
  • Протоколы IKEv2 и IKEv1 – это версии стандарта IKE (Internet Key Exchange или безопасный протокол управления ключами), которые используются для установки безопасного канала аутентификации связи между двумя устройствами. IKEv2 — это по сути дополненная более защищенная, стабильная и быстрая версия IKEv1. Протокол версии IKEv2 комбинирует агрессивный и основной режимы в одну последовательность из четырех сообщений, с целью простого и эффективного обмена данными.

Реализуются SSL и TLS в форматах OpenVPN (универсальный высоконадежный протокол с открытым кодом и поддержкой самых разных алгоритмов) и SSTP – оптимальное решение для пользователей Microsoft для преодоления большинства фаерволов.

Какой сервер нужен для VPN?

Для стабильной и непрерывной работы будущего VPN-сервера наилучшим решением будет выбор облачного провайдера с геораспределенной инфраструктурой. При выборе надежного облачного провайдера сервиса VPN стоит обращать внимание на следующие критерии:

  • функциональность предоставляемого гипервизора, от которой зависит производительность виртуальных машин. В перечень самых популярных гипервизоров входят VMware ESXi, Hyper-V от Microsoft, Citrix Xen и KVM OpenStack;
  • уровень предоставляемых услуг (SLA) – провайдер должен предоставить пользователю соглашение о SLA, в котором установлено время решения типовых и нетиповых запросов;
  • производительность дисковых подсистем, измеряемая в количестве операций ввода-вывода (IOPS) и в показателе уровня задержек при обращении (Latency);
  • надежность площадки размещения облачной платформы. Качество работы дата-центра должно подтверждаться сертификатами, выданными Uptime Institute: Tier Certification of Constructed Data Center Facility; Tier Certification of Data Center Design Documents; Tier Certification of Data Center Operational Sustainability.
  • качество работы службы поддержки. Сопровождение виртуальной инфраструктуры должно включать: обработку запросов на обслуживание (которая оценивается по заявленным параметрам – времени реакции, максимальным срокам обработки типового запроса и решения инцидента); управление изменениями, которое предусматривает их проработку, тестирование и внесение с минимальными рисками нарушений уровня предоставляемых услуг; управление инцидентами в режиме 24/7/365, с оповещением клиента о проведении работ и устранении проблемы;
  • профиль деятельности компании. В качестве поставщика услуг VPN-серверов могут выступать не только облачные провайдеры, но и дата-центры, системные интеграторы и телеком-провайдеры;
  • модельный ряд, классы и производители оборудования, которое предоставляется сервис-провайдером. Важно, чтобы оборудование относилось к enterprise-решениям и было отказоустойчивым и качественным. Также, должны быть продублированы все блоки питания и охлаждения серверов, СХД и устройства сетевого оборудования. Ресурсы серверов (тактовая частота CPU в GHz, объемы RAM в Gb и объемы требуемой дисковой памяти в Gb) рассчитываются на скачки уровней потребления.

Перед заключением договора на аренду виртуального VPN-сервера следует не только ознакомиться с соглашением SLA, но и выполнить тестирование инфраструктуры.

В качестве хорошего примера, рекомендуем обратить внимание на компанию ProCloud с очень удобным личным кабинетом, который позволит быстро и просто развернуть сервер любого уровня в Европе и США, но главное, что оплата возможна в рублях.

Интерфейс создания сервера сервис-провайдера ProCloud

Так выглядит интерфейс выбора размещения облачного сервера облачного провайдера ProCloud.

Ставим OpenVPN-сервер на CentOS 7

Шаг 1. Установка OpenVPN

1. Обновите репозиторий и пакеты CentOS выполнив команду в консоли:

yum update -y

2. Вы не сможете загрузить OpenVPN из репозитория CentOS, который идёт по умолчанию, но если мы установим расширенный репозиторий EPEL (Extra Packages for Enterprise Linux), то такая возможность появится. Чтобы установить EPEL, введите в консоли:

yum install epel-release -y

3. Снова обновите CentOS:

yum update -y

4. Теперь вы можете установить OpenVPN с помощью команды:

yum install -y openvpn

Шаг 2. Установка Easy RSA

1. Следующий шаг – это создание Public Key Infrastructure (PKI). Для этого необходимо установить Easy RSA, утилиту CLI для создания и управления PKI Certificate Authority (CA).

2. Easy RSA помогает настраивать internal certificate authority (CA) и сгенерировать пары SSL ключей для защиты VPN-соединений.

3. Установите easy RSA, используя команду wget. Если в системе CentOS отсутствует “wget”, запустите через команду:

yum install -y wget

4. Установите последнюю версию CLI (убедиться, что ваша версия актуальная можно на github.com. В качестве примера для данной статьи мы взяли CLI версии 3.0.8. По итогу получается следующая строка:

wget https://github.com/OpenVPN/easy-rsa/archive/v3.0.8.tar.gz

5. Далее распакуйте скачанный архив:

tar -xf v3.0.8.tar.gz

6. Создайте и перейдите в новый каталог openvpn:

cd /etc/openvpn/

Затем в каталоге “openvpn” создайте подкаталог “easy-rsa”. Перенесите извлеченный каталог в /etc/openvpn/easy-rsa. У вас должна получится следующая строка:

mv /root/easy-rsa-3.0.8 /etc/openvpn/easy-rsa

Чтобы убедиться, все ли вы успешно переместили из каталога easy-rsa-3.0.8, перейдите в easy-rsa с помощью команды cd /etc/openvpn/easy-rsa и выведите содержимое с помощью ls. Вы должны увидеть список файлов и папок, как на изображении ниже.

Шаг 3. Настройка OpenVPN

После установки OpenVPN и Easy RSA, вы можете переходить к настройке сервера OpenVPN. Далее мы расскажем о настройке базовой конфигурации.

Прежде чем запускать какие-либо команды, убедитесь что вернулись в корневой каталог. Для этого введите cd в окне терминала и нажмите Enter.

1. Начать настройку необходимо с копирования шаблона файла server.conf из каталога документации OpenVPN:

cp /usr/share/doc/openvpn-2.4.9/sample/sample-config-files/server.conf /etc/openvpn

Если не удается найти шаблон файла конфигурации OpenVPN, можно для поиска воспользоваться командой find.

2. Затем откройте скопированный файл конфигурации в любом удобном текстовом редакторе, например Nano или Vim:

vi etc/openvpn/server.conf

Команда открывает шаблон файла конфигурации OpenVPN. Комментарии в файле начинаются с хэштега # или точки с запятой.

Чтобы настроить базовые конфигурации, необходимо раскомментировать следующие строки, удалив точки с запятой:

  • topology subnet (делает установку OpenVPN как подсеть);
  • push "redirect-gateway def1 bypass-dhcp" (указывает клиенту перенаправить трафик через OpenVPN);
  • push "dhcp-option DNS 208.67.222.222" (использование преобразователя OpenDNS для подключения OpenVPN);
  • push "dhcp-option DNS 208.67.220.220" (использование преобразователя OpenDNS для подключения OpenVPN);
  • user nobody (запуск OpenVPN без привилегий);
  • group nobody (запуск OpenVPN без привилегий).

Затем сгенерируйте статический ключ шифрования, чтобы включить аутентификацию TLS. Для этого найдите строку tls-auth ta.key 0 и закомментируйте ее, добавив ; перед ним. Затем добавьте новую строку под ним: tls-crypt myvpn.tlsauth.

Примечание: файл конфигурации указывает, какие DNS-серверы использовать для подключения к OpenVPN. По умолчанию он настроен на использование преобразователей OpenDNS. В качестве альтернативы вы можете изменить его на другие преобразователи DNS, изменив строки push «dhcp-option DNS 208.67.222.222» и push «dhcp-option DNS 208.67.220.220

Сохраните и выйдите из файла конфигурации. Наконец, сгенерируйте статический ключ шифрования, указанный в файле, с помощью команды:

openvpn --genkey --secret /etc/openvpn/myvpn.tlsauth

Шаг 4. Создание ключей и сертификатов

1. Создайте файл конфигурации vars, используя vars.example, хранящийся в каталоге /easy-rsa/easyrsa3. Перейдите в указанный каталог с помощью:

cd /etc/openvpn/easy-rsa/easyrsa3

2. Вы можете просмотреть содержимое, используя команду ls, чтобы проверить, есть ли у вас файл vars.example.

3. Скопируйте образец файла vars.example под именем vars:

cp vars.example vars

Если снова просмотреть файлы в каталоге, в нем будет отдельный файл vars, который можно использовать для настройки Easy RSA.

4. Откройте файл vars (vi vars) в текстовом редакторе. Прокрутите файл и найдите строки, перечисленные ниже:

#set_var EASYRSA_REQ_COUNTRY "Russia"
#set_var EASYRSA_REQ_PROVINCE "Moscow District"
#set_var EASYRSA_REQ_CITY "Moscow"
#set_var EASYRSA_REQ_ORG "Certificate Company"
#set_var EASYRSA_REQ_EMAIL "[email protected]"
#set_var EASYRSA_REQ_OU "Orgname"

5. Раскомментируйте строки, удалив #, и замените значения по умолчанию своей информацией. Затем найдите строку the KEY_NAME и измените на "server": export KEY_NAME="server".

6. Наконец измените KEY_CN на домен или поддомен, разрешенный вашему сервису. Сохраните и закройте файл. Очистите все предыдущие ключи и создайте центр сертификации:

./easyrsa clean-all.

7. Теперь вы можете перейти к созданию центра сертификации с помощью скрипта build-ca. Запустите команду:

./easyrsa build-ca

Вам будет предложено установить CA Key Passphrase и общее имя для CA. Примечание: чтобы пропускать каждый раз аутентификацию при подписании своих сертификатов, можно использовать команду:

./easyrsa build-ca nopass

8. Создайте ключ и сертификат для сервера:

./easyrsa build-server-full server

9. Далее сгенерируйте файл обмена ключами Diffie-Hellman выполнив следующую команду:

./easyrsa gen-dh

10. Для каждого клиента будет необходим сертификат. Его можно сгенерировать на сервере или скопировать on the client machine. В следующей команде мы создадим сертификат и ключ для client1, но можно изменять команду используя другое имя:

./easyrsa build-client-full client1

11. После того, как вы сгенерировали ключи и сертификаты, скопируйте их из pki в каталог openvpn. Для этого перейдите в каталог pki, запустив команду:

cd /etc/openvpn/easy-rsa/easyrsa3/pki

Необходимо скопировать 4 файла: ca.crt, dh.pem, ca.key, server.key. Первые два файла (ca.crt и dh.pem) хранятся в каталоге pki, остальные( ca.key и server.key) в подкаталоге pki/private. Поэтому сначала в каталог “openvpn” нужно скопировать ca.crt и dh.pem:

cp ca.crt dh.pem /etc/openvpn

Затем перейти в подкаталог “private” и скопировать ca.key, server.key выполнив команды:

cd private и cp ca.key server.key/etc/openvpn

Шаг 5. Firewall и конфигурация маршрутизации

Установка Firewall Deamon

В случае, если на Вашей ОС отсутствует Firewall Deamon, то необходимо ввести команды:

sudo yum install firewalld

После установки firewalld вам необходимо выполнить следующие команды, для того, чтобы при запуске сервера Firewall был автоматически запущен:

sudo systemctl enable firewalld

sudo reboot

Теперь мы можем приступить к установке правил firewalld.

Установка правил Firewall

1. Начните с проверки активной зоны firewalld:

firewall-cmd --get-active-zones

Результат покажет вашу зону firewalld.

2. Добавляем службу openvpn в список служб firewalld, разрешенных в пределах активной зоны. Активная зона в данном примере является общедоступной:

firewall-cmd --zone=public --add-service openvpn

Если активная зона является доверенной, нужно изменить команду.

3. Далее вышеуказанные настройки необходимо сделать постоянными, выполнив команду:

firewall-cmd --zone=public --add-service openvpn --permanent

4. Чтобы убедится, что openvpn добавлен, используйте команду:

firewall-cmd --list-services --zone=public

5. Затем добавить masquerade в шаблон периода выполнения:

firewall-cmd --add-masquerade

После сделать его постоянным:

firewall-cmd --add-masquerade --permanent

Проверяем, чтобы “masquerade” был добавлен: firewall-cmd --query-masquerade. На выходе должен быть ответ “yes”.

Конфигурация маршрутизации

После завершения установки правил Firewall, можно переходить к маршрутизации подсети OpenVPN.

1. Создать переменную для интерфейса личной сети, используемый вашим сервером. В приведенном ниже примере переменная – VAR. При этом вы можете создать другое имя переменной:

VAR=$(ip route get 208.67.222.222 | awk 'NR==1 {print $(NF-2)}')

2. Затем добавляем правило маршрутизации, используя созданную выше переменную:

firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $VAR -j MASQUERADE

3. Перезагрузите firewalld, чтобы произошли изменения:

firewall-cmd --reload

4. Переносим весь веб-трафик от клиента на IP-адрес сервиса для включения IP-передачи. Открываем файл the sysctl.conf: vi /etc/sysctl.conf.

5. Добавляем следующую строку в начале файла:

net.ipv4.ip_forward = 1

6. Перезапускаем сервис:

systemctl restart network.service

Шаг 6. Запуск OpenVPN

1. Для запуска OpenVPN нужно выполнить следующую команду:

systemctl -f start [email protected]

2. Затем активируйте, чтобы начать загрузку при выполнении команды:

systemctl -f enable [email protected]

3. Убедитесь, что сервис активен при помощи команды:

systemctl status [email protected]

По результату проверки, будет указано, что OpenVPN активен (запущен).

Шаг 7: Настройте OpenVPN Client

Когда все настроено на сервере OpenVPN, вы можете настроить свой client machine и подключить его к серверу.

Как упоминалось на шаге 4, на каждом client machine должны быть локальные копии сертификата CA, клиентского ключа, SSL-сертификата и ключа шифрования.

1. Найдите и скопируйте следующие файлы с сервера на клиентский компьютере:

/etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt
/etc/openvpn/easy-rsa/easyrsa3/pki/client.crt
/etc/openvpn/easy-rsa/easyrsa3/pki/private/client.key
/etc/openvpn/myvpn.tlsauth

2. Затем создайте файл конфигурации для клиента OpenVPN под именем client.ovpn на клиентском компьютере:

vi client.ovpn

3. Добавьте в файл следующее содержимое:

client
tls-client
ca /path/to/ca.crt
cert /path/to/client.crt
key /path/to/client.key
remote-cert-eku "TLS Web Client Authentication"
proto udp
remote your_server_ip 1194 udp
dev tun
topology subnet
pull
user nobody
group nobody

Обязательно замените выделенные жирным шрифтом части вашими выбранными значениями.

4. Сохраните и закройте файл.

Шаг 8: Подключите клиента к OpenVPN

Инструкции по подключению к OpenVPN различаются в зависимости от операционной системы вашего клиентского компьютера.

Для Пользователей Linux

Чтобы подключиться к OpenVPN, выполните команду:

openvpn --config /path/to/client.ovpn

Для Пользователей Windows

1. Сначала скопируйте конфигурационный файл client.ovpn в каталог C:Program FilesOpenVPNconfig.

2. Загрузите и установите приложение OpenVPN. Вы можете найти последнюю версию OpenVPN Community Downloads page. После того как вы установили приложение, запустите OpenVPN.

3. Щелкните правой кнопкой мыши значок OpenVPN в системном блоке и выберите Подключиться. Для выполнения этой задачи вам необходимы права администратора.

Для пользователей macOS

Вы можете подключиться к OpenVPN из системы macOS с помощью Tunnelblick (графический пользовательский интерфейс с открытым исходным кодом для OpenVPN в OS X и macOS).

Перед запуском Tunnelblick убедитесь, что файл конфигурации client.ovpn сохранен в каталоге ~/Library/Application Support/Tunnelblick/Configuration.

Готовое решение OpenVPN Road Warrior

В случае, если нужно потратить минимум времени на настройку VPN, предлагаем готовое решение: подключаетесь к серверу и отправляете ему команды через программу Putty.

Когда программа Putty скачается и запустится, в поле Host Name (вкладка Session) нужно ввести IP-адрес, полученный от провайдера, и нажать Open. После того, как выйдет предупреждение об опасности и будет выбран вариант «Да», запустится консоль для отправки команд серверу. Прежде чем начать с ней работу, потребуется ввести логин root (он набирается вручную) и пароль, также присланный хостером (в некоторых случаях возможна авторизация по SSH-ключу). Пароль вставляется в консоль кликом правой кнопки и нажатием Enter.

OpenVPN Road Warrior

Так выглядит поле с информацией для подтверждения прохождения авторизации

Появление информации о системе или номера сервера подтвердит прохождение авторизации.

Для самой настройки VPN можно использовать готовый скрипт OpenVPN Road Warrior, который продолжает поддерживать подключение даже при перебоях в работе VPN‑сервисов.

Если у вас не установлен wget, то нужно его установить с помощью команды:

sudo yum install wget

Если установлен, то пропустите этот шаг и перейдите сразу к скачиванию и установке OpenVPN RW с помощью команды:

wget https://git.io/vpn -O openvpn‑install.sh && bash openvpn‑install.sh

Эта команда станет запуском диалога с мастером настройки, который поможет выбрать оптимальные варианты выбора (они подтверждаются через Enter). Порядок работы будет такой:

  • следует проверить, совпадает ли предложенный IP‑адрес с полученным от хостера;
  • протокол остается по умолчанию – UPD;
  • Port:1194 – подтвердить;
  • выбор DNS будет Google, цифру 1 надо заменить на 3 и нажать Enter;
  • имя пользователя можно оставить просто как client;

Press any key – нужно еще раз нажать Enter и дождаться завершения настройки.

OpenVPN Road Warrior

Установка готового решения от OpenVPN Road Warrior

Когда настройка закончится, понадобится создать файл для подключения к VPN. Для этого вводится команда

cat ~/client.ovpn

которая выведет на консоли содержимое файла. Выделить на экране следует все, что идет после этой команды и до /tls-auth. Выделенный фрагмент копируется в блокнот (Ctrl + V) и сохраняется на рабочий стол как файл client.ovpn.

Подключение к VPN

Так выглядит инофрмация в файле для подключения к VPN

Подключиться к серверу, используя созданный файл, возможно через клиент OpenVPN – эту программу нужно скачать и установить на компьютер, а запуск ее провести, щелкнув правой кнопкой по файлу client.ovpn и выбрав Start OpenVPN или можно запустить программу OpenVPN Client и выбрать файл с конфигурацией подключения:

Клиент OpenVPN

Интерфейс загрузки сертификата в клиенте OpenVPN для Windows

Успешное соединение отобразится как статус Initialization Sequence Completed, однако для надежности стоит еще раз сверить IP-адрес с полученным.

OpenVPN

После успешного соединения, в интерфейсе вы увидите статистику подключения и использования VPN-сервера

Итоги

После прочтения этой статьи вы должны были успешно настроить и запустить OpenVPN-сервер. Очень надеемся, что у вас удалось подключиться к вашему OpenVPN-серверу с клиентского компьютера Linux, Windows или macOS. А если вдруг не получилось, то пишите нам, мы поможем.