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

Установка и настройка 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
Автор
Редакция

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

Мобильные данные не работают на iPhone или iPad
Техническая поддержка

Мобильные данные не работают на iPhone или iPad

Как закрыть вкладки на Android
How-to

Как закрыть вкладки на Android

Напоминания о фильтре для Nest Thermostat
Умный дом

Напоминания о фильтре для Nest Thermostat

Как удалить папку 3D Objects в Windows 10
Windows

Как удалить папку 3D Objects в Windows 10

Circle to Search на iPhone — Google Lens и ярлыки
How-to

Circle to Search на iPhone — Google Lens и ярлыки

Как создать ветку в Git — практическое руководство
GIT

Как создать ветку в Git — практическое руководство