Установка VPN-сервера OpenVPN на Ubuntu 22.04: пошаговое руководство

Подробная инструкция по установке и настройке OpenVPN-сервера на Ubuntu 22.04: подготовка PKI, выпуск сертификатов, настройка клиентов, маршрутизация и брандмауэр.

Зачем нужен собственный VPN-сервер и как он работает

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

OpenVPN использует протокол TLS для шифрования данных и поддерживает два основных режима: tun (маршрутизируемый) и tap (мостовой). Режим tun более распространён и эффективен для большинства задач, так как работает на сетевом уровне и не требует настройки мостов. При подключении клиента весь его трафик может направляться через VPN-сервер, что скрывает реальный IP-адрес и шифрует передаваемые данные даже в недоверенных сетях, например, в общественном Wi-Fi.

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

Подготовка сервера: требования и начальная настройка

Для установки VPN-сервера потребуется выделенный сервер или VPS с Ubuntu 22.04, имеющий публичный IP-адрес. Минимальные требования: один виртуальный CPU, 512 МБ оперативной памяти и 10 ГБ дискового пространства — этого достаточно для небольшого количества клиентов. Важно, чтобы сервер имел статический IP-адрес или динамический DNS, если IP меняется.

Перед началом установки необходимо обновить систему и установить базовые пакеты. Выполните команды:

sudo apt update
sudo apt upgrade -y

Затем установите OpenVPN и Easy-RSA — набор скриптов для управления центром сертификации:

sudo apt install openvpn easy-rsa -y

Также рекомендуется установить утилиту ufw для настройки брандмауэра, если она не установлена по умолчанию:

sudo apt install ufw -y

После установки пакетов создайте рабочую директорию для Easy-RSA и настройте символические ссылки:

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

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

chmod 700 ~/easy-rsa

Настройка центра сертификации (CA) и PKI

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

Для инициализации инфраструктуры открытых ключей (PKI) выполните:

cd ~/easy-rsa
./easyrsa init-pki

Затем создайте файл vars с параметрами организации и криптографическими настройками. Рекомендуется использовать современные алгоритмы:

nano vars

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

set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Алгоритм эллиптических кривых (EC) обеспечивает более высокую производительность и меньший размер ключей по сравнению с RSA. После сохранения файла создайте корневой сертификат CA:

./easyrsa build-ca

Система запросит парольную фразу для защиты закрытого ключа CA. Обязательно сохраните её в надёжном месте — она понадобится для подписи сертификатов. Также будет предложено указать общее имя (CN); можно оставить значение по умолчанию. В результате будут созданы два файла: pki/ca.crt (публичный сертификат) и pki/ca.key (закрытый ключ). Закрытый ключ должен оставаться только на сервере CA.

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

После настройки CA необходимо сгенерировать сертификат для самого VPN-сервера. Этот сертификат подтверждает подлинность сервера перед клиентами. Перейдите в директорию Easy-RSA и создайте запрос на подпись сертификата (CSR):

cd ~/easy-rsa
./easyrsa gen-req server nopass

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

Скопируйте закрытый ключ сервера в директорию конфигурации OpenVPN:

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

Теперь необходимо подписать CSR с помощью CA. Если CA находится на отдельном сервере, скопируйте файл server.req на него (например, по SSH) и выполните импорт и подпись:

./easyrsa import-req /tmp/server.req server
./easyrsa sign-req server server

При подписи система запросит подтверждение и парольную фразу CA. После успешной подписи скопируйте полученный сертификат server.crt и сертификат CA ca.crt на VPN-сервер в директорию /etc/openvpn/server/.

Также сгенерируйте общий ключ для дополнительной защиты от DDoS-атак и сканирования портов:

openvpn --genkey secret ta.key
sudo cp ta.key /etc/openvpn/server/

В итоге в директории /etc/openvpn/server/ должны находиться четыре файла: server.crt, server.key, ca.crt и ta.key.

Генерация сертификатов для клиентов

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

mkdir -p ~/client-configs/keys
chmod -R 700 ~/client-configs

Сгенерируйте сертификат для клиента, например, с именем client001:

cd ~/easy-rsa
./easyrsa gen-req client001 nopass
./easyrsa sign-req client client001

Скопируйте закрытый ключ клиента и подписанный сертификат в директорию ~/client-configs/keys/, а также добавьте туда ca.crt и ta.key:

cp ~/easy-rsa/pki/private/client001.key ~/client-configs/keys/
cp ~/easy-rsa/pki/issued/client001.crt ~/client-configs/keys/
cp ~/easy-rsa/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/

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

Настройка конфигурационного файла сервера

Конфигурационный файл сервера OpenVPN хранится в /etc/openvpn/server/server.conf. Создайте его и заполните основными параметрами:

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

Минимальная конфигурация выглядит следующим образом:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
tls-crypt ta.key
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
cipher AES-256-GCM
auth SHA256

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

  • port 1194 и proto udp — порт и протокол по умолчанию; UDP быстрее, но можно использовать TCP для обхода строгих брандмауэров.
  • dev tun — режим маршрутизации.
  • tls-crypt ta.key — шифрование TLS-канала и защита от сканирования.
  • server 10.8.0.0 255.255.255.0 — подсеть для виртуальной сети VPN.
  • push "redirect-gateway def1" — перенаправление всего трафика клиента через VPN.
  • push "dhcp-option DNS 8.8.8.8" — указание DNS-сервера для клиентов (можно заменить на свой).
  • user nobody и group nogroup — запуск с пониженными привилегиями для безопасности.
  • cipher AES-256-GCM и auth SHA256 — современные криптографические алгоритмы.

Если вы не хотите, чтобы весь трафик клиентов шёл через VPN, закомментируйте строку push "redirect-gateway def1". Вместо этого можно добавить маршруты для конкретных подсетей, например: push "route 192.168.1.0 255.255.255.0".

Настройка маршрутизации и брандмауэра

Чтобы сервер OpenVPN мог передавать трафик между клиентами и интернетом, необходимо включить форвардинг пакетов. Отредактируйте файл /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

Раскомментируйте строку:

net.ipv4.ip_forward=1

Примените изменения:

sudo sysctl -p

Затем настройте брандмауэр UFW. Отредактируйте файл /etc/ufw/before.rules, добавив правила NAT в начало файла (перед строкой *filter):

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT

Замените eth0 на имя вашего сетевого интерфейса, которое можно узнать командой ip route list default. Также измените политику форвардинга в файле /etc/default/ufw:

DEFAULT_FORWARD_POLICY="ACCEPT"

Разрешите входящие подключения к OpenVPN и SSH:

sudo ufw allow 1194/udp
sudo ufw allow OpenSSH

Перезапустите UFW, чтобы применить изменения:

sudo ufw disable
sudo ufw enable

Если вы используете облачный сервер, не забудьте открыть порт 1194/UDP в панели управления облачного провайдера (например, в security group в AWS или Azure).

Запуск сервера и проверка работы

После завершения настройки можно запустить службу OpenVPN. Включите автозапуск и запустите сервис:

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

Проверьте статус службы:

sudo systemctl status openvpn-server@server.service

Если служба работает корректно, вы увидите статус active (running). Также можно проверить логи на наличие ошибок:

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

Для проверки работы сервера создайте тестовый клиентский конфигурационный файл и подключитесь с локального устройства. Если подключение устанавливается и интернет работает, значит сервер настроен правильно.

Полезные команды для диагностики:

  • ip addr show tun0 — проверка наличия виртуального интерфейса.
  • sudo iptables -t nat -L -n — просмотр правил NAT.
  • sudo netstat -ulpn | grep 1194 — проверка, что порт прослушивается.

Создание клиентских конфигураций и подключение

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

  1. Отдельные файлы: клиент получает ca.crt, client.crt, client.key, ta.key и файл конфигурации, в котором указываются пути к этим файлам. Этот способ удобен для управления, но требует передачи нескольких файлов.
  1. Встроенные сертификаты: все сертификаты и ключи встраиваются непосредственно в файл .ovpn с помощью директив `, , , `. Такой файл удобно передавать одним файлом, но его нужно защищать от несанкционированного доступа.

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

Клиентские приложения OpenVPN доступны для Windows, macOS, Linux, Android и iOS. После импорта файла .ovpn достаточно ввести имя пользователя (если настроена аутентификация) и подключиться. По умолчанию используется сертификатная аутентификация, поэтому пароль не требуется.

Безопасность, ограничения и рекомендации

Собственный VPN-сервер требует внимательного подхода к безопасности. Вот основные рекомендации:

  • Защита закрытых ключей: файлы server.key, ca.key и клиентские ключи должны быть доступны только соответствующим пользователям. Используйте права доступа 600 или 700.
  • Регулярное обновление: своевременно устанавливайте обновления безопасности для OpenVPN и операционной системы.
  • Ограничение доступа: используйте брандмауэр для ограничения входящих подключений только к необходимым портам.
  • Мониторинг: регулярно просматривайте логи OpenVPN для обнаружения подозрительной активности.
  • Отзыв сертификатов: при компрометации клиентского ключа отзовите его с помощью Easy-RSA (./easyrsa revoke client001).

Также следует учитывать ограничения:

  • Скорость: производительность VPN зависит от мощности сервера и качества канала. Использование алгоритма EC и шифра AES-256-GCM снижает нагрузку на CPU.
  • Блокировки: в некоторых странах OpenVPN может блокироваться провайдерами. В таких случаях можно использовать TCP-порт 443 или маскировку трафика.
  • Юридические аспекты: в ряде стран использование VPN регулируется законодательством. Убедитесь, что ваша деятельность соответствует местным законам.

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

Вопросы и ответы

Сколько времени занимает установка OpenVPN-сервера на Ubuntu 22.04?

При наличии подготовленного сервера и следовании инструкции установка занимает около 30–60 минут. Основное время уходит на генерацию ключей и настройку конфигурационных файлов. Если вы используете скрипты автоматизации, процесс можно сократить до 15–20 минут.

Можно ли использовать один сервер для OpenVPN и CA?

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

Какой протокол выбрать: UDP или TCP?

UDP обеспечивает более высокую скорость и меньшую задержку, что идеально для большинства случаев. TCP может быть полезен, если сеть блокирует UDP-трафик или требуется более надёжная доставка пакетов. Многие администраторы используют UDP 1194, а при необходимости обхода блокировок — TCP 443, который маскируется под HTTPS-трафик.

Что делать, если клиент не может подключиться к серверу?

Проверьте несколько моментов: 1) Убедитесь, что служба OpenVPN запущена (systemctl status openvpn-server@server). 2) Проверьте, что порт 1194/UDP открыт в брандмауэре сервера и в панели облачного провайдера. 3) Проверьте правильность указания IP-адреса сервера в клиентском конфигурационном файле. 4) Просмотрите логи на сервере (tail -f /var/log/openvpn/openvpn.log) и на клиенте для выявления ошибок аутентификации или маршрутизации.

Как добавить нового клиента к существующему серверу?

Сгенерируйте новый сертификат на сервере CA: ./easyrsa gen-req client002 nopass, затем подпишите его: ./easyrsa sign-req client client002. Скопируйте ключи и сертификаты в директорию клиента и создайте конфигурационный файл .ovpn с помощью скрипта make_config.sh. После этого передайте файл клиенту — он сможет подключиться без изменения конфигурации сервера.

Какие криптографические настройки рекомендуются для OpenVPN в 2025 году?

Рекомендуется использовать алгоритм эллиптических кривых (EC) для обмена ключами, шифр AES-256-GCM для шифрования данных и хэш SHA256 для аутентификации. Эти параметры обеспечивают высокий уровень безопасности и производительности. Также рекомендуется включить tls-crypt для защиты TLS-канала от сканирования и DDoS-атак.

Можно ли настроить OpenVPN для доступа только к локальной сети, а не ко всему интернету?

Да, для этого закомментируйте директиву push "redirect-gateway def1" в конфигурации сервера. Вместо неё добавьте маршруты к нужным подсетям, например: push "route 192.168.1.0 255.255.255.0". Тогда клиенты смогут обращаться только к указанным ресурсам, а остальной трафик будет идти через их обычное интернет-соединение.