Установка и настройка OpenVPN на сервере
Запустить на сервере одной командой (сначала проверьте содержимое скрипта ниже):
curl -sSL https://cp.lv/scripts/openvpn-na-servere.sh | sudo bash…или через wget:
wget -qO- https://cp.lv/scripts/openvpn-na-servere.sh | sudo bashСодержимое скрипта openvpn-na-servere.sh:
#!/usr/bin/env bash
# Ручная установка OpenVPN: CA, сертификаты, конфиг сервера (Ubuntu/Debian)
set -euo pipefail
RSA_DIR=/etc/openvpn/easy-rsa
WAN_IF=$(ip route list default | awk '{print $5; exit}')
export EASYRSA_BATCH=1
# 1. Установка пакетов
sudo apt update && sudo apt install -y openvpn easy-rsa
# 2. Центр сертификации и ключи (неинтерактивно)
sudo make-cadir "$RSA_DIR"
cd "$RSA_DIR"
sudo -E ./easyrsa init-pki
sudo -E ./easyrsa build-ca nopass
sudo -E ./easyrsa gen-req server nopass
sudo -E ./easyrsa sign-req server server
sudo -E ./easyrsa gen-dh
sudo openvpn --genkey secret /etc/openvpn/ta.key
sudo cp pki/ca.crt pki/dh.pem pki/issued/server.crt pki/private/server.key /etc/openvpn/
# 3. Конфиг сервера (кавычки 'EOF' — директивы пишутся дословно)
sudo tee /etc/openvpn/server.conf > /dev/null << 'EOF'
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
server 10.9.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
keepalive 10 120
cipher AES-256-GCM
user nobody
group nogroup
persist-key
persist-tun
verb 3
EOF
# 4. Форвардинг, NAT и firewall
echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-openvpn.conf
sudo sysctl -p /etc/sysctl.d/99-openvpn.conf
sudo iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o "$WAN_IF" -j MASQUERADE
sudo ufw allow 1194/udp || true
# 5. Запуск
sudo systemctl enable --now openvpn@server
echo "Готово: OpenVPN слушает 1194/udp. Клиента создайте через easyrsa gen-req."
Быстрее всего OpenVPN разворачивается готовым скриптом: он ставит пакеты, создаёт центр сертификации, генерирует конфиг сервера и первый клиентский .ovpn-профиль. Ниже — и автоматический способ, и ручная настройка через easy-rsa, чтобы понимать, что происходит под капотом.
Когда выбирать OpenVPN
OpenVPN проверен временем, работает по TCP и UDP, легко проходит через жёсткие firewall (порт 443/TCP маскируется под HTTPS). Если нужна максимальная совместимость и обход блокировок — это надёжный выбор. Для скорости и простоты чаще берут WireGuard.
Требования: VPS с 1 vCPU и 512 МБ RAM, Ubuntu/Debian, root-доступ, публичный IPv4.
Быстрый способ: скрипт
Популярный проверенный скрипт разворачивает всё в интерактивном режиме:
apt update && apt install -y curl
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
./openvpn-install.sh
Скрипт спросит IP, протокол (UDP рекомендуется), порт (1194 по умолчанию), DNS. По завершении в домашней папке появится файл <имя>.ovpn — это готовый профиль клиента.
Чтобы добавить нового клиента позже, запустите скрипт повторно — он предложит меню.
Ручная настройка
Шаг 1. Установка пакетов
apt update
apt install -y openvpn easy-rsa
Шаг 2. Центр сертификации
make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
./easyrsa init-pki
./easyrsa build-ca nopass
Шаг 3. Сертификат сервера и ключи
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-dh
openvpn --genkey secret /etc/openvpn/ta.key
Скопируйте нужные файлы:
cp pki/ca.crt pki/dh.pem pki/issued/server.crt pki/private/server.key /etc/openvpn/
Шаг 4. Конфиг сервера
Откройте /etc/openvpn/server.conf в редакторе (sudo nano /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
server 10.9.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
keepalive 10 120
cipher AES-256-GCM
user nobody
group nogroup
persist-key
persist-tun
verb 3
Либо создайте конфиг целиком одной командой — скопируйте и вставьте в консоль (кавычки 'EOF' записывают директивы дословно):
sudo tee /etc/openvpn/server.conf > /dev/null << 'EOF'
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
server 10.9.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
keepalive 10 120
cipher AES-256-GCM
user nobody
group nogroup
persist-key
persist-tun
verb 3
EOF
Шаг 5. Форвардинг и firewall
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-openvpn.conf
sysctl -p /etc/sysctl.d/99-openvpn.conf
iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE
ufw allow 1194/udp
Замените eth0 на ваш внешний интерфейс (ip route list default).
Шаг 6. Запуск
systemctl enable --now openvpn@server
systemctl status openvpn@server
Генерация клиентского профиля
Создайте ключ клиента:
cd /etc/openvpn/easy-rsa
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
Соберите .ovpn, встроив сертификаты между тегами <ca>, <cert>, <key>, <tls-auth>, и укажите:
client
dev tun
proto udp
remote <IP_вашего_VPS> 1194
cipher AES-256-GCM
key-direction 1
Передайте файл на устройство и импортируйте в клиент OpenVPN Connect.
Сравнение с WireGuard
| Параметр | OpenVPN | WireGuard |
|---|---|---|
| Скорость | Средняя | Высокая |
| Обход блокировок | Отличный (TCP/443) | Средний |
| Простота конфига | Сложнее | Проще |
| Протокол | TCP/UDP | UDP |
Отзыв доступа клиента
Если ключ клиента скомпрометирован, отзовите сертификат и обновите список отзыва (CRL):
cd /etc/openvpn/easy-rsa
./easyrsa revoke client1
./easyrsa gen-crl
cp pki/crl.pem /etc/openvpn/
Добавьте в server.conf строку и перезапустите сервис:
crl-verify crl.pem
systemctl restart openvpn@server
Теперь отозванный профиль подключиться не сможет, а остальные клиенты продолжат работать.
Усиление безопасности
Несколько практик, которые стоит применить сразу:
- ограничьте права на ключи:
chmod 600 /etc/openvpn/server.key /etc/openvpn/ta.key; - запускайте демон от непривилегированного пользователя (
user nobody,group nogroup— уже в конфиге); - используйте только современный шифр
AES-256-GCMи параметрtls-authдля защиты от сканирования; - закройте firewall’ом всё, кроме порта VPN и SSH.
Проверка и диагностика
Убедитесь, что сервис слушает нужный порт:
ss -tulpn | grep 1194
Логи подключений и ошибок:
journalctl -u openvpn@server -f
Проверьте, что интерфейс tun0 создан:
ip a show tun0
Если клиент подключается, но нет доступа в интернет — почти всегда причина в отсутствии IP-форвардинга или неверном интерфейсе в правиле MASQUERADE.
Частые вопросы
UDP или TCP? UDP быстрее и рекомендуется по умолчанию. TCP на порту 443 используйте, если провайдер блокирует VPN.
Как отозвать доступ клиента?
./easyrsa revoke client1, затем ./easyrsa gen-crl и перезапуск сервиса.
Почему нет интернета после подключения? Проверьте IP-форвардинг и правило MASQUERADE с правильным интерфейсом.
Можно ли изменить порт на 443?
Да, поменяйте port и proto tcp в конфиге и откройте порт в firewall — так VPN сложнее заблокировать.
Скрипт или ручная настройка? Скрипт — быстро и безопасно для типовых задач. Ручная настройка нужна для тонкого контроля.
Нужен сервер под VPN? Смотрите VPS для VPN и безопасности и аренду VPS. Настроим за вас — Администрирование серверов.
