OpenVPN на VPS Ubuntu: классическая установка
Пошаговая инструкция по установке OpenVPN на VPS с Ubuntu: от установки пакетов до запуска сервера и генерации клиентских сертификатов.
Содержание
Что такое OpenVPN и зачем он нужен на VPS
OpenVPN — это популярное решение для создания виртуальных частных сетей с открытым исходным кодом. Оно позволяет безопасно подключаться к вашему VPS из любой точки мира, шифруя весь трафик. Классическая установка подразумевает ручную настройку сервера и клиентов с использованием сертификатов. В отличие от панелей вроде OpenVPN Access Server, классический вариант полностью бесплатен и даёт полный контроль над конфигурацией.
Типичные сценарии использования — доступ к домашней или офисной сети, обход гео-блокировок, защита публичного Wi-Fi. В этой статье мы рассмотрим установку на VPS с Ubuntu (18.04/20.04/22.04/24.04). Актуальные версии пакетов уточняйте в официальных репозиториях Ubuntu и на сайтах проектов.
Подготовка VPS к установке OpenVPN
Перед началом убедитесь, что у вас есть root-доступ к серверу и установлен Ubuntu LTS. Обновите систему и установите необходимые пакеты:
sudo apt update
sudo apt upgrade -y
sudo apt install openvpn easy-rsa
Пакет openvpn содержит демон, а easy-rsa — скрипты для управления ключами и сертификатами. Также стоит установить iptables и net-tools, если они ещё не установлены.
Включите IPv4-форвардинг, чтобы трафик от клиентов мог проходить через сервер:
sudo sysctl -w net.ipv4.ip_forward=1
Для постоянного включения отредактируйте файл /etc/sysctl.conf:
net.ipv4.ip_forward=1
и выполните sudo sysctl -p.
Установка Easy-RSA и создание PKI
Перейдите в каталог Easy-RSA и подготовьте инфраструктуру открытых ключей (PKI). На Ubuntu обычно каталог называется /usr/share/easy-rsa.
cd /usr/share/easy-rsa
sudo cp vars.example vars
Отредактируйте файл vars, задав значения по умолчанию для страны, региона, организации и т.д. Затем инициализируйте PKI:
sudo ./easyrsa init-pki
Создайте корневой сертификат (CA) с длиной ключа 4096 бит:
sudo ./easyrsa build-ca nopass
Укажите Common Name, например, vpn.example.com. Далее сгенерируйте параметры Диффи-Хеллмана (может занять несколько минут):
sudo ./easyrsa gen-dh
Создайте сертификат и ключ для сервера. Укажите имя сервера, например, server:
sudo ./easyrsa gen-req server nopass
sudo ./easyrsa sign-req server server
Теперь нужно создать HMAC-ключ для TLS-аутентификации:
sudo openvpn --genkey secret ta.key
Скопируйте все созданные файлы в каталог OpenVPN:
sudo cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem /etc/openvpn/
sudo cp ta.key /etc/openvpn/
Настройка сервера OpenVPN
Создайте файл конфигурации сервера /etc/openvpn/server.conf. Минимальный пример:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist 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-CBC
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
В строке tls-auth ta.key 0 единица означает, что на сервере используется первый ключ из HMAC-файла. Теперь включите NAT, чтобы клиенты могли выходить в интернет через VPS. Настройте iptables:
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
sudo iptables-save > /etc/iptables/rules.v4
Если файла /etc/iptables/rules.v4 нет, установите пакет iptables-persistent.
Генерация сертификатов для клиента
Для каждого клиента создайте отдельный сертификат. Например, для клиента с именем client1 выполните:
cd /usr/share/easy-rsa
sudo ./easyrsa gen-req client1 nopass
sudo ./easyrsa sign-req client client1
Теперь необходимо подготовить клиентский конфигурационный файл. Скопируйте ca.crt, client1.crt, client1.key и ta.key на компьютер клиента. Создайте файл client1.ovpn на основе шаблона:
client
dev tun
proto udp
remote YOUR_VPS_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
key-direction 1
<ca>
... содержимое ca.crt ...
</ca>
<cert>
... содержимое client1.crt ...
</cert>
<key>
... содержимое client1.key ...
</key>
<tls-auth>
... содержимое ta.key ...
</tls-auth>
Вместо YOUR_VPS_IP подставьте реальный IP-адрес вашего сервера.
Запуск и проверка работы OpenVPN
Запустите сервер OpenVPN и добавьте его в автозагрузку:
sudo systemctl enable openvpn@server
sudo systemctl start openvpn@server
Проверьте статус:
sudo systemctl status openvpn@server
Убедитесь, что интерфейс tun0 создан:
ip addr show tun0
Для проверки подключения используйте клиентское ПО OpenVPN на своём компьютере. После подключения должно появиться сетевое соединение с IP-адресом 10.8.0.x.
Типичные проблемы и их решение
Если клиент не подключается, проверьте:
- Открыт ли порт 1194/udp в файрволе VPS.
- Корректно ли указан IP-адрес и порт в
.ovpnфайле. - Не конфликтуют ли подсети (например, 10.8.0.0 уже используется где-то в вашей сети).
Также убедитесь, что tls-auth настроен одинаково на сервере и клиенте (в файле сервера — 0, в клиентском — 1). Если трафик не проходит, проверьте маршрутизацию и NAT.
Мини-чеклист
- Обновить систему и установить openvpn, easy-rsa
- Настроить IPv4 forwarding
- Инициализировать PKI и создать CA
- Сгенерировать серверный сертификат и DH-параметры
- Скопировать ключи в /etc/openvpn
- Написать server.conf
- Настроить iptables для NAT
- Создать клиентские сертификаты
- Сгенерировать клиентский .ovpn файл
- Запустить сервис и проверить подключение
Частые ошибки
- Забывают открыть порт 1194/udp в файрволе
- Используют одинаковые имена для сервера и клиента в easy-rsa
- Неправильно указывают key-direction в конфигурации
- Не включают IP-форвардинг, из-за чего нет интернета у клиентов
- Копируют ключи в незащищённые каталоги
- Не проверяют актуальные версии пакетов в репозиториях Ubuntu
Источники и документация
FAQ
Сколько времени занимает установка OpenVPN по классической схеме?
В среднем при наличии опыта с Linux и SSH — 15-20 минут. Основное время уходит на генерацию DH-параметров, особенно на слабых VPS.
Может ли OpenVPN работать через TCP вместо UDP?
Да, в конфигурации можно указать proto tcp и порт 443. Это часто помогает обойти агрессивные файрволы, но скорость соединения обычно ниже.
Как добавить нового клиента без перезапуска сервера?
Создайте новый сертификат и ключ через easy-rsa, сгенерируйте новый .ovpn файл. Сервер автоматически примет клиента после подписания — перезапуск не требуется.
Безопасно ли использовать NOPASS ключи?
Ключи без пароля удобны для автоматического запуска, но увеличивают риск компрометации. Для стационарных серверов это допустимо, но старайтесь защищать сами файлы.
Хотите перейти сразу к рабочему доступу?
Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.
Получить доступ