Настройка VPN на сервере Ubuntu: пошаговое руководство по OpenVPN

Подробное руководство по установке и настройке VPN-сервера OpenVPN на Ubuntu. Рассматриваются требования, установка, создание PKI, настройка сервера и клиентов, а также вопросы безопасности и производительности.

Зачем нужен собственный VPN-сервер на Ubuntu

Собственный VPN-сервер дает полный контроль над безопасностью и конфиденциальностью интернет-соединения. В отличие от коммерческих VPN-сервисов, вы не зависите от политики логирования стороннего провайдера и можете быть уверены, что ваши данные не передаются третьим лицам. Это особенно актуально для системных администраторов, которым требуется реализовать политику сетевой безопасности, например, ограничить доступ к корпоративному почтовому серверу только с IP-адресов VPN.

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

Выбор подхода: OpenVPN Community или Access Server

Существует два основных способа развертывания VPN на Ubuntu: классический OpenVPN с ручной настройкой и OpenVPN Access Server (AS) с веб-интерфейсом. Первый вариант требует больше ручной работы, но дает максимальную гибкость и не требует лицензионных отчислений. Второй — проще в установке и управлении, но имеет ограничения по количеству одновременных подключений в бесплатной версии.

OpenVPN Community подходит для опытных администраторов, которым нужен полный контроль над каждым аспектом конфигурации. Access Server удобен для быстрого развертывания и управления через браузер, поддерживает RADIUS, LDAP и двухфакторную аутентификацию. В этом руководстве мы сосредоточимся на OpenVPN Community, так как он более универсален и не требует покупки лицензии. Однако в конце статьи мы рассмотрим и Access Server, чтобы вы могли выбрать подходящий вариант.

Предварительные требования для установки VPN-сервера

Перед началом настройки убедитесь, что у вас есть:

  • Сервер с Ubuntu 20.04, 22.04, 24.04 или 25.04. Все команды в руководстве совместимы с этими версиями.
  • Пользователь с правами sudo (не root) на сервере.
  • Включенный брандмауэр UFW.
  • Отдельный сервер для центра сертификации (CA). Это рекомендуется для безопасности: если CA скомпрометирован, злоумышленник сможет выпускать поддельные сертификаты. В идеале CA-сервер должен быть изолирован и не запускать других служб.
  • Клиентское устройство (компьютер, смартфон) для проверки подключения.

Важно: если вы отключили аутентификацию по паролю на серверах, вам потребуется настроить SSH-ключи для передачи файлов между сервером OpenVPN и CA. В противном случае можно временно включить парольный вход.

Установка OpenVPN и Easy-RSA на сервер

Первым шагом является установка пакетов openvpn и easy-rsa. Обновите индекс пакетов и выполните установку:

sudo apt update
sudo apt install openvpn easy-rsa

После установки создайте каталог для Easy-RSA в домашней папке пользователя:

mkdir ~/easy-rsa

Затем создайте символическую ссылку на скрипты easy-rsa, чтобы всегда использовать актуальные версии из пакета:

ln -s /usr/share/easy-rsa/* ~/easy-rsa/

Ограничьте доступ к каталогу, чтобы только ваш пользователь мог читать и изменять файлы:

sudo chown $USER ~/easy-rsa
chmod 700 ~/easy-rsa

Теперь вы готовы к созданию инфраструктуры открытых ключей (PKI).

Создание инфраструктуры открытых ключей (PKI) на сервере OpenVPN

PKI — это набор файлов и процессов для управления сертификатами. На сервере OpenVPN вам нужно создать собственную PKI, даже если вы используете отдельный CA. Это необходимо для хранения запросов на сертификаты и подписанных сертификатов.

Перейдите в каталог easy-rsa и создайте файл vars с параметрами алгоритмов:

cd ~/easy-rsa
nano vars

Вставьте следующие строки:

set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Использование эллиптических кривых (ECC) обеспечивает более высокую производительность по сравнению с RSA, так как ключи меньше и вычисления быстрее. Это особенно важно при установке TLS-соединений.

Инициализируйте PKI:

./easyrsa init-pki

Эта команда создаст структуру каталогов для хранения ключей и сертификатов. На сервере OpenVPN не нужно создавать CA — этим занимается отдельный сервер.

Создание сертификата сервера и подпись в центре сертификации

Теперь создайте закрытый ключ и запрос на подпись сертификата (CSR) для сервера OpenVPN. Выполните:

cd ~/easy-rsa
./easyrsa gen-req server nopass

Эта команда создаст файлы server.key (приватный ключ) и server.req (запрос). Скопируйте ключ в каталог /etc/openvpn/server:

sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/server/

Затем передайте файл server.req на CA-сервер. Это можно сделать через scp или вручную скопировав содержимое. На CA-сервере импортируйте запрос:

cd ~/easy-rsa
./easyrsa import-req /tmp/server.req server

И подпишите его:

./easyrsa sign-req server server

Вам будет предложено подтвердить подпись и ввести пароль CA. После подписания скопируйте полученный сертификат server.crt обратно на сервер OpenVPN в каталог /etc/openvpn/server/.

Настройка сервера OpenVPN: основные параметры

Создайте файл конфигурации сервера /etc/openvpn/server/server.conf. Вот минимальный рабочий пример:

port 1194
proto udp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
tls-crypt /etc/openvpn/server/ta.key
cipher AES-256-GCM
auth SHA256
user nobody
group nogroup
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 1.1.1.1"
keepalive 10 120
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3

Параметр tls-crypt добавляет дополнительный уровень защиты, скрывая TLS-рукопожатие и защищая от DoS-атак. Файл ta.key создается командой openvpn --genkey secret ta.key.

Включите IP-пересылку, чтобы клиенты могли маршрутизировать трафик через сервер:

sudo sysctl -w net.ipv4.ip_forward=1

Для постоянного включения добавьте строку net.ipv4.ip_forward=1 в файл /etc/sysctl.conf.

Настройка брандмауэра UFW и NAT

Чтобы клиенты могли выходить в интернет через VPN, необходимо настроить NAT (маскирование) и разрешить трафик на порт OpenVPN. Отредактируйте файл /etc/ufw/before.rules, добавив в начало:

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

Замените eth0 на ваш сетевой интерфейс (проверьте командой ip route). Затем разрешите порт 1194:

sudo ufw allow 1194/udp
sudo ufw allow OpenSSH

Перезапустите UFW:

sudo ufw disable
sudo ufw enable

Проверьте правила NAT:

sudo iptables -t nat -L POSTROUTING

Вы должны увидеть правило MASQUERADE. Это обеспечит корректную маршрутизацию трафика от VPN-клиентов.

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

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

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

Затем передайте запрос на CA-сервер, подпишите его и верните сертификат. После этого создайте файл профиля 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 SHA256
verb 3

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

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

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

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

Этот профиль можно импортировать в любой клиент OpenVPN: на Windows, macOS, Linux, Android или iOS. Для удобства можно создать скрипт, который автоматически генерирует профили.

Подключение клиентов и проверка работы VPN

Установите клиент OpenVPN на устройство. На Ubuntu это можно сделать командой:

sudo apt install openvpn

Затем скопируйте профиль .ovpn в /etc/openvpn/ и запустите службу:

sudo systemctl start openvpn@client1

Проверьте статус:

sudo systemctl status openvpn@client1

Если вы видите сообщение "Initialization Sequence Completed", соединение установлено. Проверьте ваш публичный IP-адрес, открыв сайт icanhazip.com — он должен соответствовать IP вашего VPN-сервера.

Для автоматического запуска при загрузке системы выполните:

sudo systemctl enable openvpn@client1

Также можно настроить Network Manager для управления VPN-соединениями через графический интерфейс, установив пакеты network-manager-openvpn и network-manager-openvpn-gnome.

Оптимизация производительности и безопасности

Для повышения скорости VPN можно включить алгоритм TCP BBR на сервере. Добавьте в файл /etc/sysctl.d/60-custom.conf:

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

Примените изменения:

sudo sysctl -p /etc/sysctl.d/60-custom.conf

Это улучшит пропускную способность при использовании TCP.

Для защиты от утечки DNS настройте клиентам использование DNS-серверов через VPN, как указано в конфигурации сервера. Также рекомендуется регулярно обновлять систему и следить за журналами OpenVPN.

Если вы используете OpenVPN Access Server, можно установить бесплатный сертификат Let's Encrypt для устранения предупреждений безопасности в браузере. Для этого потребуется доменное имя и открытые порты 80 и 443.

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

Какой порт использует OpenVPN по умолчанию?

По умолчанию OpenVPN использует UDP-порт 1194. Этот порт рекомендуется для оптимальной производительности. В некоторых сетях, где UDP блокируется, можно использовать TCP-порт 443, который часто разрешен, так как используется для HTTPS-трафика. В OpenVPN Access Server по умолчанию прослушиваются TCP-порт 443 и UDP-порт 1194.

Нужен ли отдельный сервер для центра сертификации?

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

Как ускорить работу VPN-сервера на Ubuntu?

Используйте протокол UDP вместо TCP, так как он быстрее. Включите алгоритм TCP BBR для улучшения пропускной способности. Используйте современное шифрование AES-256-GCM и эллиптические кривые (ECC) для обмена ключами — это снижает нагрузку на процессор. Также убедитесь, что сервер имеет достаточные ресурсы и сетевую пропускную способность.

Можно ли использовать OpenVPN для обхода блокировок в Китае?

OpenVPN может быть заблокирован государственным брандмауэром. В таких случаях можно использовать обертывание трафика в TLS-туннель с помощью Stunnel, чтобы скрыть факт использования VPN. Также можно настроить OpenVPN на порту 443, который выглядит как обычный HTTPS-трафик. Однако эффективность зависит от конкретных методов блокировки.

Как добавить нового пользователя VPN?

Для каждого пользователя нужно создать отдельный сертификат. На сервере OpenVPN выполните ./easyrsa gen-req username nopass, затем подпишите запрос на CA-сервере и передайте сертификат пользователю. После этого создайте профиль .ovpn с включенными сертификатами. В OpenVPN Access Server пользователи создаются через веб-панель администратора.

Что делать, если VPN-соединение устанавливается, но нет доступа в интернет?

Проверьте, включена ли IP-пересылка на сервере (sysctl net.ipv4.ip_forward). Убедитесь, что правило NAT в UFW настроено правильно и интерфейс указан верно. Также проверьте, что DNS-серверы, передаваемые клиентам, доступны. Попробуйте выполнить ping до 8.8.8.8 с клиента — если это работает, проблема в DNS.