Как сделать и настроить собственный VPN

в 5:09, , рубрики: amneziavpn, openvpn, vpn, vpn-сервер, wireguard

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

Как сделать и настроить собственный VPN - 1

Подготовка

Для всех четырех способов нам понадобиться виртуальный сервер (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 ecnset_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>nn<cert>") 
   ${DIR}/${1}.crt 
   <(echo -e "</cert>nn<key>") 
   ${DIR}/${1}.key 
   <(echo -e "</key>nn<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-клиент или на роутер с поддержкой этой функции.

Автор: kaspra

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js