// Engineering Log
OpenVPN: Часть 2 — Как устроен: PKI, сертификаты и базовая настройка
Опубликовано 22.09.2026
// Быстрый маршрут
Эта статья относится к теме Сети и маршрутизация.
В этой части разобрано, из чего состоит установка OpenVPN Community и как собрать минимальную рабочую конфигурацию: центр сертификации, сертификаты сервера и клиентов, ключ tls-crypt, файлы server.conf и client.ovpn. Примеры рассчитаны на OpenVPN 2.6 и 2.7 на Linux.
Как клиенты и сервер доверяют друг другу
OpenVPN использует инфраструктуру открытых ключей (PKI):
- центр сертификации (CA) — пара ключей, которой подписываются все остальные сертификаты. Закрытый ключ CA — самое ценное в установке, его лучше хранить не на VPN-сервере;
- сертификат сервера — подписан CA и помечен как серверный. Клиент проверяет, что подключается именно к серверу, а не к другому клиенту с похожим сертификатом;
- сертификаты клиентов — по одному на каждого пользователя или устройство;
- список отозванных сертификатов (CRL) — сертификаты уволенных сотрудников и потерянных устройств.
При подключении стороны обмениваются сертификатами и проверяют, что оба подписаны одним CA. Пароль пользователя в этой схеме не нужен, но его можно добавить вторым фактором.
Центр сертификации на easy-rsa
Easy-RSA — утилита проекта OpenVPN для управления PKI. В Debian и Ubuntu она ставится пакетом easy-rsa. Минимальный набор команд:
./easyrsa init-pki
./easyrsa build-ca
./easyrsa build-server-full server nopass
./easyrsa build-client-full ivanovinit-pkiсоздаёт каталогpki;build-caсоздаёт центр сертификации и спрашивает пароль к его ключу — задайте надёжный;build-server-full server nopassвыпускает ключ и сертификат сервера без пароля, иначе служба не сможет стартовать без человека;build-client-full ivanovвыпускает ключ и сертификат клиента; с паролем — если пользователь будет вводить его при подключении, сnopass— если нет.
Результат лежит в каталогах: pki/ca.crt — сертификат CA, pki/issued/ — сертификаты, pki/private/ — закрытые ключи.
Параметры Диффи — Хеллмана (gen-dh) генерировать не обязательно. Документация OpenVPN рекомендует dh none: тогда используется обмен ключами на эллиптических кривых (ECDH), который быстрее и современнее.
Ключ tls-crypt
Параметр tls-crypt шифрует и подписывает весь управляющий канал общим ключом. Это даёт три преимущества: сервер не отвечает на пакеты без ключа, поэтому сканер не видит OpenVPN на порту; сертификаты не передаются в открытом виде; атаки на TLS-стек со стороны посторонних невозможны.
Ключ создаётся командой:
openvpn --genkey tls-crypt tc.keyФайл tc.key копируется на сервер и во все клиентские профили.
UDP или TCP
По умолчанию стоит выбирать UDP. Внутри туннеля и так идут TCP-соединения приложений, и когда транспорт тоже TCP, при потерях пакетов повторные отправки накладываются друг на друга и соединение сильно замедляется.
TCP (обычно на порту 443) оправдан, когда UDP закрыт: гостиничные и корпоративные сети иногда пропускают только веб-трафик. Удобная схема — два экземпляра сервера: основной на UDP и запасной на TCP.
Минимальная конфигурация сервера
Файл /etc/openvpn/server/server.conf:
port 1194
proto udp
dev tun
topology subnet
server 10.8.0.0 255.255.255.0
ca ca.crt
cert server.crt
key server.key
dh none
tls-crypt tc.key
keepalive 10 120
persist-tun
user nobody
group nogroup
verb 3
explicit-exit-notify 1server 10.8.0.0 255.255.255.0— подсеть туннеля; сервер получает10.8.0.1, клиенты — остальные адреса;keepalive 10 120— проверка связи раз в 10 секунд, разрыв после 120 секунд тишины;userиgroup— после запуска служба работает без прав root (в RHEL-совместимых системах группа называетсяnobody);explicit-exit-notify 1— сервер предупреждает клиентов о перезапуске, и они переподключаются сразу.
Шифр в конфигурации не указан намеренно: версии 2.6 и 2.7 сами согласуют лучший общий из списка data-ciphers.
Чтобы клиенты видели сеть офиса, добавьте маршрут, например push "route 192.168.1.0 255.255.255.0", и включите на сервере пересылку пакетов (net.ipv4.ip_forward = 1). Весь интернет-трафик клиентов через VPN направляет строка push "redirect-gateway def1", но для этого на сервере понадобится ещё и NAT.
Служба запускается так: systemctl enable --now openvpn-server@server (имя после @ — это имя файла конфигурации). Файл состояния с подключёнными клиентами эта служба в Debian и Ubuntu ведёт сама, отдельно указывать status не нужно.
Профиль клиента
Файл ivanov.ovpn:
client
dev tun
proto udp
remote vpn.example.ru 1194
resolv-retry infinite
nobind
persist-tun
remote-cert-tls server
verb 3
<ca>
...содержимое ca.crt...
</ca>
<cert>
...содержимое pki/issued/ivanov.crt...
</cert>
<key>
...содержимое pki/private/ivanov.key...
</key>
<tls-crypt>
...содержимое tc.key...
</tls-crypt>remote-cert-tls server обязателен: он требует, чтобы сертификат на той стороне был именно серверным. Без него любой клиент с сертификатом того же CA смог бы выдать себя за сервер.
Отзыв сертификата
Когда сотрудник уходит, его сертификат отзывают:
./easyrsa revoke ivanov
./easyrsa gen-crlФайл pki/crl.pem копируется на сервер, а в server.conf добавляется строка crl-verify crl.pem. CRL имеет срок действия, поэтому gen-crl нужно повторять до его истечения — иначе сервер перестанет пускать всех клиентов.
Типичные ошибки
- Ключ CA на VPN-сервере. При взломе сервера злоумышленник сможет выпускать свои сертификаты. Держите CA на отдельной машине, а на сервер копируйте только
ca.crt. - Нет
remote-cert-tls serverв профиле. Клиент поверит любому сертификату того же центра. - TCP «на всякий случай». Без необходимости TCP-транспорт только замедляет туннель.
- Просроченный CRL. Клиенты внезапно перестают подключаться, а в журнале сервера — ошибка проверки CRL.
- Нет пересылки пакетов. Клиент подключился, но не видит офисную сеть: не включён
ip_forwardили на шлюзе офиса нет обратного маршрута в подсеть туннеля.
Готовые пошаговые примеры: сервер на MikroTik — «Настройка сервера OpenVPN на MikroTik RouterOS», сервер на Ubuntu и клиент на Keenetic — «OpenVPN: настройка Ubuntu-сервера и клиента Keenetic». Развернуть VPN под ключ можно заказать на странице «Настройка VPN».
// Похожая задача
Если у вас похожая ситуация
Эта статья относится к одной из рабочих тем. Можно продолжить чтение по теме, перейти на главную, чтобы понять, чем я занимаюсь, или сразу открыть услуги.
Тема статьи
Сети и маршрутизация
MikroTik, VPN, маршрутизация, DNS, BGP, доступ и проблемы связности.
Часто с этим приходят
- Поднять VPN и безопасный доступ в офис или облако
- Починить маршрутизацию, DNS или нестабильный канал
- Настроить MikroTik, firewall и внешние подключения
// Следующий шаг
Если вам нужна не только статья, а помощь по этой теме, удобнее сразу перейти в услугу. Главная и подборка материалов остаются рядом.
Открыть услуги// Contact
Нужна помощь?
Свяжись со мной и я помогу решить проблему
Написать в TelegramОтвечаю в течение рабочего дня (03:00–13:00 GMT)
Или оставьте заявку здесь:
// Related