В статье рассмотрим четыре способа создания собственного VPN. Начнем с самого простого варианта, что под силу даже начинающим пользователям ПК.

Подготовка

Для всех четырех способов нам понадобиться виртуальный сервер (VPS). Будет достаточно конфигурации с 1 vCPU и 1GB RAM. В качестве операционной системы для установки возьмем последний Ubuntu 24.04 или Debian 12.

Способ 1. Amnezia

Самый простой и быстрый вариант настройки VPN самому. Достаточно просто установить программу-клиент Amnezia на компьютер или телефон. При первом запуске она подключится к серверу и настроит всё необходимое программное обеспечение.

Подробная инструкция есть здесь.

VPN-клиент Amnezia доступен для всех популярных десктопных и мобильных операционных систем, он полностью бесплатен и является программным обеспечением с открытым исходным кодом (GitHub).

Стоит отметить, что кроме поддержки привычных OpenVPN, WireGuard, IPsec и др. протоколов, в Amnezia есть собственный защищенный протокол AmneziaWG.

Способ 2. Виртуальный сервер с предустановленным VPN

Некоторые хостеры при заказе сервера сразу предлагают установить на нем VPN с удобным веб-интерфейсом (UI) для управления пользователями.

После активации сервера нужно зайти в веб-интерфейс управления VPN-ом, создать нового пользователя и скачать его конфигурационный файл с настройками подключения.

Затем этот файл достаточно загрузить или импортировать в любой VPN-клиент с поддержкой нужного протокола, в таблице ниже – наиболее популярные варианты:

VPN клиент

Протокол

Поддерживаемые ОС / Аппаратное обеспечение

OpenVPN Connect

OpenVPN

Windows, MacOS, Linux, Android, iOS, ChromeOS

WireGuard

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-клиент или на роутер с поддержкой этой функции.

Комментарии (30)


  1. M_AJ
    29.08.2024 05:59
    +3

    В разделе про самостоятельную установку могли бы тогда уж и установку WireGuard описать — настраивается и работает быстрее OpenVPN. Меньше грузит процессор.


    1. supercat1337
      29.08.2024 05:59
      +1

      Поддерживаю


      1. anonymous
        29.08.2024 05:59

        НЛО прилетело и опубликовало эту надпись здесь


    1. kaspra Автор
      29.08.2024 05:59
      +1

      Спасибо, добавлено в TODO


    1. FSA
      29.08.2024 05:59
      +8

      Всё бы ничего, но сейчас активно пытаются блокировать протоколы. Что OpenVPN, что Wireguard. Сейчас актуальнее писать о том, как скрыть от DPI трафик VPN.


      1. M_AJ
        29.08.2024 05:59

        Чтобы заворачивать VPN в туннели, нужно и сам VPN сначала настроить. Так что и о самой настройке тоже стоит писать.


        1. UranusExplorer
          29.08.2024 05:59

          Для повседневного применения большинству пользователей VPN не нужен, хватит обычных прокси (особенно с tun2socks или любым другим tun-адаптером)

          А VPN-завернутый-в-туннель обычно работает хреновато, и пользоваться таким следует только когда уже совсем других вариантов не осталось


      1. kaspra Автор
        29.08.2024 05:59

        В целом, здесь речь про настройку VPN для его изначальной цели:
        • для личного использования OpenVPN и Wireguard – удобный вариант безопасного подключения в зонах публичного Wi-Fi
        • в корпоративном секторе – для безопасности удаленных подключений и организации работы удаленных сотрудников


      1. kaspra Автор
        29.08.2024 05:59

        некоторые компании еще используют IKEv2/IPSec, но из моей практики протокол используется реже чем первых два


    1. d-sh
      29.08.2024 05:59
      +1

      Его уже блокируют.


      1. M_AJ
        29.08.2024 05:59

        Там где его блокируют, чаще всего блокируют и OpenVPN


  1. V-King
    29.08.2024 05:59
    +8

    Мурзилка ни о чём. Эти VPN-ы блочатся на раз-два. Что WG, что OpenVPN. Если нужен на самом деле нормальный VPN, который не заблочат - смотрите в сторону Cloack, udp2raw, Shapeshifter Dispatcher и прочие обфускаторы. V2ray тоже неплохо работают. На крайний случай, заверните IPv6 в IPv4 туннель (можете ещё и IPSec-ом шлифануть) и вынырните где-нибудь "за бугром".


    1. M_AJ
      29.08.2024 05:59
      +1

      смотрите в сторону Cloack

      Cloak сам по себе не работает, в него нужно что-то заворачивать, например тот же OpenVPN. Как и другие обфускаторы. Ну и протоколы вроде shadowsocks и xray это прокси, а не VPN.


      1. dimsoft
        29.08.2024 05:59
        +1

        это прокси

        Никто не мешает использовать tun2socks и получить из прокси


      1. V-King
        29.08.2024 05:59

        Да, я в курсе этих моментов. Задача была не насыпать правильных терминов, а указать вектор, куда гуглить.


  1. NikolayEpishin
    29.08.2024 05:59

    С клиентом Amnezia вышел "сюрприз". Отказался ставиться на win8.1, потребовав d3d12.dll... Предполагаю, что на win7 тоже установить не получится. Портированная dll-ка не помогла, к сожалению. Оно, конечно, выглядит красиво, но фишка же не в красоте.


    1. yarkovoy
      29.08.2024 05:59

      Стал замечать, что достаточно много софта перестало работать на Win 8. Почему то многие разработчики игнорируют эту систему. Есть тут один банк у нас, у него даже софт для банковских терминалов не ставится на Win8. Только Win10 и выше.


    1. Torpilleur
      29.08.2024 05:59

      У меня на Win 7 x64 Амнезия не устанавливается


  1. VenbergV
    29.08.2024 05:59

    Немного по занудствую.
    1. У вас по тексту SHA512 вдруг превратилось в SHA256.
    2. Опция --genkey уже давно deprecated. Так же много от старых конфигураций версии 2.4 и ранее. А сейчас не первый год актуальная версия 2.6.
    3. Ставить iptables-persistent в текущие Debian 12 или Ubuntu 24.04, мягко говоря, не хорошо. Там можно сломать настроенный nftables.


    1. Testman2023
      29.08.2024 05:59

      Nftables - Debian Wiki
      Можно конечно сделать:
      Switching to the legacy version iptables


  1. vshiyan
    29.08.2024 05:59

    У меня клиент амнезии перестал работать на ноуте и на пк . Xray,AmnesiaWG всё заблочено


  1. maxutin
    29.08.2024 05:59

    Для всех четырех способов нам понадобиться виртуальный сервер (VPS)

    А с этим как сейчас быть? Для тех, у кого нет иностранной карты и всяких coins...


    1. JackRowsen
      29.08.2024 05:59
      +1

      Вполне работает обычный http-прокси на впске в Москве.

      Три прокси на разных хостерах уже четвертый год работают без проблем всяких...
      Статьи, здесь же на Хабре, про использование прокси, за те же четыре года, актуальности нисколько не потеряли.


      1. maxutin
        29.08.2024 05:59

        Странно, что такой вариант работает. И в любом случае остаются злыдни и с той стороны, ограничивающие доступ к своим серверам российским айпишникам...


    1. vikarti
      29.08.2024 05:59

      Некоторые российские хостеры говорят что они Российское ООО, берут оплату российской картой (и чек выдают который программа ФНС опознает как корректный) и предоставляют серверы за пределами России. При этом по каким то странным причинам злой гугл для трафика с этих серверов не замедляет Youtube(ну или кеш-серверы обновляет или какая там текущая версия неработы Youtube?). При этом некоторые из этих серверов по геолокационным базам - Россия(!)(может быть полезно для кинопоисков всяких)(хотя реально нет)


    1. UranusExplorer
      29.08.2024 05:59

      есть довольно много хостеров, предлагающих сервера за бугром и позволяющих платить с российских карт.


    1. NotSlow
      29.08.2024 05:59
      +1

      Aeza Стокгольм promo 1.09eur/мес

      Vdsina Амстердам standard 0.75usd/мес

      У меня давно несколько дешевых vps (включая вышеупомянутые) с cloak+wireguard. Роутер домашний к ним подключается и часть доменов заворачивает в нужный vpn, а все остальное напрямую. Либо на любом клиенте можно выбрать через какой vpn работать:

      И не нужно на клиентах ничего устанавливать, достаточно зайти на страничку роутера и переключиться. Ну или просто вбить список доменов (того же ютуба) чтобы только их через нужный туннель прогонять. Конечные клиенты даже не подозревают что какие-то vpn'ы участвуют в процессе.


      1. stas_grishaev
        29.08.2024 05:59

        Либо на любом клиенте можно выбрать через какой vpn работать:

        вот это выглядит интересно, но непонята подкапотка. Расскажите подробнее, плз.


        1. NotSlow
          29.08.2024 05:59
          +1

          Подкапотка проще некуда - php скрипт манипулирует:

          ip rule del from $ip;

          или

          ip rule add from $ip table $vpn;

          Но да, нужен background для понимания как все устроено. Смысла в отдельной статье мало, т.к. крайне мало у кого дома полноценные linux роутеры. Может однажды пересилю лень и напишу статью как подобное реализовать на raspbery pi, чтоб хоть более-менее многие смогли повторить у себя.


    1. JTux270
      29.08.2024 05:59
      +1

      На оф-сайте Амнезии есть список хостов, где принимают российские карты.