Зачем нужен собственный 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.