Установка и настройка WireGuard

WireGuard — это новый, быстрый и эффективный протокол виртуальной частной сети (VPN), который обеспечивает защиту сетевых соединений. Он стал популярным благодаря своей простоте установки, высокой производительности и легкости настройки в сравнении с другими известными VPN-протоколами, такими как OpenVPN и IPSec. В этой статье мы рассмотрим процесс установки WireGuard на ваш сервер.

Требования к серверу

  • Для установки ПО нет строгих требований. Прежде чем начинать, убедитесь, что ваш сервер соответствует следующим минимальным условиям:
    1. Операционная система. WireGuard можно устанавливать на большинство современных операционных систем. В данной статье будет рассмотрена установка на ОС семейства Linux, в частности, на Ubuntu 22.04. Также подходят другие системы на базе Debian, такие как Ubuntu 20.04 или Debian 12.
    2. Ресурсы сервера. Вам нужен виртуальный сервер с достаточными ресурсами для обработки VPN-трафика: как минимум одно ядро процессора и 512 МБ оперативной памяти.
    3. Доступ суперпользователя. Убедитесь, что у вас есть права sudo или доступ к учетной записи root на сервере, чтобы выполнить необходимые действия по установке и настройке.
    4. Сетевые требования. Проверьте, что ваш сервер имеет публичный IP-адрес и вам доступно редактирование правил брандмауэра для разрешения VPN-трафика. Убедитесь, что нет блокирующих правил на вышестоящем оборудовании. Рекомендуется, чтобы сетевой канал сервера имел скорость не менее 100 Мбит/сек.

Первый способ: через Docker-контейнер

Использование Docker для запуска WireGuard упрощает установку, а также снижает влияние на остальное ПО на сервере (устанавливается изолированно). Опишем необходимые шаги:

Установка Docker  

Сначала убедитесь, что Docker установлен на вашем сервере. Если Docker не установлен, выполните команду:

Создание и запуск контейнера с ПО в Docker 

Предварительно создадим директорию, в которую будут помещаться конфигурационные файлы WireGuard командой:

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

  • Замените ip_вашего_VDS на IP вашего сервера.
  • Настройте другие параметры, такие как TZ (часовой пояс) и PEERS (количество клиентов). В примере установлено PEERS=3, что означает, что к этому VPN смогут подключиться только 3 пользователя.

Проверка контейнера  

После выполнения команды выше остается проверить состояние контейнера:

Если контейнер запущен, при выполнении команды будет отображаться примерно так:

Теперь вы можете получить доступ к конфигурационным файлам в папке /etc/wireguard/config, которые будут содержать ключи клиента и сервера.

Второй способ: С помощью скрипта

Установка скриптом — один из самых быстрых способов установки и настройки WireGuard. Существует несколько популярных скриптов, например, WireGuard Manager. Ниже приведен пример использования простого скрипта, производящего стандартную установку ПО:

Запуск скрипта 

Выполните следующую команду, чтобы загрузить и запустить сценарий установки WireGuard: 

Пункты установки в скрипте

Скрипт запросит у вас такие данные, как IP-адрес вашего сервера, желаемый VPN-порт (по умолчанию 51820) и количество конфигураций клиентов, которые вы хотите сгенерировать (сколько пользователей могут подключаться). Скрипт автоматически выполнит установку, настройку и генерацию ключей.

Завершение установки 

После завершения работы, скрипт создаст конфигурационные файлы для сервера и клиентов, которые обычно хранятся в папке `/etc/wireguard/`. Вы можете загрузить эти файлы на клиенты (устройства), с которых хотите подключаться к VPN.

Третий способ: Ручная установка (на примере ОС Ubuntu)

Ручная установка дает вам больше контроля над процессом. Рассмотрим необходимые шаги для этого:

Обновление пакетов в системе  

Установка ПО

WireGuard возможен для установки из официальных репозиториев Ubuntu, поэтому команда будет следующей:

Генерация приватного и публичного ключей сервера 

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

Генерация клиентских ключей

Для каждого клиентского устройства необходимо на сервере сгенерировать приватный и публичный ключи:

где вместо <i> укажите порядковый номер учетной записи, с которой будет подключаться определенное устройство. В нашем примере создадим 3 пары ключей для 3 устройств соответственно:

Настройка WireGuard  

Создайте файл конфигурации WireGuard для VPN-подключения (например, /etc/wireguard/wg0.conf) и наполните следующим содержимым:

  • Замените <server_private_key> на приватный ключ сервера из предыдущего шага (в нашем примере это файл /etc/wireguard/privatekey).
  • Добавьте клиентские публичные ключи вместо <client_public_key> соответственно количеству устройств и созданных для них ключевых пар (в нашем примере это 3 устройства и в скобках указаны имена файлов, располагающиеся в директории /etc/wireguard).
  • Для каждого устройства в секции [Peer] обязательно укажите разные адреса из выделенной подсети в секции [Interface]. В нашем примере выделена подсеть 10.13.13.1/24 и выделены адреса для устройств — 10.13.13.2, 10.13.13.3, 10.13.13.4 соответственно. 

Создание конфигурационных файлов для клиентов

Чтобы впоследствии было удобнее передавать файл настройки подключения на устройства, сразу сформируем необходимые для них конфигурационные файлы. В примере выше мы уже обозначили 3 устройства и пары ключей для них. Создадим для них конфигурационные файлы и заполним необходимым содержимым, рассматривать будем на примере 1-го устройства (файл peer_1.conf).

Открываем для редактирования файл (тем самым его создавая):

Вносим туда следующее содержимое:

  • Замените <client1_private_key> на приватный ключ 1-го устройства из 4-го шага (в нашем примере это файл /etc/wireguard/peer_1_privatekey).
  • Добавьте публичный ключ сервера вместо <server_public_key> из 3-го шага (в нашем примере это файл /etc/wireguard/publickey)
  • В секции [Interface] в параметре Address должен быть указан соответствующий адрес из секции [Peer], который указывали в 5-м шаге в файле /etc/wireguard/wg0.conf.
  • Вместо <server-ip> укажите публичный адрес сервера.
  • В секции [Peer] в параметре AllowedIPs укажите адреса, с которых должен быть доступ к VPN-серверу. В нашем примере разрешен доступ для любых адресов, в том числе и для IPv6, поэтому указано как0.0.0.0/0, ::/0

Аналогичным образом сделайте конфигурационные файлы и для остальных устройств. В нашем примере нужно создать еще конфигурационные файлы /etc/wireguard/peer_2.conf  и /etc/wireguard/peer_3.conf, указывая в них соответственные IP-адреса и соответственные приватные ключи (10.13.13.3 и/etc/wireguard/peer_2_privatekey10.13.13.4 и /etc/wireguard/peer_3_privatekey)

Включение переадресации IP

Для работы VPN, необходимо включить форвардинг IP-адресов, это можно сделать следующей командой:

Команда sysctl -w  изменяет параметры временно, только до перезагрузки системы. Чтобы изменить параметр на постоянной основе, нужно добавить в файл /etc/sysctl.conf следующую строку:

При этом после добавления строки в файл, параметр применится только после перезагрузки, если вы ранее не выполнили команду sysctl -w net.ipv4.ip_forward=1

Запуск WireGuard 

Теперь можно запускать ПО и добавить его в автозапуск при старте системы следующими командами:

Настройка фаервола 

Проверьте настройки фаервола в вашей системе на сервере, чтобы не был запрещен трафик WireGuard через порт 51820 (или заданный вами порт). На чистой системе по умолчанию правила фаервола не имеют запрещающих правил.

Настройка клиента WireGuard

После установки и настройки WireGuard на сервере вам нужно будет настроить клиенты (устройства, с которых будете подключаться вы и ваши пользователи — например, ноутбуки, телефоны) для подключения к VPN.
Опишем необходимые шаги для разных ОС:

Установка клиентского приложения WireGuard  

На ОС семейства Linux (Debian-based):

Для Windows, macOS, десктопных Linux (с GUI) или мобильных устройств (iOS/Android) достаточно скачать официальное приложение WireGuard с сайта.

Получение клиентских конфигурационных файлов 

Если пользовались первым и вторым способами установки (через Docker-контейнер или с помощью скрипта), то все необходимые ключи и файлы конфигураций были сформированы автоматически в заданной при установке директории. Например, в приведенном выше руководстве по установке через Docker мы задавали директорию /etc/wireguard/conf, соответственно, для подключения можно взять готовый конфигурационный файл по расположению /etc/wireguard/config/peer<i>/peer<i>.conf, где вместо <i> необходимо указать порядковый номер пользователя (в нашем примере было только 3 возможных пользователя – peer1, peer2 и peer3).
В третьем способе мы формировали конфигурационные файлы вручную и размещали их в директории /etc/wireguard/peer_<i>.conf, где вместо <i> необходимо указать порядковый номер пользователя (в нашем примере было только 3 возможных пользователя – peer_1, peer_2 и peer_3).

Скачайте эти файлы с сервера или скопируйте содержимое этих файлов на устройство в конфигурационный файл.

Подключение к VPN

На ОС семейства Linux (Debian-based):

Вместо peer_1.conf укажите полный путь до файла конфигурации клиента именно для того устройства, которое требуется. Нельзя указать на двух устройствах один и тот же файл конфигурации, на условном устройстве_1 из нашего примера мы укажем файл peer_1.conf, а на условном устройстве_2 — peer_2.conf.

Для десктопных приложений (Windows, Linux, MacOS) запуск проводится аналогично через подключение конфигурационного файла (в нашем случае peer_<i>.conf, где вместо <i> – порядковый номер устройства) через интерфейс приложения. Скриншот на примере приложения для ОС Windows:

На мобильных приложениях подключение из файла производится аналогичным образом:

На этом всё!