Зачем нужен 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.comLinux (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.