- Home »

Как настроить сервер 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 тот, который настроен правильно и регулярно обслуживается.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.