Home » Настройка и конфигурация OpenVPN сервера на Ubuntu 24
Настройка и конфигурация OpenVPN сервера на Ubuntu 24

Настройка и конфигурация OpenVPN сервера на Ubuntu 24

Сегодня поговорим о том, как развернуть собственный OpenVPN сервер на Ubuntu 24 — задача, которая может показаться сложной, но на самом деле решается за полчаса, если знать правильные команды. Этот гайд поможет вам создать безопасный VPN-туннель для удаленного доступа к корпоративной сети, обхода блокировок или просто для шифрования трафика в общественных Wi-Fi сетях.

Поднимем три главных вопроса: как работает OpenVPN под капотом, как настроить сервер пошагово без лишних заморочек, и какие подводные камни могут встретиться в процессе. Разберем реальные примеры, покажем команды и конфиги, а также сравним с альтернативными решениями.

Как работает OpenVPN

OpenVPN — это SSL/TLS-based VPN решение, которое работает в пространстве пользователя (userspace) и использует виртуальные сетевые интерфейсы TUN/TAP. В отличие от IPSec, который работает на уровне ядра, OpenVPN проще в настройке и отладке.

Основные компоненты:

  • OpenVPN сервер — принимает подключения от клиентов
  • PKI инфраструктура — сертификаты для аутентификации
  • Конфигурационные файлы — настройки сервера и клиентов
  • Маршрутизация — правила для пересылки трафика

Процесс подключения выглядит так: клиент инициирует SSL handshake с сервером, происходит взаимная аутентификация по сертификатам, после чего создается зашифрованный туннель и клиенту назначается IP-адрес из пула.

Подготовка сервера

Для начала нужен VPS с Ubuntu 24. Минимальные требования: 512MB RAM, 10GB диска, 1 CPU core. Рекомендую взять что-то посерьезнее для продакшена — VPS с 2GB RAM будет комфортнее для работы с несколькими клиентами.

Обновляем систему и устанавливаем необходимые пакеты:

sudo apt update && sudo apt upgrade -y
sudo apt install openvpn easy-rsa ufw -y

Включаем IP forwarding — без этого сервер не сможет маршрутизировать трафик между клиентами:

echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Настройка PKI инфраструктуры

Создаем директорию для сертификатов и инициализируем PKI:

make-cadir ~/openvpn-ca
cd ~/openvpn-ca

Редактируем файл vars для упрощения генерации сертификатов:

nano vars

Находим и изменяем следующие строки:

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"

Инициализируем PKI и создаем корневой сертификат:

source vars
./clean-all
./build-ca

Генерируем сертификат и ключ для сервера:

./build-key-server server

Создаем параметры Диффи-Хеллмана (это займет несколько минут):

./build-dh

Генерируем статический ключ для дополнительной безопасности:

openvpn --genkey --secret keys/ta.key

Конфигурация сервера

Копируем сертификаты в директорию OpenVPN:

sudo cp ~/openvpn-ca/keys/{ca.crt,ca.key,server.crt,server.key,ta.key,dh2048.pem} /etc/openvpn/

Создаем конфигурационный файл сервера:

sudo nano /etc/openvpn/server.conf

Вставляем следующую конфигурацию:

port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

server 10.8.0.0 255.255.255.0

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

client-to-client
keepalive 10 120

tls-auth ta.key 0
cipher AES-256-CBC

user nobody
group nogroup

persist-key
persist-tun

status openvpn-status.log
log-append /var/log/openvpn.log
verb 3

explicit-exit-notify 1

Настройка файрвола

Настраиваем UFW для работы с OpenVPN:

sudo ufw allow ssh
sudo ufw allow 1194/udp
sudo ufw enable

Добавляем правила NAT для маршрутизации трафика. Редактируем файл before.rules:

sudo nano /etc/ufw/before.rules

Добавляем в начало файла (перед строкой *filter):

# NAT rules for OpenVPN
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT

Также в разделе *filter добавляем:

# Allow TUN interface connections
-A ufw-before-input -i tun+ -j ACCEPT
-A ufw-before-forward -i tun+ -j ACCEPT
-A ufw-before-forward -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT

Включаем forwarding в UFW:

sudo nano /etc/default/ufw

Меняем:

DEFAULT_FORWARD_POLICY="ACCEPT"

Перезагружаем UFW:

sudo ufw disable && sudo ufw enable

Запуск сервера

Запускаем и добавляем OpenVPN в автозагрузку:

sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server

Проверяем статус:

sudo systemctl status openvpn@server

Если все настроено правильно, увидите:

● openvpn@server.service - OpenVPN connection to server
   Loaded: loaded (/lib/systemd/system/openvpn@.service; enabled; vendor preset: enabled)
   Active: active (running)

Создание клиентских сертификатов

Возвращаемся в директорию PKI и создаем сертификат для клиента:

cd ~/openvpn-ca
source vars
./build-key client1

Создаем директорию для клиентских конфигов:

mkdir -p ~/client-configs/files

Создаем базовый конфиг для клиента:

nano ~/client-configs/base.conf

Содержимое:

client
dev tun
proto udp
remote your_server_ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3

Создаем скрипт для генерации клиентских конфигов:

nano ~/client-configs/make_config.sh
#!/bin/bash

KEY_DIR=~/openvpn-ca/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 +x ~/client-configs/make_config.sh
cd ~/client-configs
./make_config.sh client1

Практические примеры и подводные камни

Рассмотрим типичные проблемы и их решения:

Проблема Причина Решение
Клиент подключается, но нет интернета Не настроен NAT или IP forwarding Проверить правила UFW и sysctl net.ipv4.ip_forward
Connection timeout Заблокирован порт 1194/udp Настроить файрвол или использовать TCP порт 443
TLS handshake failed Проблемы с сертификатами Пересоздать сертификаты или проверить настройки времени
Медленная скорость Слабый сервер или неоптимальные настройки Увеличить MTU, использовать компрессию lz4

Пример оптимизированной конфигурации для высокой нагрузки:

# Добавить в server.conf
fast-io
sndbuf 0
rcvbuf 0
comp-lzo adaptive
mtu-test

Альтернативные решения

Кроме OpenVPN существуют и другие решения:

  • WireGuard — более современный и быстрый протокол, но менее функциональный
  • SoftEther VPN — поддерживает множество протоколов, но сложнее в настройке
  • IPSec/IKEv2 — встроенная поддержка в мобильных устройствах
  • Pritunl — веб-интерфейс для OpenVPN с корпоративными функциями

Сравнение производительности показывает, что WireGuard обычно быстрее OpenVPN на 15-20%, но OpenVPN более стабилен при нестабильном соединении благодаря механизму keep-alive.

Автоматизация и скрипты

Для автоматизации создания клиентов можно использовать такой скрипт:

#!/bin/bash
CLIENT_NAME=$1
if [ -z "$CLIENT_NAME" ]; then
    echo "Usage: $0 "
    exit 1
fi

cd ~/openvpn-ca
source vars
./build-key $CLIENT_NAME
cd ~/client-configs
./make_config.sh $CLIENT_NAME

echo "Client config created: ~/client-configs/files/${CLIENT_NAME}.ovpn"

Для мониторинга подключений:

#!/bin/bash
echo "Active OpenVPN connections:"
sudo cat /var/log/openvpn.log | grep -E "peer info|ESTABLISHED"

Безопасность и рекомендации

Для повышения безопасности рекомендую:

  • Использовать сертификаты с коротким сроком действия (90 дней)
  • Настроить логирование и мониторинг подключений
  • Регулярно обновлять OpenVPN и систему
  • Использовать двухфакторную аутентификацию через PAM
  • Ограничить доступ к серверу только с определенных IP

Пример настройки CRL (Certificate Revocation List) для отзыва сертификатов:

cd ~/openvpn-ca
source vars
./revoke-full client1
sudo cp keys/crl.pem /etc/openvpn/

Добавить в server.conf:

crl-verify crl.pem

Интересные факты и нестандартные применения

OpenVPN можно использовать не только для обычного VPN:

  • Site-to-site соединения — связывание офисов через интернет
  • Failover каналы — резервирование основного интернет-канала
  • Isolated networks — создание изолированных сетей для тестирования
  • Game servers — создание приватных игровых серверов

Малоизвестная возможность — использование OpenVPN в режиме bridge для прозрачного подключения к локальной сети:

dev tap0
server-bridge 192.168.1.1 255.255.255.0 192.168.1.50 192.168.1.100

Статистика показывает, что OpenVPN остается самым популярным open-source VPN решением с долей рынка около 60% среди корпоративных пользователей.

Заключение и рекомендации

OpenVPN — надежное и проверенное временем решение для создания VPN-серверов. Основные преимущества: стабильность, безопасность, кроссплатформенность и богатые возможности настройки. Главные недостатки: сложность первоначальной настройки и несколько меньшая производительность по сравнению с WireGuard.

Рекомендую использовать OpenVPN для:

  • Корпоративных VPN с большим количеством пользователей
  • Случаев, когда нужна максимальная совместимость с различными устройствами
  • Сред с высокими требованиями к безопасности
  • Сложных сетевых топологий

Для простых задач личного использования стоит рассмотреть WireGuard как более современную альтернативу. Если планируете серьезную нагрузку, берите выделенный сервер — на виртуалке могут быть проблемы с производительностью при большом количестве одновременных подключений.

Полезные ссылки:


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

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked