Найти в Дзене

Запускаем свой VPN сервер

Запускаем свой виртуальный сервер Для настройки своего VPN подойдет любой выделенный виртуальный сервер (VDS). В качестве примера я запущу виртуальный сервер у провайдера PQ.Hosting. В качестве VPN сервера мы будет использовать WireGuard, он не прихотлив к ресурсам и относительно прост в настройке. Идентификация и шифрование трафика происходит посредством открытого и закрытого ключа, архитектура протокола такова что он поддерживает роуминг как клиента так и сервера, то есть если у подключенного клиента меняется IP-адрес (например вы подключились в кафе к WIFI сети), то соединение не прервётся. И так для начала создадим виртуальный сервер, будет достаточно сервера с одним ядром, оперативной памятью 1 гигабайт и диском 15 гигабайт, это минимально доступная конфигурация на PQ.Hosting. Заходим на сайт PQ.Hosting, жмем кнопку “Войти в биллинг”, далее регистрируем учетную запись. После того как мы получим доступ к биллингу выбираем в разделе “Товары/Услуги” подраздел “Виртуальные сервера”. Н
Оглавление

Запускаем свой виртуальный сервер

Для настройки своего VPN подойдет любой выделенный виртуальный сервер (VDS). В качестве примера я запущу виртуальный сервер у провайдера PQ.Hosting. В качестве VPN сервера мы будет использовать WireGuard, он не прихотлив к ресурсам и относительно прост в настройке. Идентификация и шифрование трафика происходит посредством открытого и закрытого ключа, архитектура протокола такова что он поддерживает роуминг как клиента так и сервера, то есть если у подключенного клиента меняется IP-адрес (например вы подключились в кафе к WIFI сети), то соединение не прервётся.

И так для начала создадим виртуальный сервер, будет достаточно сервера с одним ядром, оперативной памятью 1 гигабайт и диском 15 гигабайт, это минимально доступная конфигурация на PQ.Hosting.

Заходим на сайт PQ.Hosting, жмем кнопку “Войти в биллинг”, далее регистрируем учетную запись. После того как мы получим доступ к биллингу выбираем в разделе “Товары/Услуги” подраздел “Виртуальные сервера”. Нажимаем кнопку “Заказать”. На странице заказа виртуального сервера можно выбрать дата-центр где будет запущен сервер, период оплаты (чем больше период, тем выше скидка). Если нам нужен доступ через VPN к внешним сайтам, то нужно выбрать дата-центр размещенный за пределами России, например в Германии. Можно выбрать самый дешевый сервер, например “Aluminium, VCore x1, 1GB RAM ECC, 15Gb NVME”, его мощности хватит с головой.

-2

Жмем заказать и выбираем в качестве операционной системы CentOS 7, тут я буду описывать все настройки в этом дистрибутиве, жмем “В корзину” и далее оплачиваем наш виртуальный сервер.

-3

После оплаты система сразу будет активирована, теперь на сервер можно зайти через SSH клиент, IP-адрес и логин с паролем можно посмотреть в панели управления “Виртуальные сервера” где выбираем наш сервер и далее кнопка “Инструкция”. Если вы работаете из Windows, то в качестве клиента SSH можно использовать например Putty.

Начальная настройка сервера

Подключаемся к нашему серверу по SSH. Для начала установим обновления

yum update -y

Проведем начальную настройку системы, настроим время и временную зону, timedatectl без параметров покажет текущее время и зону, используя команду timedatectl list-timezones можно посмотреть все доступные временные зоны, при необходимости измените время и зону.

timedatectl # Выводит текущие настройки времени и даты
timedatectl set-time 20:00:00 # Устанавливаем время при необходимости
timedatectl set-time 2022-05-01 # Устанавливаем дату при необходимости
timedatectl list-timezones # Список зон
timedatectl set-timezone Europe/Moscow # Устанавливаем зону

С помощью утилиты localectl изменим настройки локали.

localectl list-locales | grep ru # Так можно посмотреть список всех локалей
localectl set-locale ru_RU.utf8

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

yum install yum-utils epel-release -y
yum-config-manager --setopt=centosplus.includepkgs=kernel-plus --enablerepo=centosplus --save
sed -e 's/^DEFAULTKERNEL=kernel$/DEFAULTKERNEL=kernel-plus/' -i /etc/sysconfig/kernel
yum install kernel-plus wireguard-tools
reboot

Настраиваем WireGuard

Теперь все готово для настройки VPN сервера. Для создания соединений WireGuard использует асимметричное шифрование, для этого для сервера и каждого клиента который будет подключатся, необходимо сгенерировать пару ключей, открытый и закрытый. Для начала сгенерируем пару ключей для сервера. privatekey - закрытый ключ сервера, publickey - открытый ключ сервера. Они будут храниться в системной папке wireguard. Команда umask необходима чтоб никто кроме суперпользователя не смог прочитать ключи и файлы конфигурации WireGuard.

umask 077
wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey

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

wg genkey | tee /etc/wireguard/privatekey_client1 | wg pubkey > /etc/wireguard/publickey_client1

Необходимо внести некоторые изменения в системные настройки, для возможности перенаправления пакетов ядром.

echo "net.ipv4.ip_forward=1" | tee -a /etc/sysctl.d/99-sysctl.conf
echo "net.ipv4.conf.all.forwarding=1" | tee -a /etc/sysctl.d/99-sysctl.conf
sysctl -p # Применим изменения

Теперь необходимо внести настройки в созданный ранее файл /etc/wireguard/wg0.conf, для настройки нам понадобятся закрытый и открытый ключ сервера /etc/wireguard/privatekey, /etc/wireguard/publickey, и открытые и закрытые ключи всех клиентов которые мы сгенерировали, publickey_client1, privatekey_client1 и тд. Выведем их на экран и скопируем.

cat /etc/wireguard/privatekey
cat /etc/wireguard/publickey
cat /etc/wireguard/publickey_client1
cat /etc/wireguard/privatekey_client1
cat /etc/wireguard/publickey_client2
cat /etc/wireguard/privatekey_client2
# ... и тд

Далее необходимо отредактировать конфигурационный файл /etc/wireguard/wg0.conf, для этого можно воспользоваться стандартным для linux текстовым редактором vi, либо установить редактор nano.

yum install nano -y # Если нет опыта работы в vi, установим nano
nano /etc/wireguard/wg0.conf # Создаем файл конфигурации wireguard

Скопируем в файл этот шаблон, строчки xxx необходимо заменить сгенерированными ключами из файлов. Серверу и клиентам назначаются уникальные локальные IP-адреса, они должны находиться в одной подсети, можно использовать адреса из примера, IP-адрес сервера будет шлюзом для всех клиентов. При добавлении клиента выдавайте ему следующий адрес в сети. Чтоб сохранить изменения в nano нажмите Ctrl+O, затем Ctrl+X для выхода.

[Interface]
# IP-адресс сервера, он будет шлюзом для всех клиентов
Address = 172.16.15.1/24
# Отключаем перезапись конфига клиентом
SaveConfig = false
# Стандартный порт wireguard
ListenPort = 33666
# Закрытый ключ сервера из файла /etc/wireguard/privatekey
PrivateKey = xxx
# При запуске туннеля будут добавляются
# необходимые правила межсетевого экрана
# Будет открыт порт 33666, и запущен NAT
PostUp = firewall-cmd --zone=public --add-port 33666/udp
PostUp = firewall-cmd --zone=public --add-masquerade
# При остановке туннеля правила будут удаляться
PostDown = firewall-cmd --zone=public --remove-port 33666/udp
PostDown = firewall-cmd --zone=public --remove-masquerade
# Клиенты которые будут подключатся к серверу
[Peer]
# Открытый ключ первого клиента ~/publickey_client1
PublicKey = xxx
AllowedIPs = 172.16.15.2/32
# При необходимости раскомментируйте следующие строки,
# либо скопируйте их, для добавления дополнительных клиентов
#[Peer]
# Открытый ключ второго клиента ~/publickey_client2
#PublicKey = xxx
#AllowedIPs = 172.16.15.3/32

Мы создали настройки для сервера, теперь необходимо создать настройки подключения для клиентов. Создадим файл настроек для клиента.

nano /etc/wireguard/client1.conf

Шаблон файла конфигурации. Необходимо прописать ключи сервера и клиента. Внешний IP-адрес сервера можно узнать командой “ip a” либо в панели управления провайдера. Данный файл можно импортировать в клиент для операционных систем Linux ,Windows, Android, iOS.

[Interface]
# Закрытый ключ первого клиента /etc/wireguard/privatekey_client1
PrivateKey = xxx
# IP-адрес должен соответствовать адресу клиента в конфигурации сервера
Address = 172.16.30.2/24
# Сервера DNS, можно использовать эти
DNS = 8.8.8.8,1.1.1.1
[Peer]
# Открытый ключ сервера /etc/wireguard/publickey
PublicKey = xxx
# Внешний IP-адрес вашего сервера, порт стандартный
Endpoint = xx.xx.xx.xx:33666
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

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

systemctl enable firewald --now # Запускам firewalld
# Запускаем wireguard, интефейс называется wg0, по имени файла конфигурации
systemctl enable wg-quick@wg0 --now # Запускаем туннель, и включаем автоматический запуск
systemctl status wg-quick@wg0 -l # Посмотрим все ли запустилось

Если нужно посмотреть текущее состояние интерфейса WireGuard или перегрузить его (например при изменении настроек) используйте данные команды.

wg-quick up wg0 # Запуск
wg-quick down wg0 # Остановка
wg show # Текущее состояние интерфейса и текущие активные соединения
systemctl status wg-quick@wg0 -l # Просмотр состояние службы, и вывод лога запуска

Подключаем клиентов Windows

Теперь можно попробовать подключится к серверу используя например клиента WireGuard для операционной системы Windows. Скачиваем и устанавливаем с официального сайта WireGuard клиент. Жмем кнопку “Добавить туннель” и указываем на ранее созданный файл client1.conf, нажимаем кнопку “Подключить”. Готово.

-4

Подключаем клиентов Android

Для Android, так же устанавливаем из Google Play официальное приложение WireGuard. Нажимаем кнопку “+” и выбираем “Импорт из файла или архива” указываем файл client1.conf.

Так же для Android, можно передать настройки с помощью QR-кода. Для этого установим необходимый пакет на сервер и запустим генерацию QR-кода по файлу настройки клиента.

yum install qrencode -y # Устанавливаем необходимый пакет
qrencode -t ansiutf8 < /etc/wireguard/client1.conf # Генерируем QR-код по файлу клиента

В приложении на смартфоне выбираем “Сканировать QR-код”. Готово. Теперь у вас есть личный VPN сервис с неограниченным трафиком и количеством подключений.

Резервное копирование

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

tar -czf wireguard.tar.gz /etc/wireguard # Создаем архив с файлами конфигурации

Выгрузить архив с резервной копией можно с помощью scp или pscp если используется putty.

Дополнительно

При подключении любого устройства к WireGuard по умолчанию будет блокироваться весь трафик которые идёт не через туннель, это может привести к проблемам доступа к ресурсам в локальной сети. Чтоб обойти это, зайдите в настройки соединения в клиенте Windows и снимите галку с параметра “Блокировать не туннелированный трафик”, в Android в режиме редактирования туннеля поставьте галку “Исключить частные IP-адреса”.

Так же на данном сервер можно разместит свой собственный веб-сервер или личное облачное хранилище, если вам это интересно то пишите в комментариях.