Ubuntu 24.04 VPN: установка OpenVPN, настройка сервера и клиентов

Подробное руководство по установке и настройке OpenVPN на Ubuntu 24.04: требования, PKI, конфигурация, подключение клиентов, безопасность и устранение неполадок.

Зачем нужен VPN на Ubuntu 24.04

VPN (Virtual Private Network) создает зашифрованный туннель между вашим устройством и удаленным сервером, защищая трафик от перехвата и подмены. На Ubuntu 24.04 VPN используется для безопасного доступа к корпоративным ресурсам, обхода региональных ограничений, защиты в публичных Wi-Fi сетях и обеспечения конфиденциальности в интернете.

OpenVPN — одно из самых популярных решений с открытым исходным кодом. Он поддерживает современные алгоритмы шифрования (AES-256-GCM, ChaCha20-Poly1305), работает через UDP и TCP, а также доступен на всех основных платформах. В отличие от проприетарных сервисов, OpenVPN позволяет полностью контролировать инфраструктуру и не зависит от сторонних провайдеров.

В этой статье мы рассмотрим установку OpenVPN на Ubuntu 24.04, настройку сервера и клиентов, а также вопросы безопасности и производительности.

Требования к серверу и подготовка системы

Перед установкой OpenVPN убедитесь, что ваш сервер соответствует минимальным требованиям. Для небольшой конфигурации достаточно 1 ГБ ОЗУ и одного виртуального ядра, но для стабильной работы с несколькими клиентами рекомендуется 2 ГБ ОЗУ и 2 vCPU. Также потребуется доступ к серверу по SSH с правами sudo.

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

sudo apt update
sudo apt upgrade -y

Установите OpenVPN и Easy-RSA — инструмент для управления сертификатами:

sudo apt install openvpn easy-rsa

Проверьте версию OpenVPN:

openvpn --version

В выводе вы увидите информацию о версии (например, 2.6.12) и поддерживаемых алгоритмах. Это подтверждает, что установка прошла успешно.

Настройка инфраструктуры открытых ключей (PKI)

OpenVPN использует собственную PKI для аутентификации сервера и клиентов. Вам потребуется создать корневой сертификат (CA), серверный сертификат и ключи для каждого клиента.

Скопируйте каталог easy-rsa в /etc/openvpn, чтобы изменения не потерялись при обновлении пакетов:

sudo mkdir /etc/openvpn/easy-rsa
sudo ln -s /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

Перейдите в каталог и инициализируйте PKI:

cd /etc/openvpn/easy-rsa
sudo ./easyrsa init-pki

Создайте корневой сертификат CA:

sudo ./easyrsa build-ca

Вам будет предложено ввести пароль для защиты CA и указать общее имя (Common Name), например, OpenVPN-CA. Этот пароль потребуется при подписании сертификатов.

Создайте ключ и сертификат для сервера:

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

Сгенерируйте параметры Диффи-Хеллмана для безопасного обмена ключами:

sudo ./easyrsa gen-dh

Создайте ключ TLS для дополнительной защиты от атак:

sudo openvpn --genkey secret ta.key

Скопируйте все необходимые файлы в /etc/openvpn:

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

Создание конфигурации сервера OpenVPN

OpenVPN поставляется с примером конфигурации, который можно скопировать и адаптировать. Скопируйте файл server.conf в /etc/openvpn:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/myserver.conf

Отредактируйте файл с помощью nano или другого редактора:

sudo nano /etc/openvpn/myserver.conf

Внесите следующие изменения:

  • Укажите пути к сертификатам и ключам:
  ca /etc/openvpn/ca.crt
  cert /etc/openvpn/myservername.crt
  key /etc/openvpn/myservername.key
  dh /etc/openvpn/dh.pem
  • Включите TLS-аутентификацию (рекомендуется tls-crypt для лучшей защиты):
  tls-crypt /etc/openvpn/ta.key
  • Настройте шифрование и аутентификацию:
  data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
  auth SHA512
  • Укажите подсеть для клиентов (например, 10.10.10.0):
  server 10.10.10.0 255.255.255.0
  • Разрешите перенаправление всего трафика через VPN:
  push "redirect-gateway def1 bypass-dhcp"
  • Настройте DNS-серверы для клиентов:
  push "dhcp-option DNS 8.8.8.8"
  push "dhcp-option DNS 1.1.1.1"
  • Для повышения безопасности запускайте OpenVPN с правами непривилегированного пользователя:
  user nobody
  group nogroup

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

sudo openvpn --config /etc/openvpn/myserver.conf --test

Если ошибок нет, включите IP-пересылку:

echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/50-enable-ipv4-forwarding.conf
sudo sysctl -p /etc/sysctl.d/50-enable-ipv4-forwarding.conf

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

OpenVPN использует шаблонные systemd-службы, поэтому для запуска сервера с конфигурацией myserver.conf выполните:

sudo systemctl start openvpn@myserver
sudo systemctl enable openvpn@myserver

Проверьте статус службы:

sudo systemctl status openvpn@myserver

Убедитесь, что интерфейс tun0 создан:

ip addr show tun0

Настройте файрвол, чтобы разрешить входящие соединения на порт 1194 (UDP) и включить NAT для исходящего трафика. Если используется UFW:

sudo ufw allow 1194/udp
sudo ufw allow OpenSSH
sudo ufw enable

Добавьте правила NAT в /etc/ufw/before.rules (перед строкой *filter):

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

Замените eth0 на ваш сетевой интерфейс. Перезапустите UFW:

sudo ufw disable
sudo ufw enable

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

Для каждого клиента необходимо создать отдельный сертификат и ключ. В каталоге easy-rsa выполните:

cd /etc/openvpn/easy-rsa
sudo ./easyrsa gen-req client1 nopass
sudo ./easyrsa sign-req client client1

Скопируйте файлы клиента в отдельный каталог, например, /etc/openvpn/clients/client1:

sudo mkdir -p /etc/openvpn/clients/client1
sudo cp pki/ca.crt pki/issued/client1.crt pki/private/client1.key /etc/openvpn/clients/client1/

Создайте файл конфигурации клиента client1.ovpn со следующим содержимым:

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-GCM
auth SHA512
verb 3

(содержимое ca.crt)

(содержимое client1.crt)

(содержимое client1.key)

(содержимое ta.key)

Замените your-server-ip на реальный IP-адрес сервера. Вставьте содержимое соответствующих файлов между тегами. Этот файл можно передать клиенту по защищенному каналу (например, через scp).

Подключение клиентов на разных платформах

Клиентский файл .ovpn можно использовать на Linux, Windows, macOS и мобильных устройствах.

Linux (CLI):

Установите OpenVPN:

sudo apt install openvpn

Подключитесь к серверу:

sudo openvpn --config client1.ovpn

Проверьте, что ваш IP-адрес изменился:

curl icanhazip.com

Linux (GUI):

В настройках сети выберите «VPN» → «Добавить» → «Импортировать из файла», укажите файл .ovpn и активируйте подключение.

Windows:

Скачайте и установите официальный клиент OpenVPN GUI, импортируйте файл .ovpn и нажмите «Подключить».

macOS:

Используйте Tunnelblick или официальный клиент OpenVPN Connect, импортируйте конфигурацию и подключитесь.

Мобильные устройства:

Установите приложение OpenVPN Connect из App Store или Google Play, импортируйте файл .ovpn и подключитесь.

Мониторинг и управление сервером

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

status /var/log/openvpn-status.log

Перезапустите службу:

sudo systemctl restart openvpn@myserver

Просмотрите журнал:

cat /var/log/openvpn-status.log

В выводе вы увидите список клиентов с их виртуальными IP-адресами, временем подключения и объемом переданных данных.

Для добавления новых клиентов просто повторите процедуру создания сертификатов и конфигураций. Для удаления клиента отзовите его сертификат:

cd /etc/openvpn/easy-rsa
sudo ./easyrsa revoke client1

Обновите список отозванных сертификатов:

sudo ./easyrsa gen-crl

Скопируйте файл crl.pem в /etc/openvpn и добавьте в конфигурацию сервера:

crl-verify /etc/openvpn/crl.pem

Автоматизация установки с помощью скрипта

Для быстрой установки OpenVPN можно использовать официальный скрипт openvpn-install.sh. Этот метод подходит, если вы не хотите вручную настраивать PKI и конфигурацию.

Скачайте скрипт и сделайте его исполняемым:

wget https://git.io/vpn -O openvpn-install.sh
chmod +x openvpn-install.sh

Запустите скрипт с правами sudo:

sudo ./openvpn-install.sh

Скрипт задаст несколько вопросов:

  • Выбор IP-адреса сервера
  • Протокол (рекомендуется UDP)
  • Порт (по умолчанию 1194)
  • DNS-сервер для клиентов
  • Имя клиента

После завершения будет создан файл .ovpn в домашнем каталоге. Скрипт также позволяет добавлять и удалять клиентов при повторном запуске.

Этот метод значительно упрощает процесс, но дает меньше контроля над деталями конфигурации. Для продакшн-среды рекомендуется ручная настройка.

Безопасность и устранение неполадок

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

  • Используйте сильные пароли для CA и клиентских ключей.
  • Регулярно обновляйте OpenVPN и Easy-RSA.
  • Ограничьте доступ к серверу по SSH с помощью ключей и файрвола.
  • Используйте tls-crypt для защиты от сканирования портов.
  • Включите ведение журналов и мониторинг.

Частые проблемы:

  • Нет соединения: проверьте, что порт 1194 открыт в файрволе и что IP-пересылка включена.
  • Клиент не получает IP-адрес: убедитесь, что подсеть в конфигурации сервера не конфликтует с другими сетями.
  • Медленная работа: используйте UDP вместо TCP, проверьте качество канала и настройте алгоритмы шифрования.
  • Ошибки сертификатов: проверьте, что все пути к файлам указаны верно и что сертификаты не истекли.

Если проблема не решается, просмотрите журналы сервера:

sudo journalctl -u openvpn@myserver -f

Вопросы и ответы

Какие минимальные требования к серверу для OpenVPN на Ubuntu 24.04?

Для небольшого количества клиентов достаточно 1 ГБ ОЗУ и 1 vCPU. Для стабильной работы с несколькими пользователями рекомендуется 2 ГБ ОЗУ и 2 vCPU. Также необходим доступ по SSH с правами sudo.

Чем отличается tls-auth от tls-crypt в OpenVPN?

tls-auth добавляет HMAC-подпись к каждому пакету, защищая от сканирования портов и DoS-атак. tls-crypt дополнительно шифрует весь TLS-канал, что скрывает даже факт установки соединения. Рекомендуется использовать tls-crypt, если версия OpenVPN поддерживает его (2.4.0 и выше).

Как добавить нового клиента после установки сервера?

Перейдите в каталог easy-rsa и выполните:

sudo ./easyrsa gen-req client2 nopass
sudo ./easyrsa sign-req client client2

Затем создайте файл .ovpn, включив в него сертификаты и ключи клиента, а также параметры сервера. Скопируйте файл на устройство клиента.

Почему клиент не может подключиться, хотя сервер работает?

Проверьте:

  • Открыт ли порт 1194 в файрволе (ufw status).
  • Включена ли IP-пересылка (sysctl net.ipv4.ip_forward).
  • Правильно ли указан IP-адрес сервера в конфигурации клиента.
  • Совпадают ли алгоритмы шифрования и аутентификации.
  • Не истекли ли сертификаты.
Можно ли использовать OpenVPN для обхода блокировок в России?

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

Как отозвать сертификат клиента?

В каталоге easy-rsa выполните:

sudo ./easyrsa revoke client1
sudo ./easyrsa gen-crl

Скопируйте crl.pem в /etc/openvpn и добавьте в конфигурацию сервера строку crl-verify /etc/openvpn/crl.pem. Перезапустите службу.

Какой протокол выбрать: UDP или TCP?

UDP быстрее и предпочтителен для большинства случаев, так как не имеет оверхэда на подтверждение доставки. TCP может быть полезен в сетях, где UDP блокируется, но работает медленнее. По умолчанию OpenVPN использует UDP.