Как настроить и сконфигурировать сервер OpenVPN на Ubuntu

Введение

Виртуальная частная сеть (VPN) позволяет вам использовать недоверенные сети так, как если бы вы находились в частной сети. Она дает вам возможность безопасно и надежно выходить в интернет с вашего смартфона или ноутбука при подключении к недоверенной сети, например, Wi-Fi в отеле или кафе.

В сочетании с HTTPS-соединениями эта конфигурация позволяет защищать ваши беспроводные входы в систему и транзакции. Вы можете обходить географические ограничения и цензуру, а также скрывать ваше местоположение и любой незашифрованный HTTP-трафик от ненадежных сетей.

OpenVPN — это полнофункциональное, с открытым исходным кодом решение VPN на основе протокола Transport Layer Security (TLS), которое поддерживает широкий спектр конфигураций. В этом подробном руководстве вы научитесь настраивать OpenVPN на серверах Ubuntu (20.04, 22.04, 24.04 и 25.04), а затем конфигурировать его таким образом, чтобы его можно было использовать с клиентских устройств на различных платформах.

Почему OpenVPN? OpenVPN предлагает корпоративный уровень безопасности с сильным шифрованием, кроссплатформенную совместимость и многочисленные варианты настройки. Он особенно хорошо подходит для серверов Ubuntu благодаря отличной интеграции с экосистемой Linux и надежным функциям безопасности.

Основные выводы

Основные функции безопасности для сервера OpenVPN:

  • Криптография на эллиптических кривых (ECC): Современное шифрование с использованием меньших ключей для лучшей производительности
  • TLS-Crypt: Дополнительный уровень безопасности, который скрывает начальное рукопожатие и предотвращает атаки типа DoS
  • AES-256-GCM: Стандартизированное шифрование с аутентифицированным шифрованием для обеспечения целостности данных
  • Аутентификация на основе сертификатов: инфраструктура PKI гарантирует, что подключаться могут только авторизованные клиенты

Оптимизация производительности сервера OpenVPN:

  • Протокол UDP: Порт по умолчанию 1194 для оптимальной производительности (TCP на порту 443 для ограничительных сетей)
  • IP-перенаправление: Позволяет маршрутизировать трафик через VPN-туннель
  • Интеграция UFW: Упрощённое управление брандмауэром с использованием правил маскирования

Лучшие практики для сервера OpenVPN:

  • Отдельный сервер CA: Повышенная безопасность за счет выделенного центра сертификации
  • Скрипты настройки клиента: Автоматическая генерация файлов .ovpn для удобного развертывания
  • Аннулирование сертификата: управление доступом на основе CRL для скомпрометированных учетных данных
  • Защита от утечки DNS: необязательная переадресация DNS через VPN-туннель

Примечание: Если вы планируете настроить сервер OpenVPN на Droplet от Linux-Console.net, имейте в виду, что мы, как и многие хостинг-провайдеры, взимаем плату за превышение трафика. По этой причине, пожалуйста, следите за тем, сколько трафика обрабатывает ваш сервер.

Смотрите эту страницу для получения дополнительной информации.

На Linux-Console.net есть VPN-приложения с одним кликом, которые вы можете развернуть из нашего магазина Linux-Console.net.

Предварительные требования

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

  • Один сервер Ubuntu (22.04, 24.04 или 25.04) с пользователем, имеющим права sudo, но не root, и с включённым брандмауэром. Чтобы настроить это, вы можете следовать нашему руководству по первоначальной настройке сервера с Ubuntu (совместимо со всеми версиями Ubuntu). В течение этого руководства мы будем называть его сервером OpenVPN.
  • Отдельный сервер Ubuntu, настроенный как частный центр сертификации (CA), который мы будем называть CA Server на протяжении всего этого руководства. После выполнения шагов из Руководства по первоначальной настройке сервера на этом сервере, вы можете следовать шагам 1–3 нашего руководства по Настройке и Конфигурации Центра Сертификации (CA) на Ubuntu, чтобы выполнить это.

Совместимость с версиями Ubuntu: Этот учебник протестирован и совместим с Ubuntu 22.04 LTS, Ubuntu 24.04 LTS и Ubuntu 25.04. Все команды и настройки работают на этих версиях с минимальными отличиями, где это применимо.

Примечание: Хотя технически возможно использовать ваш OpenVPN сервер или локальную машину в качестве вашего УЦ (Центра сертификации), это не рекомендуется, так как открывает ваш VPN для некоторых угроз безопасности. Согласно официальной документации OpenVPN, ваш УЦ должен находиться на отдельной машине, предназначенной для импорта и подписания запросов на сертификаты. По этой причине в данном руководстве предполагается, что ваш УЦ находится на отдельном сервере с Ubuntu, на котором также есть пользователь без прав root с привилегиями sudo и включенным брандмауэром.

Кроме того, вам понадобится клиентская машина, с которой вы будете подключаться к вашему серверу OpenVPN. В этом руководстве мы будем называть её OpenVPN Клиент. Для целей этого туториала рекомендуется использовать вашу локальную машину в качестве OpenVPN клиента.

С этими предварительными условиями вы готовы начать настройку и конфигурацию сервера OpenVPN на Ubuntu.

Примечание: Обратите внимание, что если вы отключите аутентификацию по паролю при настройке этих серверов, у вас могут возникнуть трудности при последующей передаче файлов между ними в этом руководстве. Чтобы решить эту проблему, вы можете снова включить аутентификацию по паролю на каждом сервере. В качестве альтернативы, вы можете сгенерировать SSH-ключи для каждого сервера, а затем добавить публичный SSH-ключ сервера OpenVPN в файл authorized_keys на машине CA и наоборот. Смотрите руководство Как настроить SSH-ключи в Ubuntu (подходит для всех версий Ubuntu) для получения инструкций по выполнению любого из этих решений.

Шаг 1 — Установка OpenVPN и Easy-RSA

Первый шаг в этом руководстве — установить OpenVPN и Easy-RSA. Easy-RSA — это инструмент управления инфраструктурой открытых ключей (PKI), который вы будете использовать на сервере OpenVPN для создания запроса сертификата, который затем вы проверите и подпишете на сервере CA.

Для начала обновите индекс пакетов вашего OpenVPN-сервера и установите OpenVPN и Easy-RSA. Оба пакета доступны в стандартных репозиториях Ubuntu для всех поддерживаемых версий (20.04, 22.04, 24.04, 25.04), поэтому для установки можно использовать apt:

Примечания к версии Ubuntu:

  • Ubuntu 20.04/22.04: Использует OpenVPN 2.4.x со стандартным Easy-RSA 3.x
  • Ubuntu 24.04/25.04: Использует OpenVPN 2.6.x с Easy-RSA 3.x (улучшенные функции безопасности)
  • Все версии поддерживают один и тот же синтаксис конфигурации и команды, показанные в этом руководстве
  • Производительность: Ubuntu 24.04 и новее включает оптимизации ядра для лучшей работы VPN
  • Безопасность: Новые версии включают дополнительную поддержку шифров и улучшенную обработку TLS
  1. sudo apt update
  2. sudo apt install openvpn easy-rsa

 

Далее вам нужно создать новый каталог на сервере OpenVPN под вашей обычной учетной записью пользователя, называемый ~/easy-rsa:

mkdir ~/easy-rsa 

Теперь вам нужно будет создать символическую ссылку на скрипт easyrsa, который был установлен пакетом, в каталог ~/easy-rsa, который вы только что создали:

ln -s /usr/share/easy-rsa/* ~/easy-rsa/ 

Примечание: Хотя другие руководства могут рекомендовать копировать файлы пакета easy-rsa в ваш каталог PKI, в этом руководстве используется подход с символической ссылкой. В результате любые обновления пакета easy-rsa будут автоматически отражаться в скриптах вашего PKI.

Наконец, убедитесь, что владельцем каталога является ваш не-root пользователь с правами sudo, и ограничьте доступ к этому пользователю с помощью chmod:

  1. sudo chown sammy ~/easy-rsa
  2. chmod 700 ~/easy-rsa

 

После того как эти программы будут установлены и перемещены в правильные места на вашей системе, следующим шагом будет создание инфраструктуры открытых ключей (PKI) на сервере OpenVPN, чтобы вы могли запрашивать и управлять TLS-сертификатами для клиентов и других серверов, которые будут подключаться к вашей VPN.

Шаг 2 — Создание PKI для OpenVPN

Прежде чем вы сможете создать личный ключ и сертификат сервера OpenVPN, вам нужно создать локальный каталог инфраструктуры открытых ключей (PKI) на вашем сервере OpenVPN. Вы будете использовать этот каталог для управления запросами сертификатов сервера и клиентов, вместо того чтобы создавать их напрямую на вашем сервере удостоверяющего центра (CA).

Чтобы создать каталог PKI на вашем сервере OpenVPN, необходимо заполнить файл под названием vars некоторыми значениями по умолчанию. Сначала перейдите в каталог easy-rsa с помощью команды cd, затем создайте и отредактируйте файл vars, используя nano или любой предпочитаемый текстовый редактор.

  1. cd ~/easy-rsa
  2. nano vars

 

После того как файл открыт, вставьте следующие две строки:

set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512" 

Это единственные две строки, которые вам нужны в этом файле vars на вашем сервере OpenVPN, так как он не будет использоваться как центр сертификации. Они обеспечат настройку ваших приватных ключей и запросов сертификатов с использованием современной эллиптической кривой криптографии (ECC) для генерации ключей и безопасных подписей для ваших клиентов и сервера OpenVPN.

Настройка ваших серверов OpenVPN и CA для использования ECC означает, что когда клиент и сервер пытаются установить общий симметричный ключ, они могут использовать алгоритмы на эллиптических кривых для его обмена. Использование ECC для обмена ключами значительно быстрее, чем применение обычного Диффи-Хеллмана с классическим алгоритмом RSA, поскольку числа значительно меньше, а вычисления происходят быстрее.

Фон: Когда клиенты подключаются к OpenVPN, они используют асимметричное шифрование (также известное как шифрование с открытым/закрытым ключом) для выполнения TLS-рукопожатия. Однако при передаче зашифрованного трафика VPN сервер и клиенты используют симметричное шифрование, также известное как шифрование с общим ключом.

Симметричное шифрование требует значительно меньше вычислительных ресурсов по сравнению с асимметричным: используемые числа гораздо меньше, а современные процессоры интегрируют инструкции для выполнения оптимизированных операций симметричного шифрования. Для перехода от асимметричного к симметричному шифрованию сервер и клиент OpenVPN используют алгоритм Диффи-Хеллмана на эллиптических кривых (ECDH), чтобы как можно быстрее согласовать общий секретный ключ.

После того как вы заполнили файл vars, вы можете перейти к созданию каталога PKI. Для этого выполните скрипт easyrsa с опцией init-pki. Хотя вы уже запускали эту команду на сервере CA в рамках предварительных требований, необходимо выполнить её здесь, так как сервер OpenVPN и сервер CA имеют отдельные каталоги PKI:

./easyrsa init-pki 

Обратите внимание, что на вашем сервере OpenVPN нет необходимости создавать центр сертификации. Ваш сервер CA отвечает исключительно за проверку и подпись сертификатов. PKI на вашем VPN-сервере используется только как удобное и централизованное место для хранения запросов на сертификаты и публичных сертификатов.

После того как вы инициализировали вашу инфраструктуру PKI на сервере OpenVPN, вы готовы перейти к следующему шагу, а именно к созданию запроса на сертификат сервера OpenVPN и закрытого ключа.

Шаг 3 — Создание запроса на сертификат сервера OpenVPN и закрытого ключа

Теперь, когда на вашем сервере OpenVPN установлены все необходимые компоненты, следующим шагом будет создание приватного ключа и запроса на подпись сертификата (CSR) на вашем сервере OpenVPN. После этого вы передадите запрос вашему центр сертификации (CA) для подписания, создавая необходимый сертификат. После того как у вас будет подписанный сертификат, вы передадите его обратно на сервер OpenVPN и установите для использования сервером.

Для начала перейдите в директорию ~/easy-rsa на вашем сервере OpenVPN под пользователем без прав root:

cd ~/easy-rsa 

Теперь вы вызовете easyrsa с опцией gen-req, за которой следует общее имя (CN) для машины. CN может быть любым на ваш выбор, но полезно сделать его описательным. На протяжении этого руководства CN сервера OpenVPN будет server. Обязательно включите также опцию nopass. В противном случае файл запроса будет защищен паролем, что может позже привести к проблемам с разрешениями.

Примечание: Если вы выберете имя, отличное от server, вам придется изменить некоторые инструкции ниже. Например, при копировании сгенерированных файлов в каталог /etc/openvpn вам придется подставить правильные имена. Также позже вам потребуется изменить файл /etc/openvpn/server.conf, чтобы указать правильные файлы .crt и .key.

./easyrsa gen-req server nopass 
Common Name (eg: your user, host, or server name) [server]:   Keypair and certificate request completed. Your files are: req: /home/sammy/easy-rsa/pki/reqs/server.req key: /home/sammy/easy-rsa/pki/private/server.key 

Это создаст приватный ключ для сервера и файл запроса на сертификат с названием server.req. Скопируйте ключ сервера в директорию /etc/openvpn/server:

sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/ 

После выполнения этих шагов вы успешно создали закрытый ключ для вашего сервера OpenVPN. Вы также сгенерировали запрос на подпись сертификата (CSR) для сервера OpenVPN. Теперь CSR готов к подписанию вашим центром сертификации (CA). В следующем разделе этого руководства вы узнаете, как подписать CSR с помощью закрытого ключа вашего сервера CA.

Шаг 4 — Подписание запроса на сертификат сервера OpenVPN

На предыдущем этапе вы создали запрос на подпись сертификата (CSR) и приватный ключ для сервера OpenVPN. Теперь сервер УЦ (Центра Сертификации) должен узнать о сертификате server и проверить его. После того как УЦ проверит и передаст сертификат обратно серверу OpenVPN, клиенты, доверяющие вашему УЦ, смогут также доверять серверу OpenVPN.

На сервере OpenVPN, от имени вашего пользователя без прав root, используйте SCP или другой метод передачи для копирования запроса на сертификат server.req на сервер CA для подписи:

scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp 

Если вы выполнили предварительное руководство «Как настроить и сконфигурировать центр сертификации (CA) на Ubuntu 20.04», следующим шагом будет вход на сервер CA под непривилегированным пользователем, которого вы создали для управления вашим CA. Затем вы перейдёте с помощью команды cd в каталог ~/easy-rsa, где создавали свой PK, и импортируете запрос на сертификат с помощью скрипта easyrsa:

  1. cd ~/easy-rsa
  2. ./easyrsa import-req /tmp/server.req server

 

. . . The request has been successfully imported with a short name of: server You may now use this name to perform signing operations on this request. 

Далее подпишите запрос, запустив скрипт easyrsa с опцией sign-req, затем укажите тип запроса и общее имя (Common Name). Тип запроса может быть либо client, либо server. Поскольку мы работаем с запросом сертификата сервера OpenVPN, обязательно используйте тип запроса server:

./easyrsa sign-req server server 

В выводе вам будет предложено подтвердить, что запрос поступает из доверенного источника. Введите yes, затем нажмите ENTER, чтобы подтвердить:

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 3650 days:   subject= commonName = server     Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt 

Обратите внимание, что если вы зашифровали свой закрытый ключ CA, на этом этапе вам будет предложено ввести ваш пароль.

После выполнения этих шагов вы подписали запрос сертификата сервера OpenVPN с использованием приватного ключа сервера CA. Полученный файл server.crt содержит публичный ключ шифрования сервера OpenVPN, а также подпись от сервера CA. Цель подписи заключается в том, чтобы сообщить всем, кто доверяет серверу CA, что они также могут доверять серверу OpenVPN при подключении к нему.

Чтобы завершить настройку сертификатов, скопируйте файлы server.crt и ca.crt с сервера CA на сервер OpenVPN:

  1. scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
  2. scp pki/ca.crt sammy@your_vpn_server_ip:/tmp

 

Теперь вернитесь на ваш сервер OpenVPN и скопируйте файлы из /tmp в /etc/openvpn/server:

sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server 

Теперь ваш сервер OpenVPN почти готов принимать подключения. На следующем этапе вы выполните дополнительные действия для повышения безопасности сервера.

Шаг 5 — Настройка криптографических материалов OpenVPN

Для дополнительного уровня безопасности мы добавим дополнительный общий секретный ключ, который сервер и все клиенты будут использовать с директивой OpenVPN tls-crypt. Этот параметр используется для сокрытия TLS-сертификата, который используется при первоначальном подключении сервера и клиента друг к другу. Он также используется сервером OpenVPN для быстрой проверки входящих пакетов: если пакет подписан с использованием предварительно установленного общего ключа, сервер обрабатывает его; если он не подписан, сервер понимает, что источник ненадежен, и может отбросить пакет без выполнения дополнительной работы по расшифровке.

Эта опция поможет обеспечить способность вашего сервера OpenVPN справляться с неаутентифицированным трафиком, сканированием портов и атаками типа «отказ в обслуживании», которые могут загружать ресурсы сервера. Она также затрудняет идентификацию сетевого трафика OpenVPN.

Чтобы сгенерировать предварительно общий ключ tls-crypt, выполните следующее на сервере OpenVPN в каталоге ~/easy-rsa:

  1. cd ~/easy-rsa
  2. openvpn —genkey —secret ta.key

 

Результатом будет файл с именем ta.key. Скопируйте его в директорию /etc/openvpn/server/:

sudo cp ta.key /etc/openvpn/server 

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

Шаг 6 — Генерация клиентского сертификата и пары ключей

Хотя вы можете сгенерировать приватный ключ и запрос на сертификат на вашем клиентском устройстве и затем отправить их в ЦС для подписи, в этом руководстве описан процесс генерации запроса на сертификат на сервере OpenVPN. Преимущество этого подхода заключается в том, что мы можем создать скрипт, который автоматически будет генерировать файлы конфигурации клиента, содержащие все необходимые ключи и сертификаты. Это позволяет избежать передачи ключей, сертификатов и файлов конфигурации клиентам и упрощает процесс подключения к VPN.

Мы сгенерируем одну пару ключа и сертификата клиента для этого руководства. Если у вас несколько клиентов, вы можете повторить этот процесс для каждого из них. Учтите, однако, что для каждого клиента необходимо будет передавать уникальное значение имени в скрипт. В течение этого руководства первая пара сертификат/ключ называется client1.

Начните с создания структуры каталогов в вашем домашнем каталоге для хранения файлов клиентского сертификата и ключа:

mkdir -p ~/client-configs/keys 

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

chmod -R 700 ~/client-configs 

Затем вернитесь в каталог EasyRSA и запустите скрипт easyrsa с параметрами gen-req и nopass, указав общее имя клиента:

  1. cd ~/easy-rsa
  2. ./easyrsa gen-req client1 nopass

 

Нажмите ENTER, чтобы подтвердить общее имя. Затем скопируйте файл client1.key в каталог ~/client-configs/keys/, который вы создали ранее:

cp pki/private/client1.key ~/client-configs/keys/ 

Далее перенесите файл client1.req на ваш сервер CA с использованием безопасного метода:

scp pki/reqs/client1.req sammy@your_ca_server_ip:/tmp 

Теперь войдите в ваш CA сервер. Затем перейдите в каталог EasyRSA и импортируйте запрос на сертификат:

  1. cd ~/easy-rsa
  2. ./easyrsa import-req /tmp/client1.req client1

 

Затем подпишите запрос так же, как вы делали для сервера на предыдущем шаге. На этот раз, однако, убедитесь, что указали тип запроса client:

./easyrsa sign-req client client1 

Когда будет предложено, введите yes, чтобы подтвердить, что вы намерены подписать запрос на сертификат и что он поступил из доверенного источника:

Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes 

Опять же, если вы зашифровали свой ключ CA, здесь вас попросят ввести ваш пароль.

Это создаст файл клиентского сертификата с именем client1.crt. Перенесите этот файл обратно на сервер:

scp pki/issued/client1.crt sammy@your_server_ip:/tmp 

На вашем сервере OpenVPN скопируйте клиентский сертификат в каталог ~/client-configs/keys/:

cp /tmp/client1.crt ~/client-configs/keys/ 

Далее скопируйте файлы ca.crt и ta.key в каталог ~/client-configs/keys/, а также установите соответствующие разрешения для вашего пользователя с правами sudo:

  1. cp ~/easy-rsa/ta.key ~/client-configs/keys/
  2. sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
  3. sudo chown sammy.sammy ~/client-configs/keys/*

 

С этим ваши сертификаты и ключи сервера и клиента были сгенерированы и сохранены в соответствующих директориях на вашем сервере OpenVPN. С этими файлами еще предстоят некоторые действия, но они будут выполнены на следующем этапе. Пока же вы можете перейти к настройке OpenVPN.

Шаг 7 — Настройка OpenVPN

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

Сначала скопируйте пример файла server.conf в качестве отправной точки для вашего собственного конфигурационного файла:

  1. sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
  2. sudo gunzip /etc/openvpn/server/server.conf.gz

 

Откройте новый файл для редактирования с помощью текстового редактора по вашему выбору. В нашем примере мы будем использовать nano:

sudo nano /etc/openvpn/server/server.conf 

Нам нужно изменить несколько строк в этом файле. Сначала найдите раздел HMAC в конфигурации, ищя директиву tls-auth. Эта строка будет включена по умолчанию. Закомментируйте её, добавив ; в начале строки. Затем добавьте новую строку после неё, содержащую только значение tls-crypt ta.key:

;tls-auth ta.key 0 # This file is secret tls-crypt ta.key 

Далее найдите раздел о криптографических шифрах, ища строки с cipher. Значение по умолчанию установлено на AES-256-CBC, однако шифр AES-256-GCM обеспечивает более высокий уровень шифрования, лучшую производительность и хорошо поддерживается в актуальных клиентах OpenVPN. Мы закомментируем значение по умолчанию, добавив знак ; в начале этой строки, а затем добавим другую строку после неё с обновлённым значением AES-256-GCM:

Улучшение в Ubuntu 24.04/25.04: Эти новые версии Ubuntu включают поддержку аппаратного ускорения для шифрования AES-GCM, обеспечивая до 30% лучшую производительность по сравнению с более старыми версиями.

;cipher AES-256-CBC cipher AES-256-GCM 

Сразу после этой строки добавьте директиву auth, чтобы выбрать алгоритм хэширования сообщений HMAC. Для этого SHA256 является хорошим выбором:

auth SHA256 

Далее найдите строку, содержащую директиву dh, которая задает параметры Диффи-Хеллмана. Так как мы настроили все сертификаты на использование криптографии с эллиптическими кривыми, файл сидера Диффи-Хеллмана не требуется. Закомментируйте существующую строку, которая выглядит как dh dh2048.pem или dh dh.pem. Имя файла для ключа Диффи-Хеллмана может отличаться от того, что указано в примере файла конфигурации сервера. Затем добавьте строку после нее со следующим содержимым: dh none:

;dh dh2048.pem dh none 

Далее мы хотим, чтобы OpenVPN работал без привилегий после запуска, поэтому нам нужно указать ему выполняться от имени пользователя nobody и группы nogroup. Чтобы это включить, найдите и раскомментируйте строки user nobody и group nogroup, удалив знак ; в начале каждой строки:

user nobody group nogroup 

(Необязательно) Применить изменения DNS для перенаправления всего трафика через VPN

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

Чтобы начать, найдите и раскомментируйте строку, содержащую push "redirect-gateway def1 bypass-dhcp". Это укажет вашему клиенту перенаправлять весь трафик через ваш OpenVPN сервер. Учтите, что включение этой функции может вызвать проблемы с подключением к другим сетевым службам, таким как SSH:

push "redirect-gateway def1 bypass-dhcp" 

Ниже этой строки найдите раздел dhcp-option. Снова удалите ; в начале обеих строк, чтобы раскомментировать их:

push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" 

Эти строки скажут вашему клиенту использовать бесплатные резолверы OpenDNS по указанным IP-адресам. Если вы предпочитаете другие DNS-резолверы, вы можете заменить их вместо выделенных IP-адресов.

Это поможет клиентам перенастроить свои DNS-настройки для использования VPN-туннеля в качестве шлюза по умолчанию.

(Необязательно) Настройте порт и протокол

По умолчанию сервер OpenVPN использует порт 1194 и протокол UDP для приема подключений клиентов. Если вам необходимо использовать другой порт из-за ограничений сетевой среды, в которой могут находиться ваши клиенты, вы можете изменить параметр port. Если вы не размещаете веб-контент на своем сервере OpenVPN, порт 443 является популярным вариантом, так как он обычно разрешен правилами брандмауэра.

Чтобы изменить OpenVPN для прослушивания порта 443, откройте файл server.conf и найдите строку, которая выглядит так:

port 1194 

Отредактируйте это так, чтобы порт был 443:

# Optional! port 443 

Часто протокол также ограничен этим портом. Если это так, найдите строку proto ниже строки port и измените протокол с udp на tcp:

# Optional! proto tcp 

Если вы переключите протокол на TCP, вам потребуется изменить значение директивы explicit-exit-notify с 1 на 0, так как эта директива используется только с UDP. Несоблюдение этого при использовании TCP приведет к ошибкам при запуске службы OpenVPN.

Найдите строку explicit-exit-notify в конце файла и измените значение на 0:

# Optional! explicit-exit-notify 0 

Если вам не нужно использовать другой порт и протокол, лучше оставить эти настройки без изменений.

(Необязательно) Укажите учетные данные, отличные от установленных по умолчанию

Если вы выбрали другое имя при выполнении команды ./easyrsa gen-req server ранее, измените строки cert и key в конфигурационном файле server.conf, чтобы они указывали на соответствующие файлы .crt и .key. Если вы использовали имя по умолчанию, server, это уже настроено правильно:

cert server.crt key server.key 

Когда вы закончите, сохраните и закройте файл.

Вы завершили настройку общих параметров OpenVPN. На следующем шаге мы настроим сетевые параметры сервера.

Шаг 8 — Настройка сетевой конфигурации сервера OpenVPN

Есть некоторые аспекты настройки сети сервера, которые необходимо изменить, чтобы OpenVPN мог правильно маршрутизировать трафик через VPN. Первым из них является IP-перенаправление, метод определения того, куда должен направляться IP-трафик. Это необходимо для функционирования VPN, которое будет предоставлять ваш сервер.

Чтобы изменить настройку по умолчанию для пересылки IP на вашем сервере OpenVPN, откройте файл /etc/sysctl.conf с помощью nano или вашего предпочитаемого редактора:

sudo nano /etc/sysctl.conf 

Затем добавьте следующую строку в конец файла:

net.ipv4.ip_forward = 1 

Сохраните файл и закройте его, когда закончите.

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

sudo sysctl -p 
net.ipv4.ip_forward = 1 

Теперь ваш сервер OpenVPN сможет перенаправлять входящий трафик с одного Ethernet-устройства на другое. Эта настройка гарантирует, что сервер может направлять трафик от клиентов, подключающихся через виртуальный VPN-интерфейс, через другие физические Ethernet-устройства. Эта конфигурация будет маршрутизировать весь веб-трафик вашего клиента через IP-адрес вашего сервера, и публичный IP-адрес вашего клиента фактически будет скрыт.

На следующем этапе вам потребуется настроить некоторые правила брандмауэра, чтобы обеспечить правильный поток трафика к вашему серверу OpenVPN и от него.

Шаг 9 — Настройка брандмауэра

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

Предполагая, что вы выполнили предварительные требования в начале этого учебного пособия, у вас уже должен быть установлен и запущен ufw на вашем сервере. Чтобы разрешить OpenVPN через брандмауэр, вам потребуется включить маскарадирование — концепцию iptables, которая обеспечивает динамический сетевой транслятор адресов (NAT) на лету для корректной маршрутизации подключений клиентов. Для полного руководства по настройке UFW см. наше руководство «Как использовать UFW в качестве брандмауэра в Ubuntu».

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

ip route list default 

Ваш публичный интерфейс — это строка, найденная в выводе этой команды после слова «dev». Например, этот результат показывает интерфейс с именем eth0, который выделен ниже:

default via 159.65.160.1 dev eth0 proto static 

Когда у вас есть интерфейс, связанный с вашим маршрутом по умолчанию, откройте файл /etc/ufw/before.rules, чтобы добавить соответствующую конфигурацию:

sudo nano /etc/ufw/before.rules 

Правила UFW обычно добавляются с помощью команды ufw. Однако правила, указанные в файле before.rules, читаются и применяются до загрузки обычных правил UFW. В верхней части файла добавьте выделенные строки ниже. Это установит политику по умолчанию для цепочки POSTROUTING в таблице nat и замаскирует любой трафик, поступающий из VPN. Не забудьте заменить eth0 в строке -A POSTROUTING на интерфейс, который вы нашли в приведённой выше команде:

# # rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: #   ufw-before-input #   ufw-before-output #   ufw-before-forward #   # START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!) -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES   # Don't delete these required lines, otherwise there will be errors *filter . . . 

Сохраните файл и закройте его, когда закончите.

Далее вам нужно указать UFW разрешать пересылаемые пакеты по умолчанию. Для этого откройте файл /etc/default/ufw:

sudo nano /etc/default/ufw 

Внутри найдите директиву DEFAULT_FORWARD_POLICY и измените значение с DROP на ACCEPT:

DEFAULT_FORWARD_POLICY="ACCEPT" 

Сохраните файл и закройте его, когда закончите.

Далее настройте сам брандмауэр, чтобы разрешить трафик к OpenVPN. Если вы не изменяли порт и протокол в файле /etc/openvpn/server.conf, необходимо открыть UDP-трафик на порт 1194. Если вы изменили порт и/или протокол, замените их на значения, которые вы выбрали.

Если вы забыли добавить SSH-порт при выполнении предварительного руководства, добавьте его здесь также:

  1. sudo ufw allow 1194/udp
  2. sudo ufw allow OpenSSH

 

Примечание: Если вы используете другой файрвол или настроили UFW по своему усмотрению, возможно, вам потребуется добавить дополнительные правила файрвола. Например, если вы решите направлять весь сетевой трафик через VPN-соединение, необходимо убедиться, что трафик на порт 53 разрешен для DNS-запросов, а порты, такие как 80 и 443, — для HTTP и HTTPS соответственно. Если вы используете другие протоколы через VPN, также потребуется добавить для них соответствующие правила.

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

  1. sudo ufw disable
  2. sudo ufw enable

 

Ваш сервер теперь настроен для правильной обработки трафика OpenVPN. С установленными правилами брандмауэра мы можем запустить службу OpenVPN на сервере.

Шаг 10 — Запуск OpenVPN

OpenVPN работает как служба systemd, поэтому мы можем использовать systemctl для её управления. Мы настроим OpenVPN на автоматический запуск при загрузке, чтобы вы могли подключаться к вашему VPN в любое время, пока ваш сервер работает. Для этого включите службу OpenVPN, добавив её в systemctl:

sudo systemctl -f enable openvpn-server@server.service 

Затем запустите службу OpenVPN:

sudo systemctl start openvpn-server@server.service 

Дважды проверьте, что служба OpenVPN активна, с помощью следующей команды. В выводе вы должны увидеть active (running):

sudo systemctl status openvpn-server@server.service 
● openvpn-server@server.service - OpenVPN service for server      Loaded: loaded (/lib/systemd/system/openvpn-server@.service; enabled; vendor preset: enabled)      Active: active (running) since Wed 2020-04-29 15:39:59 UTC; 6s ago        Docs: man:openvpn(8)              https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage              https://community.openvpn.net/openvpn/wiki/HOWTO    Main PID: 16872 (openvpn)      Status: "Initialization Sequence Completed"       Tasks: 1 (limit: 1137)      Memory: 1.0M      CGroup: /system.slice/system-openvpnx2dserver.slice/openvpn-server@server.service              └─16872 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --c> . . . . . . Apr 29 15:39:59 ubuntu-20 openvpn[16872]: Initialization Sequence Completed 

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

Шаг 11 — Создание инфраструктуры конфигурации клиента

Создание конфигурационных файлов для клиентов OpenVPN может быть несколько сложным, так как каждый клиент должен иметь собственный файл конфигурации, который должен соответствовать настройкам, указанным в конфигурационном файле сервера. Вместо того чтобы писать один конфигурационный файл, который можно использовать только на одном клиенте, этот шаг описывает процесс создания инфраструктуры конфигурации клиента, с помощью которой вы сможете генерировать конфигурационные файлы на лету. Сначала вы создадите «базовый» конфигурационный файл, а затем разработаете скрипт, который позволит вам по мере необходимости создавать уникальные конфигурационные файлы клиентов, сертификаты и ключи.

Начните с создания новой директории, в которой вы будете хранить файлы конфигурации клиента, внутри директории client-configs, которую вы создали ранее:

mkdir -p ~/client-configs/files 

Далее скопируйте пример конфигурационного файла клиента в каталог client-configs, чтобы использовать его в качестве базовой конфигурации:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf 

Откройте этот новый файл с помощью nano или вашего предпочитаемого текстового редактора:

nano ~/client-configs/base.conf 

Внутри найдите директиву remote. Она указывает клиенту адрес вашего сервера OpenVPN — публичный IP-адрес вашего сервера OpenVPN. Если вы решили изменить порт, на котором сервер OpenVPN прослушивает подключения, вам также нужно будет заменить 1194 на выбранный вами порт:

. . . # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote your_server_ip 1194 . . . 

Убедитесь, что протокол соответствует значению, которое вы используете в настройках сервера:

proto udp 

Далее раскомментируйте директивы user и group, удалив знак ; в начале каждой строки:

# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup 

Найдите директивы, которые устанавливают ca, cert и key. Закомментируйте эти директивы, так как вы скоро добавите сертификаты и ключи непосредственно в файл:

# SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. ;ca ca.crt ;cert client.crt ;key client.key 

Аналогично, закомментируйте директиву tls-auth, так как вы добавите ta.key прямо в файл конфигурации клиента (а сервер настроен на использование tls-crypt):

# If a tls-auth key is used on the server # then every client must also have the key. ;tls-auth ta.key 1 

Отразите настройки cipher и auth, которые вы указали в файле /etc/openvpn/server/server.conf:

cipher AES-256-GCM auth SHA256 

Далее добавьте директиву key-direction где-нибудь в файле. Вы обязаны установить её в значение «1», чтобы VPN корректно работал на клиентской машине:

key-direction 1 

Наконец, добавьте несколько закомментированных строк для обработки различных методов разрешения DNS, которые используют VPN-клиенты на базе Linux. Вы добавите два похожих, но отдельных набора закомментированных строк. Первый набор предназначен для клиентов, которые не используют systemd-resolved для управления DNS. Эти клиенты полагаются на утилиту resolvconf для обновления информации о DNS для клиентов Linux.

; script-security 2 ; up /etc/openvpn/update-resolv-conf ; down /etc/openvpn/update-resolv-conf 

Теперь добавьте еще один набор строк для клиентов, которые используют systemd-resolved для разрешения DNS:

; script-security 2 ; up /etc/openvpn/update-systemd-resolved ; down /etc/openvpn/update-systemd-resolved ; down-pre ; dhcp-option DOMAIN-ROUTE . 

Сохраните файл и закройте его, когда закончите.

Позже, на Шаге 13 Установка конфигурации клиента этого руководства вы узнаете, как определить, как работает разрешение DNS на клиентах Linux и какой раздел нужно раскомментировать.

Далее мы создадим скрипт, который скомпилирует вашу базовую конфигурацию с соответствующими файлами сертификата, ключа и шифрования, а затем поместит сгенерированную конфигурацию в директорию ~/client-configs/files. Откройте новый файл с именем make_config.sh в директории ~/client-configs:

nano ~/client-configs/make_config.sh 

Внутри добавьте следующий контент:

#!/bin/bash   # First argument: Client identifier   KEY_DIR=~/client-configs/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf   cat ${BASE_CONFIG}      <(echo -e '<ca>')      ${KEY_DIR}/ca.crt      <(echo -e '</ca>n<cert>')      ${KEY_DIR}/${1}.crt      <(echo -e '</cert>n<key>')      ${KEY_DIR}/${1}.key      <(echo -e '</key>n<tls-crypt>')      ${KEY_DIR}/ta.key      <(echo -e '</tls-crypt>')      > ${OUTPUT_DIR}/${1}.ovpn 

Сохраните файл и закройте его, когда закончите.

Перед тем как продолжить, обязательно сделайте этот файл исполняемым, введя:

chmod 700 ~/client-configs/make_config.sh 

Этот скрипт создаст копию файла base.conf, который вы создали, соберет все сертификаты и ключи, созданные для вашего клиента, извлечет их содержимое, добавит его в копию базового конфигурационного файла и экспортирует все это содержимое в новый конфигурационный файл клиента. Это означает, что вместо того чтобы управлять конфигурацией клиента, сертификатами и файлами ключей отдельно, вся необходимая информация хранится в одном месте. Преимущество использования этого метода заключается в том, что если в будущем вам потребуется добавить клиента, вы сможете запустить этот скрипт для быстрого создания нового конфигурационного файла и убедиться, что вся важная информация хранится в одном легкодоступном месте.

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

Шаг 12 — Генерация конфигураций клиента

Если вы следовали инструкции, вы создали клиентский сертификат и ключ с именами client1.crt и client1.key соответственно на Шаге 6. Вы можете создать конфигурационный файл для этих учетных данных, перейдя в каталог ~/client-configs и запустив скрипт, который вы создали в конце предыдущего шага:

  1. cd ~/client-configs
  2. ./make_config.sh client1

 

Это создаст файл с именем client1.ovpn в вашей директории ~/client-configs/files:

ls ~/client-configs/files 
client1.ovpn 

Вам необходимо перенести этот файл на устройство, которое вы планируете использовать в качестве клиента. Например, это может быть ваш локальный компьютер или мобильное устройство.

Хотя конкретные приложения, используемые для выполнения этой передачи, будут зависеть от операционной системы вашего устройства и ваших личных предпочтений, надежным и безопасным методом является использование SFTP (SSH File Transfer Protocol) или SCP (Secure Copy) на серверной стороне. Это позволит передавать файлы аутентификации VPN вашего клиента по зашифрованному соединению.

Вот пример команды SFTP, которую вы можете выполнить с вашего локального компьютера (macOS или Linux). Эта команда скопирует файл client1.ovpn, который мы создали на предыдущем шаге, в ваш домашний каталог:

sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/ 

Вот несколько инструментов и руководств для безопасной передачи файлов с сервера OpenVPN на локальный компьютер:

  • WinSCP
  • Как использовать SFTP для безопасной передачи файлов на удалённый сервер
  • Как использовать Filezilla для безопасной передачи и управления файлами на вашем VPS

Шаг 13 — Установка конфигурации клиента

В этом разделе рассматривается, как установить профиль клиентского VPN на Windows, macOS, Linux, iOS и Android. Ни одна из этих инструкций для клиентов не зависит от другой, поэтому вы можете перейти непосредственно к той, которая подходит для вашего устройства.

Подключение OpenVPN будет иметь то же имя, что и файл .ovpn, который вы назвали. В контексте этого руководства это означает, что подключение называется client1.ovpn, что соответствует первому файлу клиента, который вы создали.

Windows

Установка OpenVPN на Windows

Скачайте клиентское приложение OpenVPN для Windows со страницы загрузок OpenVPN. Выберите подходящую версию установщика для вашей версии Windows.

Примечание: для установки OpenVPN нужны права администратора.

После установки OpenVPN скопируйте файл .ovpn в:

C:Program FilesOpenVPNconfig 

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

Вы должны запускать OpenVPN от имени администратора каждый раз, когда он используется, даже учетными записями с правами администратора. Чтобы сделать это без необходимости каждый раз щелкать правой кнопкой мыши и выбирать Запуск от имени администратора, вы должны настроить это с учетной записи администратора. Это также означает, что обычные пользователи будут должны вводить пароль администратора для использования OpenVPN. С другой стороны, обычные пользователи не смогут правильно подключиться к серверу, если приложение OpenVPN на клиенте не имеет прав администратора, поэтому повышенные привилегии необходимы.

Чтобы настроить приложение OpenVPN на постоянный запуск от имени администратора, щелкните правой кнопкой мыши по значку его ярлыка и выберите Свойства. В нижней части вкладки Совместимость нажмите кнопку Изменить параметры для всех пользователей. В новом окне установите флажок Запускать эту программу от имени администратора.

Подключение в Windows

Каждый раз, когда вы запускаете OpenVPN GUI, Windows будет спрашивать, хотите ли вы разрешить программе вносить изменения на вашем компьютере. Нажмите Да. Запуск клиентского приложения OpenVPN лишь помещает апплет в системный трей, чтобы вы могли подключаться и отключаться от VPN по мере необходимости; фактическое соединение с VPN при этом не устанавливается.

После запуска OpenVPN установите соединение, зайдя в апплет системного лотка и щёлкнув правой кнопкой мыши по значку OpenVPN. Откроется контекстное меню. Выберите client1 в верхней части меню (это ваш профиль client1.ovpn) и выберите Подключиться.

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

Отключитесь от VPN таким же образом: зайдите в апплет системного трея, щёлкните правой кнопкой мыши на значке апплета OpenVPN, выберите профиль клиента и нажмите Отключить.

macOS

Установка на macOS

Tunnelblick — это бесплатный клиент OpenVPN с открытым исходным кодом для macOS. Вы можете скачать последнюю версию дискового образа на странице загрузок Tunnelblick. Дважды щелкните загруженный файл .dmg и следуйте инструкциям для установки.

К концу процесса установки Tunnelblick спросит, есть ли у вас какие-либо конфигурационные файлы. Ответьте У меня есть конфигурационные файлы и позвольте Tunnelblick завершить установку. Откройте окно Finder и дважды щелкните по client1.ovpn. Tunnelblick установит профиль клиента. Требуются права администратора.

Подключение на macOS

Запустите Tunnelblick, дважды щелкнув значок Tunnelblick в папке Программы. После запуска Tunnelblick в строке меню в правом верхнем углу экрана появится значок Tunnelblick для управления подключениями. Щелкните по значку, а затем выберите пункт меню Подключить client1, чтобы инициировать VPN-подключение. Если вы используете пользовательские настройки DNS с Tunnelblick, возможно, потребуется установить флажок «Разрешить изменения вручную заданных сетевых настроек» в диалоговом окне расширенной конфигурации.

Линукс

Установка в Linux

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

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

На Ubuntu или Debian вы можете установить его так же, как на сервере, введя:

  1. sudo apt update
  2. sudo apt install openvpn

 

В CentOS вы можете включить репозитории EPEL, а затем установить его, введя:

  1. sudo dnf install epel-release
  2. sudo dnf install openvpn

 

Настройка клиентов, использующих systemd-resolved

Сначала определите, использует ли ваша система systemd-resolved для обработки разрешения DNS, проверив файл /etc/resolv.conf:

cat /etc/resolv.conf 
# This file is managed by man:systemd-resolved(8). Do not edit. . . .  nameserver 127.0.0.53 options edns0 

Если ваша система настроена на использование systemd-resolved для разрешения DNS, IP-адрес после опции nameserver будет 127.0.0.53. В файле также должны быть комментарии, как показано в примере, которые объясняют, как systemd-resolved управляет этим файлом. Если у вас другой IP-адрес, отличный от 127.0.0.53, скорее всего, ваша система не использует systemd-resolved, и вы можете перейти к следующему разделу о настройке Linux-клиентов, у которых есть скрипт update-resolv-conf.

Чтобы поддерживать этих клиентов, сначала установите пакет openvpn-systemd-resolved. Он предоставляет скрипты, которые заставят systemd-resolved использовать VPN-сервер для разрешения DNS.

sudo apt install openvpn-systemd-resolved 

После установки этого пакета настройте клиент для его использования и для отправки всех DNS-запросов через VPN-интерфейс. Откройте VPN-файл клиента:

nano client1.ovpn 

Теперь раскомментируйте следующие строки, которые вы добавили ранее:

script-security 2 up /etc/openvpn/update-systemd-resolved down /etc/openvpn/update-systemd-resolved down-pre dhcp-option DOMAIN-ROUTE . 

Настройка клиентов, использующих update-resolv-conf

Если ваша система не использует systemd-resolved для управления DNS, проверьте, содержит ли ваша дистрибуция вместо этого скрипт /etc/openvpn/update-resolv-conf:

ls /etc/openvpn 
update-resolv-conf 

Если ваш клиент включает файл update-resolv-conf, отредактируйте файл конфигурации клиента OpenVPN, который вы ранее перенесли:

nano client1.ovpn 

Раскомментируйте три строки, которые вы добавили для настройки DNS:

script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf 

Если вы используете CentOS, измените директиву group с nogroup на nobody, чтобы она соответствовала доступным группам дистрибутива:

group nobody 

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

Подключение в Linux

Теперь вы можете подключиться к VPN, просто указав команду openvpn на файл конфигурации клиента:

sudo openvpn --config client1.ovpn 

Это должно подключить вас к вашему VPN.

Примечание: Если ваш клиент использует systemd-resolved для управления DNS, проверьте, что настройки применены правильно, выполнив команду systemd-resolve --status следующим образом:

systemd-resolve --status tun0 

Вы должны увидеть вывод, похожий на следующий:

Link 22 (tun0) . . .          DNS Servers: 208.67.222.222                       208.67.220.220           DNS Domain: ~. 

Если вы видите IP-адреса DNS-серверов, которые вы настроили на сервере OpenVPN, вместе с настройкой ~. для DNS Domain в выводе, это означает, что ваш клиент правильно настроен на использование DNS-резольвера VPN-сервера. Вы также можете проверить, отправляются ли ваши DNS-запросы через VPN, используя сайт, такой как DNS leak test.com.

iOS

Установка OpenVPN на iOS

В магазине приложений iTunes App Store найдите и установите OpenVPN Connect, официальное клиентское приложение OpenVPN для iOS. Чтобы перенести конфигурацию клиента iOS на устройство, подключите его напрямую к компьютеру.

Процесс завершения передачи через iTunes описан здесь. Откройте iTunes на компьютере и нажмите iPhone > приложения. Прокрутите вниз до раздела Общий доступ к файлам и нажмите на приложение OpenVPN. Пустое окно справа, Документы OpenVPN, предназначено для обмена файлами. Перетащите файл .ovpn в окно Документы OpenVPN.

Теперь откройте приложение OpenVPN на iPhone. Вы получите уведомление о том, что новый профиль готов к импорту. Нажмите на зелёный знак плюса, чтобы импортировать его.

Подключение на iOS

OpenVPN теперь готов к использованию с новым профилем. Начните подключение, передвинув кнопку Подключить в положение Вкл. Отключение выполните, передвинув ту же кнопку в положение Выкл.

Примечание: Переключатель VPN в Настройках нельзя использовать для подключения к VPN. Если вы попытаетесь, вы получите уведомление о том, что подключаться можно только через приложение OpenVPN.

Андроид

Установка OpenVPN на Android

Откройте Google Play Store. Найдите и установите Android OpenVPN Connect, официальное клиентское приложение OpenVPN для Android.

Вы можете перенести профиль .ovpn, подключив устройство Android к вашему компьютеру через USB и скопировав файл. В качестве альтернативы, если у вас есть считыватель SD-карт, вы можете извлечь SD-карту устройства, скопировать на неё профиль, а затем вставить карту обратно в устройство Android.

Запустите приложение OpenVPN и нажмите на меню ФАЙЛ, чтобы импортировать профиль.

Затем перейдите к месту сохранения профиля (на скриншоте используется /storage/emulated/0/openvpn) и выберите ваш файл .ovpn. Нажмите кнопку ИМПОРТИРОВАТЬ, чтобы завершить импорт этого профиля.

Подключение OpenVPN на Android

После добавления профиля вы увидите экран, похожий на этот:

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

Чтобы отключиться, просто снова нажмите на кнопку переключения в верхнем левом углу. Вам будет предложено подтвердить, что вы хотите отключиться от VPN.

Шаг 14 — Тестирование вашего VPN-соединения (необязательно)

Примечание: Этот метод проверки вашего VPN-соединения будет работать только в том случае, если вы выбрали маршрутизацию всего вашего трафика через VPN на Шаге 7 при редактировании файла server.conf для OpenVPN.

После того как всё установлено, простая проверка подтверждает, что всё работает правильно. Не включая соединение VPN, откройте браузер и перейдите на DNSLeakTest.

Сайт покажет IP-адрес, присвоенный вашим интернет-провайдером, а также то, как вы видитесь остальному миру. Чтобы проверить настройки DNS через тот же сайт, нажмите на Расширенный тест, и он покажет, какие DNS-серверы вы используете.

Теперь подключите клиент OpenVPN к VPN вашего Droplet и обновите браузер. Должен появиться совершенно другой IP-адрес (адрес вашего VPN-сервера), и именно так вы выглядите для внешнего мира. Снова расширенный тест (Extended Test) на сайте DNSLeakTest проверит ваши настройки DNS и подтвердит, что вы теперь используете DNS-серверы, предоставленные вашим VPN.

Шаг 15 — Отзыв клиентских сертификатов

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

Для этого следуйте примеру из предварительного руководства «Как настроить и сконфигурировать Удостоверяющий центр на Ubuntu» в разделе Отзыв сертификата.

После того как вы отзовёте сертификат для клиента, используя эти инструкции, вам потребуется скопировать сгенерированный файл crl.pem на ваш сервер OpenVPN в каталог /etc/openvpn/server:

sudo cp /tmp/crl.pem /etc/openvpn/server/ 

Затем откройте файл конфигурации сервера OpenVPN:

sudo nano /etc/openvpn/server/server.conf 

В конце файла добавьте опцию crl-verify, которая укажет серверу OpenVPN проверять созданный нами список отзываний сертификатов при каждой попытке подключения:

crl-verify crl.pem 

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

Наконец, перезапустите OpenVPN, чтобы применить отзыв сертификата:

sudo systemctl restart openvpn-server@server.service 

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

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

  1. Отозвать сертификат с помощью команды ./easyrsa revoke client_name
  2. Создать новый CRL
  3. Перенесите новый файл crl.pem на ваш сервер OpenVPN и скопируйте его в каталог /etc/openvpn/server/, чтобы заменить старый список.
  4. Перезапустите службу OpenVPN.

Вы можете использовать этот процесс, чтобы отозвать любые сертификаты, которые вы ранее выдали для вашего сервера.

Часто задаваемые вопросы (FAQ)

1. Как установить OpenVPN на Ubuntu?

Процесс установки одинаков для всех версий Ubuntu. Используйте стандартные команды apt:

sudo apt update sudo apt install openvpn easy-rsa 

Ubuntu 24.04 включает OpenVPN 2.6.x с улучшенными функциями безопасности, но конфигурация остаётся прежней.

2. Как создать файлы конфигурации клиента?

Используйте автоматизированный скрипт, который мы создали на шаге 11:

cd ~/client-configs ./make_config.sh client_name 

Это создаёт полный файл .ovpn со всеми необходимыми сертификатами и ключами, встроенными в него.

3. Как настроить UFW для OpenVPN?

Конфигурация UFW включает два основных шага:

  • Добавьте правила маскарада в /etc/ufw/before.rules:
# START OPENVPN RULES *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES 
  • Разрешить трафик OpenVPN
sudo ufw allow 1194/udp sudo ufw allow OpenSSH 

4. Какой порт OpenVPN использует по умолчанию?

OpenVPN по умолчанию использует UDP порт 1194. Для ограничительных сетей вы можете изменить настройку на TCP порт 443 в конфигурации сервера:

port 443 proto tcp explicit-exit-notify 0 

5. Как OpenVPN сравнивается с WireGuard?

Функция OpenVPN WireGuard
Шифрование На основе TLS, с высокой конфигурабельностью Современная криптография (ChaCha20, Curve25519)
Производительность Хорошо, зависит от конфигурации Отлично, реализация на уровне ядра
Конфигурация Сложный, очень гибкий Простые, продуманные настройки по умолчанию
Совместимость Отличная поддержка различных платформ Хорошо, новый протокол
Модель безопасности PKI на основе сертификатов Управление с использованием ключей, проще
Сценарий использования Предприятие, сложные требования Современные приложения с критическими требованиями к производительности

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

Выберите WireGuard, когда: Вы отдаёте приоритет производительности, простоте и современной криптографии. Смотрите наше руководство «Как настроить WireGuard на Ubuntu 20.04» для инструкций по настройке.

6. Как устранить распространенные проблемы с подключением OpenVPN?

Сбой TLS рукопожатия:

  • Проверьте, что сертификаты установлены правильно
  • Проверить синхронизацию системного времени
  • Убедитесь, что межсетевой экран разрешает трафик OpenVPN

Невозможно направить трафик:

  • Проверьте, что пересылка IP включена: sysctl net.ipv4.ip_forward
  • Проверьте правила маскарадинга UFW
  • Подтвердите, что конфигурация клиента включает redirect-gateway

Проблемы с разрешением DNS:

  • Для systemd-resolved: Установите openvpn-systemd-resolved
  • Для resolvconf: Раскомментируйте скрипты обновления DNS в конфигурации клиента
  • Тест с: systemd-resolve --status tun0

7. Как добавить больше клиентов на мой сервер OpenVPN?

  • Создать новый клиентский сертификат (Шаг 6):
cd ~/easy-rsa ./easyrsa gen-req client2 nopass 
  • Подпишите сертификат на вашем сервере CA:
./easyrsa sign-req client client2 
  • Создать конфигурацию клиента (Шаг 11):
cd ~/client-configs ./make_config.sh client2 
  • Перенесите файл .ovpn на клиентское устройство

8. Как мне отслеживать состояние сервера OpenVPN и подключения?

Проверить состояние службы:

sudo systemctl status openvpn-server@server.service 

Просмотр активных подключений:

sudo cat /var/log/openvpn/server.log 

Мониторинг подключений в режиме реального времени:

sudo tail -f /var/log/openvpn/server.log 

9. Как мне создать резервную копию конфигурации OpenVPN?

Основные файлы для резервного копирования:

  • /etc/openvpn/server/ — Конфигурация сервера и сертификаты
  • ~/easy-rsa/pki/ — файлы Удостоверяющего Центра
  • ~/client-configs/ — Конфигурации и скрипты клиента

Используйте следующий скрипт резервного копирования:

#!/bin/bash tar -czf openvpn-backup-$(date +%Y%m%d).tar.gz      /etc/openvpn/server/      ~/easy-rsa/pki/      ~/client-configs/ 

Заключение

Теперь у вас должна быть полностью рабочая виртуальная частная сеть, работающая на вашем сервере OpenVPN. Вы можете просматривать веб-сайты и загружать контент, не беспокоясь о том, что злоумышленники отслеживают вашу активность.

Существует несколько шагов, которые вы можете предпринять, чтобы ещё больше настроить вашу установку OpenVPN, такие как настройка клиента для автоматического подключения к VPN или настройка правил и политик доступа для конкретных клиентов. Для этих и других индивидуальных настроек OpenVPN вам следует обратиться к официальной документации OpenVPN.

Связанные учебники и ресурсы Linux-Console.net:

  • Настройка сервера OpenVPN на Debian (Пошаговое руководство)
    Пошаговое руководство по установке и настройке сервера OpenVPN на Debian, включая настройку сертификатов, правила брандмауэра и конфигурацию клиентов. Процесс аналогичен Ubuntu, поэтому многие шаги можно адаптировать для систем Ubuntu.
  • Обзор решений VPN на Linux-Console.net
    Обзор доступных решений VPN на Linux-Console.net, включая примеры использования, преимущества в области безопасности и ссылки на руководства по развертыванию для различных типов VPN.
  • Разверните OpenVPN Access Server с помощью Marketplace Linux-Console.net
    Инструкции по быстрому развертыванию предварительно настроенного OpenVPN Access Server с использованием Marketplace Linux-Console.net, что упрощает настройку и управление для команд и бизнеса.
  • VPC против VPN: Основные различия
    Четкое объяснение различий между виртуальными частными облаками (VPC) и виртуальными частными сетями (VPN), включая рекомендации по использованию каждого, вопросы безопасности и практические примеры.

Спасибо, что учитесь вместе с сообществом Linux-Console.net.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *