Установка и настройка OpenVPN на Ubuntu 22.04 — пошаговое руководство
Это пошаговое руководство показывает, как установить и настроить OpenVPN на Ubuntu 22.04: создать изолированный CA, выпустить и подписать сертификаты, настроить сервер и клиента, включить проброс трафика и защитить инфраструктуру. Содержит чек-листы, сценарии отказа и рекомендации по безопасности.

Виртуальная частная сеть (VPN) позволяет скрыть местоположение, безопасно выходить в интернет в ненадёжных сетях и обходить гео-ограничения и цензуру. OpenVPN — открытое TLS-решение для организации VPN.
В этом руководстве мы установим OpenVPN на сервер с Ubuntu 22.04, настроим отдельный сервер как приватный центр сертификации (CA), подпишем сертификаты сервера и клиента, настроим проброс всего трафика через VPN и приведём проверенные практики безопасности и эксплуатации.
Краткие определения
- CA: центр сертификации — сервер, который выпускает и подписывает сертификаты.
- PKI: инфраструктура публичных ключей — набор ключей/сертификатов и сопутствующих файлов.
- CSR: запрос на подпись сертификата (Certificate Signing Request).
- ta.key / tls-crypt: пред-расшаренный ключ для защиты TLS-канала OpenVPN.
Требования
- Сервер с Ubuntu 22.04 для OpenVPN (с поддержкой IPv4 и IPv6). На нём включён и запущен UFW.
- Отдельный сервер с Ubuntu 22.04, выделенный как CA (не запускать на нём другие сетевые сервисы по возможности).
- Нератизированный пользователь с sudo на обоих серверах.
- Клиентская машина (мы используем Ubuntu 22.04 как пример клиента). OpenVPN поддерживает Windows, macOS, Android и iOS.
- Обновлённые пакеты на обоих серверах:
$ sudo apt update && sudo apt upgradeВажно: держите закрытый ключ CA (ca.key) только на CA-сервере, по возможности — офлайн, когда он не используется.
Шаг 1 — Подготовка CA-сервера
CA (Certification Authority) отвечает за выпуск и отзыв сертификатов. В этом руководстве CA — отдельный сервер, используемый только для задач PKI: генерации, подписи и отзыва сертификатов.
Установка Easy-RSA
Easy-RSA — набор скриптов для управления CA и генерации ключей.
$ sudo apt install easy-rsaСоздание директории PKI
$ mkdir ~/easy-rsa
$ ln -s /usr/share/easy-rsa/* ~/easy-rsa/
$ chmod 700 /home//easy-rsa
$ cd ~/easy-rsa
$ ./easyrsa init-pki Ожидаемый вывод укажет путь к каталогу PKI, например /home/
Создание корневого сертификата CA
Создайте файл vars и задайте значения организации (локальные значения можно изменить):
$ cd ~/easy-rsa
$ nano varsПоместите в vars:
set_var EASYRSA_REQ_COUNTRY "US"
set_var EASYRSA_REQ_PROVINCE "NewYork"
set_var EASYRSA_REQ_CITY "New York City"
set_var EASYRSA_REQ_ORG "Howtoforge"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "Community"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"Сохраните и выполните:
$ ./easyrsa build-caВведите надёжную парольную фразу для закрытого ключа CA. При желании можно использовать ./easyrsa build-ca nopass (но это снижает защиту).
Файлы:
- ~/easy-rsa/pki/ca.crt — публичный сертификат CA (распространяется на сервер VPN и клиентам).
- ~/easy-rsa/pki/private/ca.key — приватный ключ CA (держите только на CA-сервере).
Важно: компрометация ca.key означает необходимость аннулирования всей PKI и выпуска новых сертификатов.
Шаг 2 — Установка OpenVPN и Easy-RSA на сервере OpenVPN
На сервере OpenVPN установите пакеты:
$ sudo apt install openvpn easy-rsa
$ mkdir ~/easy-rsa
$ ln -s /usr/share/easy-rsa/* ~/easy-rsa/
$ chmod 700 ~/easy-rsaШаг 3 — Создание PKI на сервере OpenVPN
Даже если PKI уже создан на CA-сервере, на сервере OpenVPN нужно инициализировать собственный каталог PKI для хранения локальных ключей/запросов:
$ cd ~/easy-rsa
$ nano varsДобавьте минимум:
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"И выполните:
$ ./easyrsa init-pkiЭтот каталог будет содержать приватный ключ сервера и CSR, которые вы перешлёте в CA для подписи.
Шаг 4 — Генерация запроса сервера и приватного ключа
На OpenVPN-сервере создайте CSR и приватный ключ (пример CN = server):
$ cd ~/easy-rsa
$ ./easyrsa gen-req server nopassВ результате появятся:
- req: ~/easy-rsa/pki/reqs/server.req
- key: ~/easy-rsa/pki/private/server.key
Скопируйте закрытый ключ в каталог OpenVPN:
$ sudo cp /home//easy-rsa/pki/private/server.key /etc/openvpn/server/ CSR (server.req) нужно отправить на CA для подписи.
Шаг 5 — Подписание CSR на CA и возврат сертификатов
Скопируйте CSR на CA-сервер (scp или вручную):
$ scp /home/username/easy-rsa/pki/reqs/server.req username@your_ca_server_ip:/tmpНа CA-сервере импортируйте и подпишите:
$ cd ~/easy-rsa
$ ./easyrsa import-req /tmp/server.req server
$ ./easyrsa sign-req server serverПодтвердите подпись и введите пароль CA. Результат: ~/easy-rsa/pki/issued/server.crt.
Скопируйте server.crt и ca.crt обратно на OpenVPN-сервер:
$ scp pki/issued/server.crt username@your_vpn_server_ip:/tmp
$ scp pki/ca.crt username@your_vpn_server_ip:/tmp
$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/serverШаг 6 — Конфигурация криптографического материала
Генерируем tls-crypt (ta.key), который защищает TLS-канал от неаутентифицированного трафика и затрудняет обнаружение OpenVPN-трафика:
$ cd ~/easy-rsa
$ openvpn --genkey secret ta.key
$ sudo cp ta.key /etc/openvpn/serverШаг 7 — Генерация клиентских сертификатов и ключей
Создайте директорию для клиентских конфигураций:
$ mkdir -p ~/client-configs/keys
$ chmod -R 700 ~/client-configs
$ cd ~/easy-rsa
$ ./easyrsa gen-req client1 nopassСкопируйте приватный ключ клиента в ~/client-configs/keys:
$ cp pki/private/client1.key ~/client-configs/keys/Отправьте client1.req на CA, подпишите её как клиентский сертификат и верните client1.crt:
$ scp pki/reqs/client1.req username@your_ca_server_ip:/tmp
# на CA
$ cd ~/easy-rsa
$ ./easyrsa import-req /tmp/client1.req client1
$ ./easyrsa sign-req client client1
# затем вернуть client1.crt на OpenVPN сервер и поместить в ~/client-configs/keys/Также скопируйте ca.crt и ta.key в ~/client-configs/keys и установите владельца на файлы:
$ cp ~/easy-rsa/ta.key ~/client-configs/keys/
$ sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
$ sudo chown username.username ~/client-configs/keys/*Шаг 8 — Настройка OpenVPN сервера
Скопируйте пример конфигурации и отредактируйте её:
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/
$ sudo nano /etc/openvpn/server/server.confВнесите ключевые изменения (сохраните строки по образцу):
- Замените tls-auth на tls-crypt:
;tls-auth ta.key 0 # This file is secret
tls-crypt ta.key- Используйте AEAD-шифр и HMAC:
;cipher AES-256-CBC
cipher AES-256-GCM
auth SHA256- Отключите Diffie-Hellman для ECC:
;dh dh2048.pem
dh none- Запустите процесс под непривилегированным пользователем:
user nobody
group nogroup- Перенаправление всего трафика клиента через VPN (push):
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"- При необходимости смените порт и протокол (пример: TCP на 443):
# Optional!
port 443
proto tcp
;proto udp
explicit-exit-notify 0- Укажите файлы сертификатов и ключей (по умолчанию
server— корректно):
cert server.crt
key server.keyСохраните файл.
Важно: изменения в криптографии и протоколе влияют на совместимость клиентов — обновите клиентские конфиги соответствующе.
Шаг 9 — Настройка сетевой маршрутизации (ip_forward)
Разрешите проброс IPv4-трафика на сервере:
$ sudo nano /etc/sysctl.conf
# Добавьте в конец
net.ipv4.ip_forward = 1
$ sudo sysctl -pЭто позволяет серверу выполнять NAT и передавать трафик клиентов в интернет.
Шаг 10 — Настройка UFW и правил NAT
Найдите сетевой интерфейс по умолчанию:
$ ip route list default
# например: default via 64.225.64.1 dev eth0 proto staticОтредактируйте /etc/ufw/before.rules и добавьте NAT-правила в начало файла (замените eth0 на ваш интерфейс):
# START OPENVPN RULES
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULESРазрешите форвард пакетов по умолчанию, отредактировав /etc/default/ufw:
DEFAULT_FORWARD_POLICY="ACCEPT"Откройте порт 443/tcp в UFW:
$ sudo ufw allow 443/tcp
$ sudo ufw disable
$ sudo ufw enableПримечание: если вы используете другой порт, откройте соответствующий порт/протокол.
Шаг 11 — Запуск OpenVPN сервиса
Включите сервис в автозапуск и запустите его:
$ sudo systemctl -f enable [email protected]
$ sudo systemctl start [email protected]
$ sudo systemctl status [email protected]Проверяйте вывод журнала: служба должна перейти в состояние active (running) и показать “Initialization Sequence Completed”.
Шаг 12 — Создание клиентской конфигурации
Создайте базовый конфиг клиента и скрипт для сборки .ovpn с вложенными сертификатами.
$ mkdir -p ~/client-configs/files
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
$ nano ~/client-configs/base.confОтредактируйте remote, proto, user/group, ciphers, auth, закомментируйте директивы ca/cert/key и tls-auth, потому что мы их вставим внутрь .ovpn.
Добавьте key-direction 1 и при необходимости строки для управления DNS (update-systemd-resolved или update-resolv-conf).
Скрипт сборки 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 '') \
${KEY_DIR}/ca.crt \
<(echo -e ' \n') \
${KEY_DIR}/${1}.crt \
<(echo -e ' \n') \
${KEY_DIR}/${1}.key \
<(echo -e ' \n') \
${KEY_DIR}/ta.key \
<(echo -e ' ') \
> ${OUTPUT_DIR}/${1}.ovpnСделайте скрипт исполняемым:
$ chmod 700 ~/client-configs/make_config.sh
$ cd ~/client-configs
$ ./make_config.sh client1
$ ls ~/client-configs/files
# client1.ovpnФайл client1.ovpn — готовый конфиг для импорта в OpenVPN клиент.
Шаг 13 — Установка и тестирование клиента
Пример: клиент на Ubuntu 22.04.
$ sudo apt install openvpn
$ cat /etc/resolv.confЕсли система использует systemd-resolved (в /etc/resolv.conf есть 127.0.0.53), установите пакет openvpn-systemd-resolved для корректной настройки DNS:
$ sudo apt install openvpn-systemd-resolvedОтредактируйте client1.ovpn, раскомментируйте строки для update-systemd-resolved:
script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .Или при использовании resolvconf — раскомментируйте update-resolv-conf.
Подключение:
$ sudo openvpn --config client1.ovpnВы должны увидеть сообщения о TLS-рукопожатии, PUSH_REPLY и создание tun-интерфейса. Для фонового режима:
sudo openvpn --config client1.ovpn --daemonЧтобы остановить фоновый процесс, найдите PID и завершите его:
$ ps aux | grep openvpn
$ sudo kill -9 Проверка DNS и IP: посетите https://whatismyip.com или https://www.dnsleaktest.com/.


Шаг 14 — Отзыв сертификатов (CRL)
Если нужно отозвать доступ клиента:
На CA-сервере:
$ cd ~/easy-rsa
$ ./easyrsa revoke client1
$ ./easyrsa gen-crlПолучите pki/crl.pem и скопируйте на OpenVPN-сервер:
$ scp ~/easy-rsa/pki/crl.pem username@your_server_ip:/tmp
$ sudo cp /tmp/crl.pem /etc/openvpn/server/В server.conf добавьте:
crl-verify crl.pemПерезапустите OpenVPN:
sudo systemctl restart [email protected]После этого отозванный клиент не сможет подключиться.
Критерии приёмки
- Сервис OpenVPN активен и возвращает “Initialization Sequence Completed”.
- Клиент получает IP из пула (например 10.8.x.x) и видно правило маршрутизации 0.0.0.0/1 и 128.0.0.0/1.
- DNS на клиенте настроены на OpenDNS (208.67.222.222 / 208.67.220.220) или на выбранные вами резолверы.
- При отзыве сертификата через CRL — соответствующий клиент не подключается.
- Логи не содержат ошибок TLS и ошибок прав доступа.
Чек-листы по ролям
Администратор CA
- Держите CA-сервер изолированным от общедоступных сервисов.
- Храните ca.key офлайн, делайте резервную копию только в безопасном хранилище.
- Регулярно проверяйте и обновляйте политику выпуска/отзыва сертификатов.
Администратор сервера OpenVPN
- Убедитесь, что ip_forward включён.
- Настройте UFW/iptables с MASQUERADE правилом.
- Ограничьте доступ по порту/протоколу (используйте firewall и fail2ban, если нужно).
- Внедрите мониторинг и алерты на падение сервиса.
Пользователь клиента
- Всегда импортируйте .ovpn из доверенного источника.
- Храните приватный ключ клиента в безопасном месте, с правами 600.
- При компрометации — сообщите администратору и попросите отозвать сертификат.
Тесты и критерии приёмки (миксы)
- Проверка маршрутов:
ip route— присутствует 0.0.0.0/1 и 128.0.0.0/1. - Проверка DNS:
systemd-resolve --status tun0(если systemd-resolved) — DNS сервера из push. - Тест утечки DNS: выполните запросы к известным сервисам и сравните IP.
- Проверка CRL: отозовите тестовый сертификат и попытайтесь подключиться.
Технические рекомендации и варианты
Когда этот подход подходит:
- Необходим защищённый удалённый доступ и маршрутизация трафика через сервер.
- Требуется централизованное управление сертификатами и возможность отзыва.
Когда это не лучший выбор / альтернативы:
- Для простой защиты отдельных сервисов может быть достаточно SSH-туннелей.
- Если нужна масштабируемость для тысяч клиентов — рассмотрите коммерческие решения с автоматическим управлением сертификатами (например, какие-то решения на базе PKI/PKCS#11).
- WireGuard может предложить более простую конфигурацию и лучшую пропускную способность для статичных сценариев.
Модель зрелости PKI (кратко)
- Уровень 1 — базовый: один CA, ключи на CA-сервере, отсутствие автоматизации.
- Уровень 2 — надёжность: оффлайн-CA, оффлайн-хранение ca.key, регулярные бэкапы.
- Уровень 3 — производство: автоматизация подписей, интеграция с HSM/TPM, централизованное логирование и ротация.
Меры безопасности (жёсткая версия)
- Храните ca.key только на CA-сервере, по возможности физически изолированном.
- Используйте сильные парольные фразы или HSM для CA.
- Регулярно генерируйте и публикуйте CRL при каждом отзыве.
- Отключите лишние сервисы на CA-сервере.
- Используйте TLS шифрование AEAD (AES-256-GCM), auth SHA256 и tls-crypt.
- Включите строгие права на файлы: 600 для приватных ключей.
- Рассмотрите внедрение fail2ban для защиты SSH и порта OpenVPN (TCP 443) от переборов.
Частые ошибки и устранение (runbook)
- Клиент не подключается — ошибка VERIFY FAILED
- Причина: несовпадение ca.crt или подписи. Проверьте, что клиент использует тот же ca.crt, что и сервер.
- Нет проброса трафика через сервер
- Проверьте
sysctl net.ipv4.ip_forwardи/proc/sys/net/ipv4/ip_forward. - Убедитесь, что правило MASQUERADE добавлено в /etc/ufw/before.rules и интерфейс указан верно.
- DNS не изменился
- Убедитесь, что клиент применил push-опции DNS (проверьте
systemd-resolve --status tun0илиresolv.conf). - Для systemd-resolved установите openvpn-systemd-resolved и раскомментируйте соответствующие строки.
- Клиент подключается, но нет интернета
- Проверьте правила NAT, маршрут по умолчанию на сервере, и конфликт с локальными маршрутами клиента.
- После изменения server.conf служба не стартует
- Проверяйте синтаксис и логи:
journalctl -u [email protected] -e.
Решение проблем при миграции и совместимость версий
- При переходе на ECC/AEAD убедитесь, что клиенты поддерживают OpenVPN версии 2.5+.
- Если у вас старые клиенты, используйте совместимые cipher/auth или планируйте обновление клиентов.
- При переносе CA: экспортируйте ca.crt и ca.key (только если надёжно храните), но лучше не переносить ca.key на общие машины.
Небольшая диаграмма принятия решений (Mermaid)
flowchart TD
A[Выбор протокола] --> B{Нужна маскировка под HTTPS?}
B -- Да --> C[Использовать TCP порт 443]
B -- Нет --> D[Использовать UDP порт 1194]
C --> E[Увеличенная нагрузка на CPU, но вероятность обхода блокировок выше]
D --> F[Лучшее время отклика и производительность]Глоссарий (1 строка на термин)
- CA — сервер/служба, подписывающая сертификаты.
- CSR — запрос на подпись сертификата.
- CRL — список отозванных сертификатов.
- PKI — инфраструктура публичных ключей.
- ta.key/tls-crypt — пред-расшаренный ключ для защиты TLS-канала OpenVPN.
Советы по обслуживанию и TCO/ROI (качественно)
- Поддержка собственной PKI требует операций по выпуску/отзыву, резервированию, хранению ключей — это накладные расходы по времени и безопасности.
- Альтернатива — использовать централизованные решения с управлением сертификатами (упрощение, но дополнительные затраты на сервис).
Краткое объявление (100–200 слов)
В этом руководстве показаны шаги по установке и безопасной конфигурации OpenVPN на Ubuntu 22.04 с использованием отдельного сервера CA. Вы научитесь создавать PKI, подписывать серверные и клиентские сертификаты, настраивать tls-crypt, проброс трафика и правила NAT через UFW. Включены практические советы по безопасности, чек-листы для разных ролей, runbook для отказов и рекомендации по миграции. Руководство подходит для небольших и средних инфраструктур, где важен контроль над сертификатами и возможность гибкой настройки протоколов и шифров.
Социальная предпросмотрка
OG title: OpenVPN на Ubuntu 22.04 — установка и настройка OG description: Полное руководство по развёртыванию OpenVPN с отдельным CA, выпуском сертификатов, настройкой NAT и рекомендациями по безопасности.
Заключение
Вы прошли полный цикл: от создания CA и PKI до генерации клиентских конфигураций и проверки подключения. Внедрите предложенные меры безопасности, следите за CRL и логами, а также регулярно тестируйте процедуру отзыва сертификатов. Если остались вопросы — задавайте конкретные сценарии и мы поможем с отладкой.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента