Когда вы слышите слово «VPN», скорее всего, на ум приходит приложение с платной подпиской, которое обещает безопасность в сети и анонимность. Но что, если вы хотите полностью контролировать свой трафик и не доверяете сторонним решениям? В этом случае лучший выход — развернуть VPN-сервер на собственном хостинге.
В этой статье мы расскажем, как настроить личный VPN с нуля. Разумеется, без технических моментов никуда, но мы постарались объяснить все максимально понятно, чтобы даже начинающий пользователь без проблем смог развернуть собственный VPN-сервер.
Для чего нужен VPN
VPN (Virtual Private Network) — это виртуальная частная сеть, которая шифрует ваш интернет-трафик и передает его через защищённый канал.
Зачем он нужен? Прежде всего — для безопасности. Когда вы подключаетесь к публичному Wi-Fi в кафе, аэропорту или отеле, без VPN ваши данные могут перехватить, включая логины и пароли, а также личные сообщения и любую конфиденциальную информацию. VPN защищает вас, создавая своего рода зашифрованный «туннель», через который проходит весь интернет-трафик. В итоге все, что вы отправляете или получаете, становится недоступным для посторонних.
Но безопасность — не единственное преимущество. VPN позволяет обойти географические блокировки: например, если нужный сайт недоступен в вашей стране или не открывается с домашнего IP-адреса. С помощью VPN вы можете подключиться через сервер в другой стране и получить доступ к контенту, как будто находитесь там.
И, наконец, с помощью VPN можно получить доступ к внутренней сети компании или «поднять» собственную защищенную среду для удаленной работы.
Варианты создания собственного VPN-сервера
Создать свой VPN-сервер можно разными способами:
На арендованном VPS
Самый популярный и гибкий вариант. Вы арендуете виртуальный сервер у хостинг-провайдера (например, в Германии, Нидерландах или США) и устанавливаете на него OpenVPN, WireGuard или другой VPN-сервер. Этот способ предлагает вам полный контроль над настройками и выбором страны, а также стабильное соединение. Подходит тем, кто не боится командной строки и готов самостоятельно настраивать серверную часть.
На домашнем компьютере или роутере
Если у вас есть статический IP и постоянно работающий компьютер или современный роутер с поддержкой OpenVPN/WireGuard, VPN можно настроить прямо у себя дома. Плюс в том, что вы не платите за сервер. Минус — подключение будет зависеть от скорости вашего интернета, а конфигурация может быть сложнее из-за проброса портов и настройки маршрутизации.
Через готовые образы и скрипты
Есть проекты, которые упрощают установку VPN-сервера до пары команд — например, скрипты типа Nyr/openvpn-install или angristan/wireguard-install на GitHub. Система максимально простая: вы запускаете скрипт на VPS, и он сам все делает: генерирует ключи, настраивает файервол и даже создает конфигурационный файл клиента. Отличный вариант, если вам срочно нужен VPN и не хочется самостоятельно разбираться с настройками.
Через облачные платформы
Если у вас уже есть опыт работы с облачными решениями вроде AWS, Google Cloud или Yandex Cloud — VPN можно настроить прямо там. Они предлагают хорошие возможности масштабирования и стабильности. Однако стоимость может быть выше, особенно при активном трафике, и придется разобраться в тонкостях облачной архитектуры.
Каждый из этих способов рабочий. Вопрос лишь в том, что вам важнее: полная свобода и контроль или минимальные усилия при настройке.
Как создать собственный VPN-сервер с помощью OpenVPN
OpenVPN — это открытое программное решение для создания защищённых VPN-соединений. Оно позволяет организовать безопасный зашифрованный туннель между клиентом и сервером, через который проходит весь интернет-трафик. OpenVPN поддерживает современные алгоритмы шифрования, работает через TCP или UDP и подходит как для личного использования, так и для корпоративных сетей. Он гибко настраивается, хорошо документирован и поддерживается практически на всех платформах.
Далее мы будем разворачивать VPN-сервер на виртуальном сервере с операционной системой Ubuntu 22.04.
Подготовка
Для начала вам понадобится виртуальный сервер с установленной операционной системой: можно выбрать Ubuntu 22.04, как у нас. Например, SpaceWeb предлагает аренду VPS-сервера для VPN. Вы можете выбрать подходящую конфигурацию и указать желаемое ПО во время заказа (в том числе OpenVPN):
Также вам потребуется:
- минимальные навыки работы с командной строкой;
- SSH-доступ к серверу (логин, пароль или ключ);
- стабильное интернет-соединение;
- немного терпения и внимательности — все, что вам нужно делать, — это повторять за нами.
Шаг 1. Установка OpenVPN и Easy-RSA
Первым делом установите OpenVPN и Easy-RSA — инструмент управления инфраструктурой открытых ключей (PKI), который понадобится для генерации сертификатов и ключей. Сервер OpenVPN будет использовать Easy-RSA для создания запроса на сертификат, который в дальнейшем подпишет центр сертификации (CA).
Убедитесь, что система обновлена и использует актуальные списки пакетов:
sudo apt update

А затем установите необходимые пакеты:
sudo apt install -y openvpn easy-rsa

Шаг 2. Создание сертификатов безопасности
Теперь создадим локальную инфраструктуру открытых ключей (PKI), которая нужна для генерации запросов на сертификаты и управления ими. Отдельный сервер CA будет использоваться для подписания этих запросов.
Сертификаты необходимы для подтверждения подлинности сервера и клиентов. В процессе мы создадим:
- центр сертификации (ЦС);
- сертификаты и ключи для сервера;
- сертификаты и ключи для клиентов;
- параметры для безопасного обмена (Диффи — Хеллмана);
- TLS-ключ для дополнительной защиты.
Приступим. Скопируйте скрипты Easy-RSA в директорию /etc/openvpn/:
sudo cp -R /usr/share/easy-rsa /etc/openvpn/

И перейдите в нее:
cd /etc/openvpn/easy-rsa

Задайте переменную окружения и инициализируйте PKI-инфраструктуру:
export EASYRSA=$(pwd)

sudo ./easyrsa init-pki

Далее создайте корневой сертификат центра сертификации:
sudo ./easyrsa build-ca

Вас попросят ввести кодовую фразу, которая в дальнейшем потребуется при подписании сертификатов. Также система предложит указать имя (Common Name) для центра сертификации — его можно оставить по умолчанию, нажав Enter.
После выполнения этих команд будут созданы ключевые файлы:
- /etc/openvpn/easy-rsa/pki/ca.crt — сертификат центра сертификации;
- /etc/openvpn/easy-rsa/pki/private/ca.key — закрытый ключ CA.
Создайте отдельную директорию для хранения всех ключей и сертификатов:
sudo mkdir -p /etc/openvpn/certs/

И скопируйте туда корневой сертификат:
sudo cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/certs/

Сгенерируйте закрытый ключ и файл запроса сертификата для сервера:
sudo ./easyrsa gen-req server nopass

Подпишите запрос:
sudo ./easyrsa sign-req server server

Подтвердите команду, введя yes, и укажите кодовую фразу ЦС.
Затем скопируйте сгенерированные файлы в каталог /etc/openvpn/certs/:
sudo cp /etc/openvpn/easy-rsa/pki/issued/server.crt /etc/openvpn/certs/

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

Чтобы безопасно обмениваться ключами, сгенерируйте параметры Диффи-Хеллмана:
sudo ./easyrsa gen-dh

Скопируйте полученный файл в тот же каталог, что и раньше:
sudo cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/certs/

Далее сгенерируйте статический TLS-ключ для защиты от неавторизованных подключений:
sudo openvpn --genkey secret /etc/openvpn/certs/ta.key

Теперь в директории /etc/openvpn/certs/ должно быть 5 ключевых файлов:
- ca.crt;
- dh.pem;
- server.crt;
- server.key;
- ta.key.
Проверьте, так ли это, выполнив команду:
ls -l /etc/openvpn/certs/
В выводе вы должны получить:

Идем дальше. Теперь вам нужно сгенерировать запрос на сертификат и закрытый ключ для клиента:
sudo ./easyrsa gen-req client1 nopass

И подписать его:
sudo ./easyrsa sign-req client client1

В обоих случаях можно просто нажать Enter при запросе Common Name, оставив имя по умолчанию, а при подписании сертификата — подтвердить действие, введя yes.
Шаг 3. Настройка VPN-сервера
Теперь, когда у вас есть все необходимые ключи, сертификаты и параметры безопасности, пора перейти к настройке самого OpenVPN-сервера. Для этого мы создадим основной конфигурационный файл, в котором укажем, как сервер должен работать, какие протоколы использовать, где находятся ключи, а также какие параметры выдаются клиентам при подключении.
Откройте файл конфигурации server.conf в текстовом редакторе:
sudo nano /etc/openvpn/server.conf
Вставьте в него следующие строки:
# Порт, через который сервер будет принимать подключение VPN
port 1194
# Протокол UDP (можно заменить на tcp при необходимости)
proto udp
# Туннельный интерфейс
dev tun
# Пути к сертификатам и ключам
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/server.crt
key /etc/openvpn/certs/server.key
dh /etc/openvpn/certs/dh.pem
# Защита VPN с помощью HMAC
remote-cert-tls client
tls-auth /etc/openvpn/certs/ta.key 0
# Запуск OpenVPN от пользователя 'nobody' для повышения безопасности
user nobody
# Группа для пользователя 'nobody'
group nogroup
# Сохранение ключей (при перезапуске не пересоздаются)
persist-key
# Сохранение туннеля (при перезапуске не пересоздается)
persist-tun
# Настройки шифрования
cipher AES-256-CBC
;compress lz4-v2
;push "compress lz4-v2"
# Пинг каждые 10 секунд, перезапуск сервера, если нет ответа в течение 120 секунд
keepalive 10 120
# Способ адресации в VPN
topology subnet
# Диапазон IP-адресов для выдачи клиентам
server 10.8.0.0 255.255.255.0
# Файл для хранения связки IP-адресов с клиентскими сертификатами
ifconfig-pool-persist /etc/openvpn/ipp.txt
# Перенаправление всего трафика через VPN
push "redirect-gateway def1 bypass-dhcp"
# Максимальное количество клиентов (по необходимости)
;max-clients 50
# Путь к логу статуса
status /var/log/openvpn/status.log
# Уровень логирования (от 0 до 11, 3 — средний)
verb 3

Сохраните изменения. Для этого зажмите Ctrl + X, затем введите Y и нажмите Enter.
Шаг 4. Настройка маршрутизации и правил файервола
К этому моменту вы уже установили и настроили OpenVPN, а также сгенерировали необходимые ключи и сертификаты для подключения клиента. Однако сервер пока не получил инструкций о том, как обрабатывать входящий веб-трафик от клиентов. Чтобы клиенты могли выходить в интернет или взаимодействовать с локальными сетями, нужно настроить правила файрвола и маршрутизацию.
Сначала нужно включить перенаправление IPv4-пакетов. Для этого добавьте строчку net.ipv4.ip_forward=1 в /etc/sysctl.conf:
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Затем примените изменения:
sudo sysctl -p
Если хотите убедиться, что предыдущие команды успешно выполнены, пропишите:
sudo sysctl --system
В выводе должна быть строка:
net.ipv4.ip_forward=1

Следующий шаг — настроить маскарадинг, чтобы трафик от VPN-клиентов корректно проходил через ваш внешний сетевой интерфейс.
Но, прежде чем начать, узнайте, какой интерфейс отвечает за интернет-подключение сервера. Для этого нужно выполнить команду:
ip route list default
В выводе найдите слово dev — сразу после него будет указан интерфейс, через который сервер осуществляет выход в интернет.

Например, в нашем выводе указан enp0s5. У вас может быть eth0, enp0s3 и так далее. Запомните это значение — его нужно будет подставить в команды ниже.
Установите пакет для сохранения правил iptables:
sudo apt install iptables-persistent -y

Перед вами появится окно, которое запросит, нужно ли сохранять текущие правила IPv4. Нажмите Enter.

Затем появится соответствующее окно для IPv6. Снова нажмите Enter.

Затем перейдем непосредственно к настройке.
Разрешите трафик от VPN-интерфейса tun+ и настройте переадресацию между VPN и внешним интерфейсом (например, enp0s5). Если у вас другое имя интерфейса, замените его в командах:
sudo iptables -A INPUT -i tun+ -j ACCEPT
sudo iptables -A FORWARD -i tun+ -j ACCEPT
sudo iptables -A FORWARD -i enp0s5 -o tun+ -j ACCEPT
sudo iptables -A FORWARD -i tun+ -o enp0s5 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp0s5 -j MASQUERADE
Важно! Обратите внимание, что сеть 10.8.0.0/24 может отличаться от используемой вами.
Сохраните текущие правила, чтобы они восстанавливались при перезагрузке системы:
sudo netfilter-persistent save
Шаг 5. Запуск и автозапуск OpenVPN
После завершения всех предыдущих настроек нужно будет запустить сервер и настроить его автозапуск, чтобы он мог принимать соединения сразу после перезагрузки:
sudo systemctl -f enable openvpn@server

Затем запустите сервер:
sudo systemctl start openvpn@server

После этого OpenVPN начнет принимать входящие соединения на основе файла конфигурации server.conf.
Чтобы убедиться, что служба запущена корректно, проверьте ее статус:
sudo systemctl status openvpn@server
В выводе должна быть строка со статусом active (running):
Шаг 6. Настройка файла конфигурации клиента
Чтобы клиент смог подключиться к вашему VPN-серверу, необходимо создать конфигурационный файл с расширением .ovpn. В нем указываются все параметры подключения, включая IP-адрес сервера, протокол, порт и встроенные ключи безопасности.
Откройте любой текстовый редактор и создайте файл с именем, например, server.ovpn. Затем вставьте в него следующую конфигурацию:
client
# IP-адрес или доменное имя сервера и порт
remote ВАШ-IP 1194
# Интерфейс и протокол, соответствующие серверу
dev tun
proto udp
# Поведение при разрыве соединения
resolv-retry infinite
nobind
persist-key
persist-tun
# Шлюз по умолчанию через VPN
redirect-gateway def1 bypass-dhcp
# Проверка сервера
remote-cert-tls server
# Алгоритмы шифрования и хеширования
cipher AES-256-CBC
# Минимальная версия TLS
tls-version-min 1.2
# Использование TLS-ключа
key-direction 1
# Уровень логирования
verb 3
<ca>
# Вставьте содержимое файла /etc/openvpn/certs/ca.crt
</ca>
<cert>
# Вставьте содержимое файла /etc/openvpn/easy-rsa/pki/issued/client1.crt
</cert>
<key>
# Вставьте содержимое файла /etc/openvpn/easy-rsa/pki/private/client1.key
</key>
<tls-auth>
# Вставьте содержимое файла /etc/openvpn/certs/ta.key
</tls-auth>
Важно! Замените «ВАШ-IP» на актуальное значение.
Чтобы вставить сертификаты и ключи между соответствующими тегами (<ca>, <cert>, <key>, <tls-auth>), используйте команду cat. Она выведет содержимое нужного файла в терминал, например:
cat /etc/openvpn/certs/ca.crt
Затем скопируйте вывод в соответствующий раздел в .ovpn-файле.
Повторите то же самое для других файлов:
- client1.crt — клиентский сертификат;
- client1.key — закрытый ключ клиента;
- ta.key — TLS-ключ.
Вставив все нужные данные, сохраните файл с расширением .ovpn и перенесите его на клиентскую машину. Его можно использовать для подключения через клиент OpenVPN на любой поддерживаемой платформе — Windows, macOS, Linux, Android или iOS.
Заключение
Готово! Теперь у вас есть рабочий VPN-сервер, который будет надежно защищать трафик и помогать обходить любые сетевые ограничения. Главное — следить за обновлениями системы, а также не забывать о регулярной проверке настроек безопасности.