Бортовой журнал
Бортовой журнал

Когда вы слышите слово «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-сервер, который будет надежно защищать трафик и помогать обходить любые сетевые ограничения. Главное — следить за обновлениями системы, а также не забывать о регулярной проверке настроек безопасности.

Отличные VPS на NVMe-дисках и бесплатный тестовый период 3 дня!

Выбрать тариф