VPN – это технология защищенного подключения к удаленному компьютеру или сети, а для большинства пользователей – просто безопасный способ использовать Интернет в зонах общедоступного Wi-Fi: торговых центрах, кафе, гостиницах, аэропортах.
В этой статье рассмотрим четыре способа создания собственного VPN, с защищенным протоколом для организации безопасного подключения.
Начнем с самого простого варианта, что под силу даже начинающим пользователям ПК.

Подготовка
Для всех четырех способов нам понадобится виртуальный сервер (VPS).
Идем на Aeza, регистрируемся, выбираем страну размещения и заказываем самый недорогой тариф. Если страна не особо важна, берите VPS в той локации, где заявлена наибольшая скорость (например в Германии до 25 Гбит/сек). В качестве операционной системы для установки указываем Ubuntu 24.04 или Debian 12, из дополнительных опций выбирать ничего не нужно.
После оплаты сервера вы получите необходимые данные для доступа к нему – IP адрес и root-пароль.
Способ 1. Amnezia
Самый простой и быстрый вариант настройки VPN самому. Достаточно установить программу-клиент AmneziaVPN на компьютер или телефон и при первом запуске настройка будет выполнена автоматически. Просто запустите приложение, выберите 'Self-hosted VPN', а затем введите данные для подключения к своему виртуальному серверу (IP адрес и root-пароль). Программа установит на нем всё необходимое и вы сразу сможете использовать свой VPN.
Загрузить AmneziaVPN можно с GitHub или отсюда. Приложение доступно для всех популярных десктопных и мобильных операционных систем, полностью бесплатно и является программным обеспечением с открытым исходным кодом.
Стоит отметить, что в Amnezia поддерживаются разные защищенные протоколы: OpenVPN, WireGuard, IPsec и другие.
Способ 2. Виртуальный сервер с предустановленным VPN
Некоторые хостеры при заказе сервера сразу предлагают установить на нем готовый VPN с возможностью управления пользователями. К примеру, на Aeza это можно сделать для нескольких впн-протоколов, включая два самых популярных – OpenVPN и Wireguard:

Сразу обращайте внимание на всплывающую подсказку (см. скриншот выше), в ней указан путь к скрипту для управления пользователями. После активации сервера нужно запустить этот скрипт, создать нового пользователя и скачать его конфигурационный файл с настройками подключения.
Затем этот файл достаточно загрузить или импортировать в любой VPN-клиент с поддержкой нужного протокола, в таблице ниже – наиболее популярные варианты:
VPN клиент | Протокол | Поддерживаемые ОС / Аппаратное обеспечение |
OpenVPN | Windows, MacOS, Linux, Android, iOS, ChromeOS | |
WireGuard | Windows, MacOS, Linux, Android, iOS и др. | |
Роутеры со встроенным VPN-клиентом | OpenVPN | Большинство современных роутеров, например Asus RT-AX53U, RT-AX55, RT-AC68U, RT-AC86U, TP-Link Archer AX55, AX72, AX73, AXE75 и многие другие |
WireGuard | Некоторые современные роутеры, например Asus RT-AX88U, TP-Link Archer BE900 | |
Роутеры с альтернативной прошивкой (DD-WRT, OpenWrt и т.д.) | OpenVPN | Большинство современных роутеров* |
WireGuard | Некоторые современные роутеры* |
* перед установкой альтернативной прошивки проверяйте совместимость и наличие VPN клиента на сайте разработчика прошивки
Способ 3. Готовый скрипт
На GitHub есть готовые универсальные скрипты для полуавтоматической настройки VPN. Мастер установки задаст несколько вопросов, настроит всё сам и создаст пользовательский файл конфигурации для подключения к VPN.
Один из наиболее популярных скриптов – для OpenVPN, и также для WireGuard.
Способ 4. Сделать VPN самому
Самый трудоемкий вариант, где будем настраивать VPN на сервере с Ubuntu 24.04 сами. Из протоколов выберем проверенный временем OpenVPN, поддержка которого заявлена в большинстве современных роутеров.
Подключаемся к VPS как root, создаем нового пользователя и добавляем его в sudo:
adduser user
usermod -aG sudo user
Затем входим на сервер как user и выполняем все дальнейшие команды от его имени.
Обновим списки пакетов и установим OpenVPN и Easy-RSA (для управления сертификатами в инфраструктуре открытых ключей):
sudo apt update -y
sudo apt install openvpn easy-rsa -y
В папке нашего пользователя создаем директорию с символической ссылкой и нужными правами:
mkdir ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
chmod 700 ~/easy-rsa
Создаем конфигурационный файл для Easy-RSA и инициализируем инфраструктуру открытых ключей (PKI):
cd ~/easy-rsa
echo -e 'set_var EASYRSA_ALGO ec\nset_var EASYRSA_DIGEST sha512' > vars
./easyrsa init-pki
Сгенерируем ключи удостоверяющего центра:
./easyrsa build-ca nopass
Система запросит ввести универсальное имя, здесь можно просто нажать Enter.
Выпустим и подпишем пару "ключ-сертификат" для сервера:
./easyrsa gen-req server nopass
./easyrsa sign-req server server
При выполнении первой команды вас попросят указать Common Name, здесь просто нажмите Enter. Для второй команды запрос нужно подтвердить, введя yes
.
Скопируем созданные файлы в каталог OpenVPN:
sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/server
sudo cp ~/easy-rsa/pki/issued/server.crt /etc/openvpn/server
sudo cp ~/easy-rsa/pki/ca.crt /etc/openvpn/server
Для дополнительной защиты, создадим предварительный общий ключ (PSK), который будет использоваться с директивой tls-crypt:
sudo openvpn --genkey secret /etc/openvpn/server/ta.key
Выпустим и подпишем пару "ключ-сертификат" для клиента client1:
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
В первой команде на требование указать Common Name нажмите Enter, при выполнении второй команды подтвердите запрос вводом yes
.
Создадим директорию для клиентских конфигов, скопируем туда нужные файлы и установим для них соответствующие права:
mkdir ~/openvpn-clients
chmod -R 700 ~/openvpn-clients
cp ~/easy-rsa/pki/private/client1.key ~/openvpn-clients/
cp ~/easy-rsa/pki/issued/client1.crt ~/openvpn-clients/
sudo cp /etc/openvpn/server/{ca.crt,ta.key} ~/openvpn-clients/
sudo chown user ~/openvpn-clients/*
Настроим конфиг OpenVPN на основе дефолтного примера. Для этого скопируем шаблонный файл server.conf в рабочую директорию:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/
C помощью любого текстового редактора открываем файл server.conf для редактирования:
sudo vim /etc/openvpn/server/server.conf
В этом файле нужно внести следующие изменения:
заменить
dh dh2048.pem
наdh none
раскомментировать строку
push "redirect-gateway def1 bypass-dhcp"
раскомментировать две строки с DNS серверами:
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
По умолчанию здесь указаны адреса публичных DNS серверов от OpenDNS. Рекомендую сразу их заменить на DNS сервера от CloudFlare (1.1.1.1, 1.0.0.1) или Google (8.8.8.8 и 8.8.4.4)заменить
tls-auth ta.key 0
наtls-crypt ta.key
заменить
cipher AES-256-CBC
наcipher AES-256-GCM
и после этой строки добавить еще одну новую –auth SHA256
добавить в конце файла две строки:
user nobody
group nogroup
Чтобы включить переадресацию пакетов, раскомментируем (вручную или с помощью утилиты sed) строку net.ipv4.ip_forward=1
в файле /etc/sysctl.conf и применим изменения:
sudo sed -i '/net.ipv4.ip_forward=1/s/^#//g' /etc/sysctl.conf
sudo sysctl -p
Теперь нужно настроить форвардинг и маскарадинг в iptables, но для этого сначала посмотрим имя публичного сетевого интерфейса на сервере:
ip route list default
Пример результата выполнения команды показан ниже, в нем имя нужного нам интерфейса отображается сразу после "dev" :
default via 123.45.67.8 dev ens3 proto static onlink
Здесь интерфейс называется ens3, в вашем случае он может быть другой.
Разрешаем переадресацию и включаем маскарадинг в iptables. При необходимости имя интерфейса (ens3) в трех местах замените на нужное:
sudo apt install iptables-persistent -y
sudo iptables -A INPUT -i tun+ -j ACCEPT
sudo iptables -A FORWARD -i tun+ -j ACCEPT
sudo iptables -A FORWARD -i ens3 -o tun+ -j ACCEPT
sudo iptables -A FORWARD -i tun+ -o ens3 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE
sudo netfilter-persistent save
Добавляем сервис OpenVPN в автозагрузку и запускаем его:
sudo systemctl enable openvpn-server@server.service
sudo systemctl start openvpn-server@server.service
Проверить, запущен ли VPN можно командой:
sudo systemctl status openvpn-server@server.service
Нам осталось создать файл конфигурации .ovpn, который клиент будет использовать для подключения к VPN.
Файл .ovpn должен содержать базовые параметры, сертификаты и ключи. Чтобы не объединять это всё вручную, напишем небольшой BASH-скрипт:
create_client_config.sh
#!/bin/bash
# Формат использования: create_client_config.sh <clientname>
# Перед использованием в SERVER_IP вместо X.X.X.X необходимо указать IP адрес вашего сервера
SERVER_IP=X.X.X.X
DIR=~/openvpn-clients
cat <(echo -e \
"# Client OpenVPN config file"\
"\nclient" \
"\ndev tun" \
"\nproto udp" \
"\nremote $SERVER_IP 1194" \
"\nresolv-retry infinite" \
"\nnobind" \
"\nuser nobody" \
"\ngroup nogroup" \
"\npersist-key" \
"\npersist-tun" \
"\nremote-cert-tls server" \
"\nkey-direction 1" \
"\ncipher AES-256-GCM" \
"\nauth SHA256" \
"\nverb 3" \
) \
<(echo -e "\n<ca>") \
${DIR}/ca.crt \
<(echo -e "</ca>\n\n<cert>") \
${DIR}/${1}.crt \
<(echo -e "</cert>\n\n<key>") \
${DIR}/${1}.key \
<(echo -e "</key>\n\n<tls-crypt>") \
${DIR}/ta.key \
<(echo -e "</tls-crypt>") \
> ${DIR}/${1}.ovpn
В скрипте вместо X.X.X.X
впишите IP адрес вашего сервера, поместите файл в любую директорию и установите исполняемые права:
chmod +x create_client_config.sh
Создаем .ovpn файл для client1:
./create_client_config.sh client1
Готово! В папке ~/openvpn-clients появился client1.ovpn. Скачайте его и просто импортируйте в любой OpenVPN-клиент или на роутер с поддержкой этой функции.