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

Установка и настройка OpenVPN на FreeBSD 12.0 с сертификатной аутентификацией

7 min read VPN Обновлено 17 Oct 2025
OpenVPN на FreeBSD 12.0 — установка и настройка
OpenVPN на FreeBSD 12.0 — установка и настройка

В этом руководстве пошагово описано, как установить OpenVPN на FreeBSD 12.0, сгенерировать сертификаты с помощью easy-rsa, настроить сервер и pf, включить маршрутизацию (port forwarding) и проверить подключение клиента. Приведены рекомендации по безопасности, чек-листы для администратора и отладочные сценарии.

Важное: процедура предполагает root-доступ и базовые навыки работы с FreeBSD и командной строкой. Перед началом сделайте бэкап конфигураций и ключевых файлов.

О чём статья

Основная цель: настроить сервер OpenVPN на FreeBSD 12.0 с использованием сертификатной аутентификации (PKI), обеспечить NAT через pf и включить пересылку пакетов. Варианты: можно адаптировать конфигурацию под другие версии FreeBSD и под другие топологии (например, TAP вместо TUN).

Краткие варианты запроса (SEO-подсказки): установить OpenVPN на FreeBSD, настроить OpenVPN FreeBSD 12, OpenVPN с сертификатами, pf NAT для OpenVPN, как настроить client.ovpn.


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

  • Система: FreeBSD 12.0. Локализовано: минимально рекомендуется 512 МБ оперативной памяти и 1 ядро CPU.
  • Доступ: root (или права sudo).
  • Установленный pf (firewall) и доступ к редактированию /etc/rc.conf, /etc/sysctl.conf.
  • Понимание IP-маршрутизации и базовый опыт работы с OpenSSL/PKI будет полезен.

Что мы сделаем

  • Установим OpenVPN на FreeBSD 12.0
  • Настроим переменные easy-rsa для генерации сертификатов
  • Сгенерируем CA, серверный и клиентский сертификаты, DH и CRL
  • Настроим OpenVPN (openvpn.conf)
  • Настроим pf: NAT и правила для UDP/1194
  • Включим пересылку пакетов (port-forwarding)
  • Подготовим клиентский .ovpn и выполним тестирование

Шаг 1 — Установка OpenVPN

Обновите локальный кэш пакетов и установите openvpn:

pkg update
pkg install openvpn

Добавьте сервис OpenVPN в автозагрузку и укажите интерфейс туннеля ‘tun’:

sysrc openvpn_enable="YES"
sysrc openvpn_if="tun"

Теперь пакет OpenVPN установлен и включён для автозагрузки.

Экран установки пакетов OpenVPN на FreeBSD

Шаг 2 — Подготовка переменных для сертификатов (easy-rsa)

Создайте директорию для конфигурации OpenVPN и скопируйте туда easy-rsa:

mkdir -p /usr/local/etc/openvpn/
cp -R /usr/local/share/easy-rsa /usr/local/etc/openvpn/

Перейдите в папку easy-rsa и отредактируйте файл vars (используйте ваш любимый редактор):

cd /usr/local/etc/openvpn/easy-rsa/
vim vars

Ниже — пример настроек. Подставьте свои значения (страна, город, email и т. п.). Значения локализованы в русской транслитерации или сохранены как в оригинале, где критично:

set_var EASYRSA             "$PWD"
set_var EASYRSA_PKI         "$EASYRSA/pki"
set_var EASYRSA_DN         "cn_only"
set_var EASYRSA_REQ_COUNTRY "DE"
set_var EASYRSA_REQ_PROVINCE    "Frankfurt"
set_var EASYRSA_REQ_CITY    "Frankfurt"
set_var EASYRSA_REQ_ORG         "hakase-labs CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL      "[email protected]"
set_var EASYRSA_REQ_OU         "HAKASE-LABS EASY CA"
set_var EASYRSA_KEY_SIZE       2048
set_var EASYRSA_ALGO           rsa
set_var EASYRSA_CA_EXPIRE      7500
set_var EASYRSA_CERT_EXPIRE    365
set_var EASYRSA_NS_SUPPORT     "no"
set_var EASYRSA_NS_COMMENT     "HAKASE-LABS CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR        "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF       "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST         "sha256"

Сделайте vars исполняемым и переходите к генерации PKI:

chmod +x vars

Конфигурация easy-rsa в /usr/local/etc/openvpn/easy-rsa

Шаг 3 — Генерация сертификатов

Инициализируйте PKI и создайте корневой CA, серверные и клиентские сертификаты, DH и CRL.

cd /usr/local/etc/openvpn/easy-rsa/
./easyrsa.real init-pki

Генерация CA:

./easyrsa.real build-ca

Вас попросят задать пароль для CA-ключа. Сохраните этот пароль в безопасном месте.

Генерация CA сертификата

Генерация и подпись серверного сертификата:

./easyrsa.real gen-req openvpn-bsd nopass
./easyrsa.real sign-req server openvpn-bsd

При подписи потребуется ввести пароль CA.

Запрос серверного сертификата openvpn-bsd

Проверка сертификата:

openssl verify -CAfile pki/ca.crt pki/issued/openvpn-bsd.crt

Проверка сертификата сервера

Генерация клиентского сертификата (пример client01):

./easyrsa.real gen-req client01 nopass
./easyrsa.real sign-req client client01

Проверка клиентского сертификата:

openssl verify -CAfile pki/ca.crt pki/issued/client01.crt

Генерация клиентского сертификата client01

Генерация CRL и DH-параметров:

./easyrsa.real gen-crl
./easyrsa.real gen-dh

DH и CRL сгенерированы

Теперь скопируйте сертификаты в соответствующие каталоги OpenVPN:

mkdir -p /usr/local/etc/openvpn/{server,client}
cp pki/ca.crt /usr/local/etc/openvpn/server/
cp pki/issued/openvpn-bsd.crt /usr/local/etc/openvpn/server/
cp pki/private/openvpn-bsd.key /usr/local/etc/openvpn/server/
cp pki/dh.pem /usr/local/etc/openvpn/server/
cp pki/crl.pem /usr/local/etc/openvpn/server/

cp pki/ca.crt /usr/local/etc/openvpn/client/
cp pki/issued/client01.crt /usr/local/etc/openvpn/client/
cp pki/private/client01.key /usr/local/etc/openvpn/client/

Копирование сертификатов в /usr/local/etc/openvpn/server и /client

Структура директорий с сертификатами

Шаг 4 — Конфигурация OpenVPN

Перейдите в /usr/local/etc/openvpn и создайте openvpn.conf:

cd /usr/local/etc/openvpn/
vim openvpn.conf

Пример конфигурации сервера. Настройте под свою сеть (IP, интерфейсы, значения):

# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun

# OpenVPN Server Certificate - CA, server key and certificate
ca /usr/local/etc/openvpn/server/ca.crt
cert /usr/local/etc/openvpn/server/openvpn-bsd.crt
key /usr/local/etc/openvpn/server/openvpn-bsd.key

#DH and CRL key
dh /usr/local/etc/openvpn/server/dh.pem
crl-verify /usr/local/etc/openvpn/server/crl.pem

# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.5.0 255.255.255.0
push "redirect-gateway def1"

# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"

#Enable multiple clients to connect with the same certificate key
duplicate-cn

# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache

# Other Configuration
keepalive 20 60
explicit-exit-notify 1
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody

# OpenVPN Log
log-append /var/log/openvpn.log
verb 3

Сохраните и запустите сервис:

service openvpn start
service openvpn status

Проверьте открытые сокеты (порт по умолчанию UDP/1194):

sockstat -l4

Проверка сокетов и прослушиваемых портов OpenVPN

Шаг 5 — Настройка pf (файрвол) для OpenVPN

Мы будем создавать NAT-правило, чтобы трафик из VPN (10.5.5.0/24) выходил в интернет через внешний интерфейс (например, vtnet0). Перед началом убедитесь, что pf установлен и включён.

Отредактируйте /usr/local/etc/pf.conf или основной pf.conf в /etc (в примере — /usr/local/etc/pf.conf):

cd /usr/local/etc/
vim pf.conf

Добавьте переменные и правила (пример):

# vpn interface
vpn_if="tun0"
vpn_net = "10.5.5.0/24"

# reassemble all fragmented packets before filtering them
scrub in on $ext_if all fragment reassemble

# route traffic from VPN interface out to the internet
nat on ! $vpn_if from $vpn_net to any -> $ext_ip

# Allow Connection to VPN Server
pass in on $ext_if proto udp from any to ($ext_if) port 1194 keep state

# Pass all connection on the VPN Interface
pass in on $vpn_if from any to any

Сохраните и проверьте конфигурацию pf:

service pf check
service pf reload
pfctl -sr
pfctl -sn

Загрузка и проверка правил pf

Важное: корректно укажите $ext_if и $ext_ip — это внешний интерфейс и внешний IP вашей машины. Ошибки в этих переменных могут привести к потере доступа.

Шаг 6 — Включение пересылки пакетов (port forwarding)

Отредактируйте /etc/sysctl.conf и добавьте параметры:

vim /etc/sysctl.conf

Вставьте:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

Примените настройки и включите систему как gateway:

sysctl -f /etc/sysctl.conf
sysrc gateway_enable="YES"
reboot

Подключение маршрутизации и перезагрузка

После перезагрузки проверьте, что net.inet.ip.forwarding = 1.

Шаг 7 — Подготовка клиентской конфигурации

Создайте файл клиента /usr/local/etc/openvpn/client/client01.ovpn и поместите туда сертификаты (ca.crt, client01.crt, client01.key) или инлайньте их при желании.

Пример client01.ovpn:

client
dev tun
proto udp

remote xxx.xxx.xxx.xxx 1194

ca ca.crt
cert client01.crt
key client01.key

cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3

Измените remote xxx.xxx.xxx.xxx на реальный внешний IP или DNS-имя вашего сервера. Скачайте все нужные файлы на клиентскую машину и подключитесь.

Пример структуры client директории с конфигурацией и сертификатами

Шаг 8 — Тестирование

На клиенте выполните:

openvpn --config client01.ovpn

Проверьте интерфейс tun0:

ifconfig tun0

Проверьте пинг до сервера внутри VPN и доступ к интернету через VPN:

ping -c3 10.5.5.1
curl ipinfo.io

Если внешний IP в ответе curl совпадает с IP сервера — туннель работает и трафик идёт через VPN.

Проверка подключения и внешний IP через curl ipinfo.io


Частые ошибки и их устранение

  • OpenVPN не поднимает туннель: проверьте логи /var/log/openvpn.log и права на ключи (ключи не должны быть доступны всем). Права для приватного ключа: 600, владелец root.
  • Клиент не получает IP: проверьте директиву server в openvpn.conf и наличие push “route”; проверьте, что pf не блокирует трафик внутри VPN.
  • Нет доступа в интернет с клиента: проверьте nat-правило pf, включена ли маршрутизация (net.inet.ip.forwarding=1), корректно ли указан $ext_if и $ext_ip.
  • Ошибка верификации сертификата: убедитесь, что ca.crt совпадает на клиенте и в серверной папке, и что вы подписали запрос верно.

Безопасность и жёсткая настройка

Рекомендации по усилению безопасности:

  • Используйте RSA-ключи длиной 4096 бит для CA и сервера, если это допустимо по производительности.
  • Отключите duplicate-cn, чтобы каждому клиенту соответствовал свой сертификат.
  • Храните CA-ключ оффлайн; для подписи создавайте отдельную рабочую машину для CA.
  • Регулярно обновляйте CRL при отзыве сертификатов: ./easyrsa.real gen-crl и копируйте crl.pem на сервер.
  • Рассмотрите использование tls-auth/tls-crypt для защиты TLS-рукопожатия от DoS и раффликации портов.
  • Логи: ограничьте доступ к /var/log/openvpn.log и настраивайте ротацию логов.

Чек-листы по ролям

Чек-лист для системного администратора (быстрый):

  • Установлен пакет openvpn
  • easy-rsa настроен и vars сохранён
  • CA сгенерирован и ключ надёжно защищён
  • Сертификаты сервера и клиента созданы и проверены
  • Конфигурация openvpn.conf отредактирована и протестирована
  • pf содержит NAT-правила и правила доступа
  • net.inet.ip.forwarding включён и перезагрузка выполнена
  • Клиентский .ovpn протестирован из внешней сети

Чек-лист для пользователя/клиента:

  • Получены ca.crt, client.crt, client.key и client.ovpn
  • client.ovpn содержит правильный remote
  • Подключение проходит без ошибок в логах
  • Проверен доступ к внутренним ресурсам и интернету через VPN

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

  1. Создайте оффлайн CA на отдельной изолированной машине.
  2. Подписывайте только CSR, полученные от доверенных администраторов.
  3. Храните CRL на сервере и обновляйте после каждого отзыва.
  4. Введите процесс ротации сертификатов (например, ежегодный) и процедуру отзыва для утерянных ключей.

Сценарии тестирования и критерии приёмки

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

  • OpenVPN демон запускается и слушает UDP/1194.
  • Клиент успешно устанавливает туннель и получает IP из 10.5.5.0/24.
  • Клиент может пинговать 10.5.5.1 и выходить в интернет через сервер (curl ipinfo.io показывает IP сервера).
  • pf выполняет NAT для VPN-сети и не блокирует установленные соединения.

Тестовые кейсы:

  • Подключение одного клиента, проверка маршрутизации и доступа в интернет.
  • Подключение двух клиентов (если duplicate-cn отключён, у каждого — свой cert).
  • Откат и отзыв сертификата: сгенерировать CRL и проверить, что отозванный клиент не может подключиться.
  • Нагрузочный тест: проверить влияние шифрования на загрузку CPU при множественных клиентах (количественные значения зависят от среды).

Когда стоит выбрать альтернативы

  • WireGuard: проще в настройке, выше производительность и современный дизайн криптографии; если вам нужен простой и быстрый VPN — рассмотрите WireGuard.
  • OpenVPN с username/password (auth-user-pass): полезно при централизованной аутентификации (LDAP/Radius). Но сертификаты дают более надёжную проверку клиентов.
  • IPSec (StrongSwan): предпочтителен в корпоративных сетях, где требуется взаимодействие с аппаратными VPN-концентраторами.

Решение распространённых проблем (короткие инструкции)

  • Если клиент видит TLS Error: verify that the server certificate and CA match; проверьте временные метки и правильность часов на сервере/клиенте.
  • Если NAT не работает: проверьте pfctl -s nat и pfctl -sr, убедитесь в отсутствии конфликтов интерфейсов.
  • Если логи пусты: убедитесь, что openvpn запущен от root и daemon опция включена, и что /var/log/openvpn.log доступен для записи.

Рекомендации по эксплуатации и резервированию

  • Резервируйте pki/ директорию в защищённом хранилище (шифрование бэкапа).
  • Введите журнал операций: кто и когда подписал сертификат, кто отзывал.
  • План ротации ключей и сертификатов: периодический контроль сроков истечения (EASYRSA_CERT_EXPIRE).

Заключение

В статье показаны все ключевые шаги для развёртывания OpenVPN на FreeBSD 12.0 с сертификатной аутентификацией: установка пакета, генерация PKI, настройка сервера и pf, включение маршрутизации и проверка клиента. При выполнении рекомендаций по безопасности и процессам управления сертификатами вы получите надёжный VPN-сервер.

Ссылки


Краткое резюме

  • Установка OpenVPN и easy-rsa на FreeBSD 12.0.
  • Генерация CA, серверных и клиентских сертификатов, DH и CRL.
  • Конфигурация openvpn.conf и pf NAT; включение net.inet.ip.forwarding.
  • Подготовка client.ovpn и проверка подключения.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Как стримить Netflix в Discord — полный гайд
Руководство

Как стримить Netflix в Discord — полный гайд

Отключить уведомления Get Office в Windows 10
Windows

Отключить уведомления Get Office в Windows 10

Исправить отсутствие звука в Windows 10 (KB5015878)
Windows

Исправить отсутствие звука в Windows 10 (KB5015878)

Операции над аудиосигналами в Octave
Аудио

Операции над аудиосигналами в Octave

Виджет контакта на главный экран Android
Android.

Виджет контакта на главный экран Android

Удалить и отключить OneDrive в Windows 10/11
Windows

Удалить и отключить OneDrive в Windows 10/11