Home » Как настроить сервер OpenVPN на Ubuntu 24
Как настроить сервер OpenVPN на Ubuntu 24

Как настроить сервер OpenVPN на Ubuntu 24

Решил наконец-то поднять свой собственный VPN? Отличный выбор! В эпоху, когда приватность в интернете стала почти роскошью, OpenVPN остаётся золотым стандартом для создания безопасных туннелей. Эта статья поможет вам развернуть полноценный OpenVPN-сервер на Ubuntu 24 — от установки до настройки клиентов. Никаких платных VPN-сервисов, никаких ограничений, только ваш собственный сервер с полным контролем над трафиком и логами.

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

Как работает OpenVPN: краткий ликбез

OpenVPN — это SSL/TLS-based решение, которое создаёт зашифрованный туннель между клиентом и сервером. В отличие от IPSec, который работает на сетевом уровне, OpenVPN функционирует в пользовательском пространстве и может использовать как UDP, так и TCP для передачи данных.

Основные преимущества OpenVPN:

  • Гибкость: работает практически на любой платформе
  • Безопасность: использует проверенные криптографические алгоритмы
  • Простота настройки: один конфигурационный файл для клиента
  • Обход NAT: без проблем работает за файрволлами

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

Для начала нам понадобится VPS или выделенный сервер с Ubuntu 24. Минимальные требования смешные — 512MB RAM и 1 CPU core хватит для небольшой команды. Но если планируете пропускать через VPN серьёзный трафик, лучше взять что-то помощнее.

Важный момент: убедитесь, что у вас есть root-доступ и статический IP. Также проверьте, что провайдер не блокирует VPN-трафик (некоторые дешёвые хостеры этим грешат).

Пошаговая установка OpenVPN

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

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

Теперь настроим инфраструктуру PKI (Public Key Infrastructure). Создадим директорию для Easy-RSA:

mkdir ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
chmod 700 ~/easy-rsa
cd ~/easy-rsa

Создаём файл конфигурации для Easy-RSA:

cat > vars << 'EOF'
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        "DigitalOcean"
set_var EASYRSA_REQ_EMAIL      "admin@example.com"
set_var EASYRSA_REQ_OU         "Community"
set_var EASYRSA_ALGO           "ec"
set_var EASYRSA_DIGEST         "sha512"
EOF

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

./easyrsa init-pki
./easyrsa build-ca nopass

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

./easyrsa gen-req server nopass
./easyrsa sign-req server server

Создаём ключ Диффи-Хеллмана и tls-auth ключ:

./easyrsa gen-dh
openvpn --genkey secret pki/ta.key

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

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

sudo cp pki/ca.crt /etc/openvpn/server/
sudo cp pki/issued/server.crt /etc/openvpn/server/
sudo cp pki/private/server.key /etc/openvpn/server/
sudo cp pki/ta.key /etc/openvpn/server/
sudo cp pki/dh.pem /etc/openvpn/server/

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

sudo tee /etc/openvpn/server/server.conf << 'EOF'
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt ta.key
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-GCM
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
EOF

Настройка сетевого форвардинга

Включаем IP forwarding:

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

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

sudo ufw allow 1194/udp
sudo ufw allow OpenSSH

Добавляем правила NAT в ufw:

sudo sed -i '1i# START OPENVPN RULES\n# NAT table rules\n*nat\n:POSTROUTING ACCEPT [0:0]\n# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)\n-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE\nCOMMIT\n# END OPENVPN RULES\n' /etc/ufw/before.rules

Изменяем политику форвардинга:

sudo sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/' /etc/default/ufw

Включаем ufw:

sudo ufw --force enable

Запуск и тестирование сервера

Запускаем OpenVPN сервер:

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

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

sudo systemctl status openvpn-server@server

Если всё настроено правильно, вы должны увидеть что-то вроде:

● openvpn-server@server.service - OpenVPN service for server
     Loaded: loaded (/lib/systemd/system/openvpn-server@.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-01-10 10:30:15 UTC; 5s ago

Создание клиентских конфигураций

Теперь создадим клиентский сертификат. Для каждого клиента нужно выполнить:

cd ~/easy-rsa
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

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

cat > ~/make_config.sh << 'EOF'
#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/easy-rsa/pki
OUTPUT_DIR=~/client-configs
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '\n') \
    ${KEY_DIR}/issued/${1}.crt \
    <(echo -e '\n') \
    ${KEY_DIR}/private/${1}.key \
    <(echo -e '\n') \
    ${KEY_DIR}/ta.key \
    <(echo -e '') \
    > ${OUTPUT_DIR}/${1}.ovpn
EOF

chmod +x ~/make_config.sh

Создаём директорию для клиентских конфигураций и базовый конфиг:

mkdir -p ~/client-configs

cat > ~/client-configs/base.conf << 'EOF'
client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-GCM
ignore-unknown-option block-outside-dns
block-outside-dns
verb 3
EOF

Не забудьте заменить YOUR_SERVER_IP на реальный IP вашего сервера!

Теперь генерируем конфигурацию для клиента:

./make_config.sh client1

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

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

# Оптимизация для высокой нагрузки
sndbuf 0
rcvbuf 0
push "sndbuf 0"
push "rcvbuf 0"

# Сжатие (осторожно, может быть уязвимо к VORACLE)
compress lz4-v2
push "compress lz4-v2"

# Для мобильных клиентов
push "persist-key"
push "persist-tun"

Мониторинг и отладка

Полезные команды для диагностики:

# Просмотр подключённых клиентов
sudo cat /var/log/openvpn/openvpn-status.log

# Просмотр логов
sudo tail -f /var/log/openvpn/openvpn.log

# Проверка сетевых интерфейсов
ip addr show tun0

# Проверка маршрутизации
ip route show

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

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

cat > ~/add_client.sh << 'EOF'
#!/bin/bash

if [ $# -ne 1 ]; then
    echo "Usage: $0 "
    exit 1
fi

CLIENT_NAME=$1
cd ~/easy-rsa

# Генерируем ключи
./easyrsa gen-req $CLIENT_NAME nopass
./easyrsa sign-req client $CLIENT_NAME

# Создаём конфигурацию
~/make_config.sh $CLIENT_NAME

echo "Client configuration created: ~/client-configs/$CLIENT_NAME.ovpn"
EOF

chmod +x ~/add_client.sh

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

cat > ~/revoke_client.sh << 'EOF'
#!/bin/bash

if [ $# -ne 1 ]; then
    echo "Usage: $0 "
    exit 1
fi

CLIENT_NAME=$1
cd ~/easy-rsa

# Отзываем сертификат
./easyrsa revoke $CLIENT_NAME
./easyrsa gen-crl

# Копируем CRL в папку OpenVPN
sudo cp pki/crl.pem /etc/openvpn/server/

# Добавляем в конфигурацию сервера (если ещё не добавлено)
if ! grep -q "crl-verify" /etc/openvpn/server/server.conf; then
    echo "crl-verify crl.pem" | sudo tee -a /etc/openvpn/server/server.conf
fi

# Перезапускаем сервер
sudo systemctl restart openvpn-server@server

echo "Client $CLIENT_NAME revoked and CRL updated"
EOF

chmod +x ~/revoke_client.sh

Сравнение с альтернативными решениями

Решение Плюсы Минусы Использование
OpenVPN Максимальная совместимость, гибкость настройки, проверен временем Сложная настройка, относительно медленный Корпоративные сети, обход блокировок
WireGuard Высокая скорость, простая настройка, современная криптография Молодой проект, меньше функций Личное использование, современные системы
IPSec Встроен в ядро, высокая скорость Сложная настройка, проблемы с NAT Site-to-site подключения
Shadowsocks Отличное обхождение блокировок Не полноценный VPN, меньше безопасности Обход цензуры в странах с жёстким контролем

Интеграция с Docker и автоматизация

Если вы используете Docker, можете создать контейнер с OpenVPN:

cat > Dockerfile << 'EOF'
FROM ubuntu:24.04

RUN apt-get update && apt-get install -y \
    openvpn \
    easy-rsa \
    iptables \
    && rm -rf /var/lib/apt/lists/*

COPY start.sh /start.sh
RUN chmod +x /start.sh

EXPOSE 1194/udp

CMD ["/start.sh"]
EOF

Также OpenVPN отлично интегрируется с системами мониторинга вроде Prometheus через openvpn_exporter.

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

Несколько важных моментов для повышения безопасности:

  • Смените стандартный порт: вместо 1194 используйте что-то менее очевидное
  • Используйте TCP вместо UDP: для обхода DPI в некоторых странах
  • Настройте fail2ban: для защиты от брутфорса
  • Регулярно обновляйте сертификаты: не забывайте про сроки действия
  • Мониторьте логи: следите за подозрительной активностью

Пример настройки fail2ban для OpenVPN:

sudo apt install fail2ban -y

cat > /etc/fail2ban/jail.local << 'EOF'
[openvpn]
enabled = true
port = 1194
protocol = udp
filter = openvpn
logpath = /var/log/openvpn/openvpn.log
maxretry = 3
bantime = 3600
EOF

Нестандартные применения

OpenVPN можно использовать не только для классических VPN-подключений:

  • Site-to-site подключения: связывание офисов через интернет
  • Контейнерные сети: безопасное соединение Docker-контейнеров
  • IoT устройства: безопасное подключение датчиков и контроллеров
  • Обход geo-блокировок: доступ к заблокированному контенту
  • Разработка: безопасный доступ к development серверам

Мониторинг производительности

Для мониторинга нагрузки на OpenVPN сервер используйте:

# Статистика подключений
sudo openvpn --management localhost 7505

# Мониторинг трафика
sudo iftop -i tun0

# Использование CPU и памяти
ps aux | grep openvpn

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

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

Основные рекомендации:

  • Начните с базовой настройки и постепенно добавляйте дополнительные функции
  • Автоматизируйте процессы создания и отзыва клиентских сертификатов
  • Не забывайте про безопасность: регулярно обновляйте систему и мониторьте логи
  • Тестируйте производительность под нагрузкой перед продакшн-использованием
  • Делайте бэкапы директории с сертификатами — потеря CA приведёт к необходимости переконфигурировать всех клиентов

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

Удачи в настройке! И помните — лучший VPN тот, который настроен правильно и регулярно обслуживается.


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

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

Leave a reply

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