Гид по технологиям

Установка и настройка OpenVPN на Debian 12

10 min read VPN Обновлено 24 Nov 2025
OpenVPN на Debian 12: установка и настройка
OpenVPN на Debian 12: установка и настройка

Схема VPN-соединения: клиент, OpenVPN-сервер и отдельный CA-сервер

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

В этом руководстве мы установим OpenVPN на сервер с Debian 12, настроим отдельный сервер CA (Certificate Authority), создадим необходимые криптоартефакты и соберём клиентскую конфигурацию, через которую весь трафик клиента будет проксироваться через OpenVPN-сервер.

Важно: в примерах используется сочетание IPv4 и IPv6, UFW (Uncomplicated Firewall) включён. Многие команды предполагают, что вы используете не-root пользователя с sudo и что оба сервера обновлены.

Что вы получите в конце

  • Рабочий OpenVPN-сервер на Debian 12.
  • Отдельный приватный CA для подписывания сертификатов.
  • Клиентский файл .ovpn, который можно импортировать в GUI/CLI-клиент OpenVPN.
  • Механизм отзыва сертификата (CRL) и рекомендации по безопасной эксплуатации.

Основные термины (в 1 строке)

  • CA — центр сертификации, подписывает серверные и клиентские сертификаты.
  • CSR — запрос на сертификат (Certificate Signing Request).
  • CRL — список отозванных сертификатов (Certificate Revocation List).
  • tls-crypt / tls-auth — дополнительный пред-общий ключ для защиты управления TLS.

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

  • Сервер с Debian 12, доступ по сети (IPv4/IPv6), UFW включён — это будет OpenVPN-сервер.
  • Второй сервер с Debian 12, используемый только как приватный CA (не запускать на нём лишние сервисы).
  • Неправ-root пользователь с sudo на обоих серверах.
  • Клиентская машина (в примерах — Debian 12, но подойдут Windows/macOS/Android/iOS).
  • Оба сервера обновлены:
$ sudo apt update && sudo apt upgrade

Порядок действий (вкратце)

  1. Настроить CA-сервер и Easy-RSA, создать корневой сертификат.
  2. Установить OpenVPN и Easy-RSA на VPN-сервер.
  3. Создать CSR на VPN-сервере, подписать его на CA и вернуть сертификат.
  4. Сгенерировать tls-crypt ключ, DH/EC параметры, собрать сертификаты и ключи.
  5. Настроить /etc/openvpn/server/server.conf, sysctl, UFW.
  6. Создать клиентские ключи, собрать .ovpn, подключиться и протестировать.
  7. При необходимости — отзывать сертификаты и обновлять CRL.

Важные заметки

Важно: приватный ключ CA (ca.key) должен храниться только на CA-сервере и по возможности быть офлайн, когда не используется. Если он скомпрометирован, все выданные сертификаты потеряют доверие.


Шаг 1 — Развёртывание CA-сервера

CA (Certificate Authority) — это сущность, подписывающая сертификаты. В этом руководстве мы используем отдельный сервер как приватный CA. На нём будут выполняться операции создания и подписи запросов.

Шаг 1.1 — Установка Easy-RSA

Easy-RSA — набор скриптов для управления PKI.

$ sudo apt install easy-rsa

Шаг 1.2 — Создание директории 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//easy-rsa/pki

Шаг 1.3 — Создание корневого CA

Отредактируйте файл vars, чтобы задать параметры организации:

$ cd ~/easy-rsa
$ nano pki/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.
  • ~/easy-rsa/pki/private/ca.key — приватный ключ CA (держите в секрете).

Шаг 2 — Установка OpenVPN и Easy-RSA на VPN-сервер

На OpenVPN-сервере установите пакеты и подготовьте папку easy-rsa:

$ sudo apt install openvpn easy-rsa
$ mkdir ~/easy-rsa
$ ln -s /usr/share/easy-rsa/* ~/easy-rsa/
$ chmod 700 ~/easy-rsa

Шаг 3 — Создание PKI на VPN-сервере

Каждый сервер хранит свою PKI-структуру. Инициализируйте PKI на VPN-сервере и настройте алгоритмы:

$ cd ~/easy-rsa
$ ./easyrsa init-pki
$ nano pki/vars

Отредактируйте только нужные параметры:

set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Использование ECC даёт меньше вычислений и хорошие характеристики для TLS.

Шаг 4 — Создание запроса на сертификат сервера (CSR)

На VPN-сервере создайте приватный ключ и CSR:

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

Файлы будут в:

  • req: /home//easy-rsa/pki/reqs/server.req
  • key: /home//easy-rsa/pki/private/server.key

Копируем ключ в /etc/openvpn/server:

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

CSR нужно передать на CA для подписи.

Шаг 5 — Подпись CSR на CA-сервере

Скопируйте server.req на CA-сервер (scp или вручную). На CA-сервере импортируйте и подпишите запрос:

$ cd ~/easy-rsa
$ ./easyrsa import-req /tmp/server.req server
$ ./easyrsa sign-req server server

Подтвердите “yes” и введите пароль CA, если он есть. После подписи появится:

  • /home//easy-rsa/pki/issued/server.crt

Скопируйте обратно на VPN-сервер и поместите в /etc/openvpn/server:

$ 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 ключ:

$ cd ~/easy-rsa
$ ./easyrsa gen-dh
$ sudo openvpn --genkey secret ta.key
$ sudo cp ta.key /etc/openvpn/server
$ sudo cp pki/dh.pem /etc/openvpn/server

Примечание: при использовании ECC Easy-RSA может генерировать pki/dh.pem как параметры для обратной совместимости. Если вы используете explicit наборы DH — убедитесь в соответствии с настройкой сервера.

Шаг 7 — Генерация клиентского сертификата и ключа

На VPN-сервере подготовьте директорию для клиентских конфигураций:

$ mkdir -p ~/client-configs/keys
$ chmod -R 700 ~/client-configs
$ cd ~/easy-rsa
$ ./easyrsa gen-req client1 nopass

Скопируйте client1.key в ~/client-configs/keys:

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

Перенесите client1.req на CA-сервер, импортируйте и подпишите как клиентский сертификат:

$ scp pki/reqs/client1.req username@your_ca_server_ip:/tmp
$ ./easyrsa import-req /tmp/client1.req client1
$ ./easyrsa sign-req client client1

Скопируйте обратно client1.crt на VPN-сервер и положите в ~/client-configs/keys вместе с ca.crt и ta.key:

$ scp pki/issued/client1.crt username@your_server_ip:/tmp
$ cp /tmp/client1.crt ~/client-configs/keys/
$ sudo 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
  • Переключаем cipher на AEAD (AES-256-GCM) и добавляем auth:
;cipher AES-256-CBC
cipher AES-256-GCM
auth SHA256
  • Переходим на dh none при ECC:
;dh dh2048.pem
dh none
  • Демонизация процесса под непривилегированным пользователем:
user nobody
group nogroup

Перенаправление всего трафика клиента через VPN

Раскомментируйте строку, чтобы клиент перенаправлял весь трафик через сервер:

push "redirect-gateway def1 bypass-dhcp"

И укажите DNS-серверы, которые будут переданы клиенту (пример OpenDNS):

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

Указываем имена cert/key (если отличны от server)

cert server.crt
key server.key

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

Шаг 9 — Сетевая конфигурация сервера

Включаем форвардинг IPv4:

$ sudo nano /etc/sysctl.conf

Добавляем:

net.ipv4.ip_forward = 1

Применяем:

$ sudo sysctl -p

Это позволит NAT’ить трафик клиентов через публичный IP сервера.

Шаг 10 — Настройка брандмауэра (UFW)

Найдите интерфейс, через который уходит публичный трафик:

$ ip route list default

Вы увидите строку вроде:

default via 69.28.90.1 dev ens3 onlink

Интерфейс — ens3 в примере. Откройте /etc/ufw/before.rules и добавьте в начало NAT-правила:

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to ens3 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE
COMMIT
# END OPENVPN RULES

Замените ens3 на ваш интерфейс. Затем в /etc/default/ufw поменяйте:

DEFAULT_FORWARD_POLICY="ACCEPT"

Откройте порт для OpenVPN и перезапустите UFW:

$ sudo ufw allow 443/tcp
$ sudo ufw disable
$ sudo ufw enable

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

Запустите сервис и проверьте статус:

$ sudo systemctl start [email protected]
$ sudo systemctl status [email protected]
$ sudo systemctl -f enable [email protected]

Ожидаем, что статус будет “Active: 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 на IP вашего сервера и порт, поставьте proto tcp (если вы так настроили сервер). Закомментируйте ca/cert/key в файле и добавьте:

cipher AES-256-GCM
auth SHA256
key-direction 1

Создайте скрипт make_config.sh в ~/client-configs:

#!/bin/bash
 
# First argument: Client identifier
 
KEY_DIR=/home//client-configs/keys
OUTPUT_DIR=/home//client-configs/files
BASE_CONFIG=/home//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 на клиент.

Шаг 13 — Установка клиента и проверка подключения

На клиенте (в примере Debian 12) установите OpenVPN:

$ sudo apt install openvpn

Скачайте client1.ovpn с сервера:

$ scp username@your_server_ip:/home//client-configs/files/client1.ovpn

Проверьте механизм резолвинга DNS (systemd-resolved или update-resolv-conf) и отредактируйте client1.ovpn в соответствии с вашим окружением.

Для клиентов с systemd-resolved

$ sudo apt install openvpn-systemd-resolved
$ 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

Если в /etc/openvpn есть update-resolv-conf — раскомментируйте соответствующие строки в client1.ovpn.

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

$ sudo openvpn --config client1.ovpn

Или в фоне:

$ sudo openvpn --config client1.ovpn --daemon

Проверьте внешний IP на https://whatismyip.com — он должен показывать IP сервера OpenVPN.

Вывод whatismyip.com: IP и геолокация, совпадающая с OpenVPN-сервером

Проверьте DNS-утечки на https://www.dnsleaktest.com/ — результаты должны показывать DNS-серверы, которые вы передаёте клиенту.

Результаты теста DNS Leak Test, показывающие используемые DNS-серверы

Чтобы завершить фоновой процесс OpenVPN, найдите PID и убейте процесс:

$ ps aux | grep openvpn
$ sudo kill -9 

Шаг 14 — Отзыв сертификатов

Если нужно отозвать клиентский сертификат:

На CA-сервере:

$ cd ~/easy-rsa
$ ./easyrsa revoke client1
$ ./easyrsa gen-crl

Скопируйте pki/crl.pem на OpenVPN-сервер и поместите в /etc/openvpn/server:

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

Добавьте в /etc/openvpn/server/server.conf:

crl-verify crl.pem

Перезапустите OpenVPN:

sudo systemctl restart [email protected]

Дополнительные рекомендации и практические материалы

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

Контроль безопасности — чек-лист для администратора

  • Храните ~/easy-rsa/pki/private/ca.key только на CA-сервере и с правильными правами (chmod 600).
  • Регулярно обновляйте пакеты OS и OpenVPN.
  • Используйте tls-crypt для защиты управления TLS.
  • Используйте AEAD шифры (AES-256-GCM) с проверкой HMAC (auth SHA256).
  • Включите crl-verify и храните crl.pem в /etc/openvpn/server.
  • Ограничьте доступ к /etc/openvpn/server файловыми правами.
  • Логи OpenVPN храните и ротацируйте через systemd/journald или лог-файлы.

Чек-лист ролей (быстрая проверка)

  • Оператор CA:

    • Создал CA и защитил ca.key.
    • Подписал server/client CSR.
    • Сгенерировал CRL после отзыва.
  • Администратор VPN-сервера:

    • Установил и настроил openvpn и easy-rsa.
    • Настроил UFW и NAT.
    • Разместил ca.crt, server.crt, server.key, ta.key, crl.pem.
    • Включил systemctl enable и протестировал подключение.
  • Клиент:

    • Получил client1.ovpn и импортировал в клиент.
    • Проверил внешний IP и DNS-утечки.

Руководство по устранению неполадок (runbook)

  1. Клиент не подключается, таймаут TCP/UDP:

    • Проверьте доступность порта с сервера: telnet your_server_ip 443 (или nc).
    • Проверьте, что UFW разрешает порт: sudo ufw status verbose.
    • Убедитесь, что OpenVPN слушает: sudo ss -ltnp | grep openvpn.
  2. TLS: VERIFY ERROR или “certificate has expired”:

    • Проверьте дату истечения server.crt и client.crt (openssl x509 -in server.crt -noout -text).
    • Проверьте, что ca.crt совпадает на обеих сторонах.
  3. DNS утечки или ошибки резолвинга:

    • Убедитесь, что на клиенте корректно применён update-systemd-resolved или update-resolv-conf.
    • Проверьте push “dhcp-option DNS …” в server.conf и что клиент их принял (в логах PUSH_REPLY).
  4. Трафик не проходит через сервер (нет NAT):

    • Проверьте net.ipv4.ip_forward = 1.
    • Убедитесь, что правило MASQUERADE в /etc/ufw/before.rules соответствует интерфейсу.
    • Проверьте iptables -t nat -L -n -v.
  5. Клиент подключается, но нет доступа к ресурсам внутри сети сервера:

    • Проверьте маршрут на клиенте (ip route).
    • Проверьте, что push routes отправляются сервером.
    • Убедитесь, что на сервере нет дополнительных правил UFW блокирующих FORWARD.

Критерии приёмки

  • OpenVPN-сервис активно запущен и слушает на выбранном порту.
  • Клиент успешно устанавливает TLS-соединение и получает push-параметры (redirect-gateway и DNS).
  • Тесты на https://whatismyip.com и https://dnsleaktest.com показывают IP/ресурсы сервера.
  • CRL корректно применяется при отзыве сертификата; отозванный клиент не может подключиться.

Альтернативы и когда OpenVPN не подходит

  • WireGuard: проще по конфигурации, быстрее и легче в поддержке, но использует другую модель ключей (без PKI) и может быть менее контролируемым в крупных CA-сценариях.
  • IPsec (strongSwan): стандарт для туннелей на уровне сети, подходит для site-to-site решений с аппаратной поддержкой.
  • SSH-туннелирование: быстро и просто для редких задач, но не заменит полноценный VPN с маршрутами и DNS-пушем.

Когда не использовать OpenVPN:

  • Нужна предельно простая конфигурация и очень высокая производительность для сотен тысяч сессий — рассмотрите WireGuard.
  • Требуется аппаратная совместимость с IPsec — выберите strongSwan/Libreswan.

Модель принятия решений (коротко)

  • Если вам нужен контроль через CA, централизованная подпись сертификатов и поддержка широкого спектра клиентов — OpenVPN.
  • Если нужна максимальная простота, минимальный код и производительность — WireGuard.

Безопасность и GDPR / конфиденциальность

  • Храните минимальную информацию о клиентах и журналируйте только то, что необходимо.
  • Если вы обрабатываете персональные данные EU граждан, документируйте правовую основу обработки, срок хранения логов и меры защиты (шифрование хранения, доступ по RBAC).
  • Регулярно обновляйте CRL/OCSP (если используете OCSP) при отзыве сертификатов.

Короткое цитирование эксперта

“Правильно настроенный TLS VPN с отдельным CA значительно повышает контроль и безопасность удалённого доступа, но требует строгой политики хранения приватных ключей и процедур отзыва.” — эксперт по сетевой безопасности.

Мини-методология управления ключами

  1. Генерация CA и хранение ca.key офлайн.
  2. Генерация CSR на нужном хосте (сервер/клиент).
  3. Подпись CSR на CA, передача обратно подписанного .crt.
  4. Установка crl.pem на сервер и регулярное обновление при отзывах.

Шаблон действий при отзыве клиента

  1. На CA: ./easyrsa revoke
  2. На CA: ./easyrsa gen-crl
  3. Передать pki/crl.pem на OpenVPN-сервер и поместить в /etc/openvpn/server/
  4. Перезапустить OpenVPN: sudo systemctl restart [email protected]
  5. Проверить логи на предмет попыток подключения отозванного клиента.

Короткая галерея крайних случаев

  • Если потерян private key клиента, просто отозвать сертификат и сгенерировать новые ключи.
  • Если скомпрометирован ca.key — восстановление требует создания новой CA и перевыпуска всех сертификатов.

Заключение

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

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


Краткое анонс-сообщение (для рассылки, ~120 слов):

Настроили OpenVPN на Debian 12 с приватным CA и подробным плейбуком: генерация ключей через Easy-RSA, tls-crypt для защиты канала управления, защита UFW и NAT, сборка клиентских .ovpn и процедура отзыва сертификатов через CRL. Документ включает чек-листы ролей, runbook по устранению неполадок и рекомендации по безопасности и GDPR. Подходит для небольших команд и частных VPS. Пришлите ваш сценарий (количество клиентов, требуемые сервисы внутри сети), и мы адаптируем конфигурацию.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

PUBG падает в Windows 11 — как исправить
Гейминг

PUBG падает в Windows 11 — как исправить

Исправить ошибку «Oops! Something went wrong» в YouTube
Техподдержка

Исправить ошибку «Oops! Something went wrong» в YouTube

Экран входа macOS — настройки и советы
macOS

Экран входа macOS — настройки и советы

Удалить историю Google Bard и отключить её
Конфиденциальность

Удалить историю Google Bard и отключить её

TinyLetter для блогеров: быстро и просто
Email-маркетинг

TinyLetter для блогеров: быстро и просто

Как включить и отключить блокировщик всплывающих окон IE11
браузер

Как включить и отключить блокировщик всплывающих окон IE11