В данном руководстве описывается процесс настройки собственного VPN-сервера WireGuard на системе Ubuntu. WireGuard разработан исключительно для ядра Linux, что обеспечивает его работу внутри этого ядра и позволяет создавать эффективные, современные и защищенные VPN-туннели.
Содержание статьи
- 1 Характеристики VPN WireGuard.
- 2 Требования
- 3 Установите WireGuard на сервер и компьютер с Ubuntu.
- 4 Подготовка конфигурационного файла для WireGuard
- 5 Активируйте IP-маршрутизацию на вашем сервере.
- 6 Установите IP-маскарад на сервере.
- 7 Настройте DNS-резолвер на вашем сервере.
- 8 Разрешение порта WireGuard в настройках брандмауэра
- 9 Старт WireGuard
- 10 Рекомендации по решению проблем.
- 11 Сравнение производительности WireGuard и OpenConnect.
- 12 Установка дополнительных клиентов VPN
- 13 Конфигурация VPN-клиента на устройствах iOS и Android.
- 14 Конфигурация клиента для Windows
- 15 Автоматическое восстановление соединения при отключении VPN.
- 16 Как активировать поддержку IPv6 в WireGuard VPN
- 17 Углубленное применение
- 18 Заключение
Характеристики VPN WireGuard.
- Ультрабыстрый и легкий, превосходит OpenVPN.
- Кроссплатформенный. WireGuard совместим с операционными системами Linux, BSD, macOS, Windows, Android, iOS и OpenWRT.
- Аутентификация пользователей осуществляется через обмен открытыми ключами, что похоже на использование SSH-ключей.
- Он назначает статические IP-адреса для туннелей VPN-клиентов. Это может не понравиться некоторым пользователям, но в определённых ситуациях это оказывается весьма полезным.
- Мобильные устройства способны плавно переходить с Wi-Fi на мобильную сеть, не теряя при этом связь.
- Он предназначен для замены OpenVPN и IPSec в большинстве сценариев применения.
WireGuard — это мой предпочтительный VPN-протокол, который избавляет меня от необходимости настраивать шифрование TLS для частных сетей.
Требования
Для того чтобы воспользоваться данным руководством, вам потребуется VPS (виртуальный частный сервер), способный беспрепятственно открывать доступ к заблокированным ресурсам (вне вашей страны или интернет-фильтров). Я советую обратить внимание на VPS от Kamatera, который предоставляет следующие возможности:
- Бесплатный доступ на 30 дней.
- Стоимость начинается от 4 долларов в месяц за 1 ГБ оперативной памяти.
- Мощный VPS-сервер на платформе KVM.
- Девять дата-центров расположены по всему миру, включая такие страны, как США, Канада, Великобритания, Германия, Нидерланды, Гонконг и Израиль.
Для создания своего сервера Linux VPS на Kamatera воспользуйтесь приведёнными ниже инструкциями.
- Как настроить сервер Linux VPS на платформе Kamatera.
Как только вы получите VPS на базе Ubuntu, придерживайтесь указанных ниже рекомендаций.
Данное руководство основывается на предположении, что как VPN-сервер, так и VPN-клиент функционируют на платформе Ubuntu.
Установите WireGuard на сервер и компьютер с Ubuntu.
Зайдите на свой сервер с Ubuntu и выполните указанные команды для установки WireGuard.
Убунту 24.04/22.04/20.04
Ubuntu 24.04/22.04/20.04 включает в себя ядро Linux с предустановленным модулем WireGuard, поэтому достаточно выполнить следующие команды.
sudo apt update sudo apt install wireguard wireguard-tools
Ubuntu 18.04
Ubuntu 18.04 включает в себя ядро Linux 4.15, поэтому для обеспечения совместимости с оборудованием пользователям необходимо установить обновлённое ядро (HWE), которое добавит ядро 5.4 в вашу систему.
sudo apt update sudo apt install linux-generic-hwe-18.04-edge
Перезагрузите сервер с Ubuntu 18.04 и выполните установку WireGuard.
sudo shutdown - r now sudo apt install wireguard wireguard-tools wireguard-dkms
Настройте WireGuard на клиентской стороне.
Далее примените аналогичные методы.

Клиент
Введите следующую команду для генерации пары открытого и закрытого ключей на локальном компьютере с операционной системой Ubuntu (VPN-клиент).
wg genkey | sudo tee /etc/wireguard/client_private. key | wg pubkey | sudo tee /etc/wireguard/client_public. key
Подготовка конфигурационного файла для WireGuard
Сервер
Для создания конфигурационного файла WireGuard на сервере Ubuntu воспользуйтесь текстовым редактором командной строки, например, Nano. Назовите сетевой интерфейс wg0.
sudo nano /etc/wireguard/wg0.conf
Вставьте следующий текст в ваш конфигурационный файл. Не забудьте применить свой уникальный закрытый ключ сервера и открытый ключ клиента.
[Interface] Address = 10.10.10.1/24 ListenPort = 51820 PrivateKey = cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=[Участник] ОткрытыйКлюч =AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4= AllowedIPs = 10.10.10.2/32

- Адрес: Укажите приватный IP-адрес вашего VPN-сервера. Я применяю сетевой диапазон 10.10.10.0/24, чтобы избежать конфликтов с вашей домашней сетью. (Обычно домашние маршрутизаторы используют диапазоны 192.168.0.0/24 или 192.168.1.0/24). Для VPN-сервера можно использовать адрес 10.10.10.1.
- Приватный ключ VPN-сервера можно обнаружить в файле /etc/wireguard/server_private. key на сервере.
- ListenPort: Сервер WireGuard VPN будет принимать соединения на UDP-порту 51820, который используется по умолчанию.
- Публичный ключ VPN-клиента можно обнаружить в файле /etc/wireguard/client_public. key на устройстве клиента.
- AllowedIPs: это IP-адреса, которые разрешено использовать клиенту VPN. В данном примере клиенту разрешён доступ только к IP-адресу 10.10.10.2 в рамках VPN-соединения.
Сохраните изменения и закройте документ. (В текстовом редакторе Nano для сохранения файла нажмите Ctrl+O, затем подтвердите, нажав Enter. Для выхода используйте комбинацию Ctrl+X.)
Настройте права доступа к файлу таким образом, чтобы только пользователь root имел возможность их читать.
sudo chmod 600 /etc/wireguard/ - R
Клиент
Для создания файла конфигурации WireGuard на вашем локальном компьютере с Ubuntu воспользуйтесь текстовым редактором командной строки, например, Nano. Назовите сетевой интерфейс wg-client0.
sudo nano /etc/wireguard/wg-client0.conf
Скопируйте данный текст и поместите его в ваш конфигурационный файл. Убедитесь, что вы применяете свой уникальный приватный ключ клиента и публичный ключ сервера.
[Interface] Address = 10.10.10.2/24 DNS = 10.10.10.1 PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=[Участник] ОткрытыйКлюч =RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I=Разрешенные IP-адреса: 0.0.0.0/0 Конечная точка:12.34.56.78:51820 PersistentKeepalive = 25
- Адрес: Укажите индивидуальный IP-адрес пользователя VPN.
- DNS: установите 10.10.10.1 (VPN-сервер) в качестве DNS-сервера. Настройка будет выполнена с помощью команды resolvconf.Также можно указать несколько DNS-серверов для обеспечения резервирования следующим образом: DNS = 10.10.10.1 8.8.8.8.
- PrivateKey: Это приватный ключ клиента, который можно обнаружить в файле /etc/wireguard/client_private. key на устройстве клиента.
- Публичный ключ сервера доступен в файле /etc/wireguard/server_public. key на сервере.
- AllowedIPs : 0.0.0.0/0 охватывает весь интернет-пространство, что подразумевает, что весь входящий и исходящий трафик должен проходить через VPN.
- Конечная точка: Публичный IP-адрес и порт VPN-сервера. Подставьте 12.34.56.78 реальным публичным IP-адресом вашего сервера.
- PersistentKeepalive: Отправляйте пустой аутентифицированный пакет к пиру каждые 25 секунд для поддержания активного соединения. При отключённом PersistentKeepalive VPN-сервер может не суметь пинговать клиент VPN.
Сохраните изменения и закройте документ.
Настройте права доступа к файлу таким образом, чтобы лишь пользователь root имел возможность его читать.
sudo chmod 600 /etc/wireguard/ - R
Активируйте IP-маршрутизацию на вашем сервере.
Для того чтобы VPN-сервер осуществлял маршрутизацию пакетов между клиентами и Интернетом, требуется активировать IP-маршрутизацию. Необходимо внести изменения в файл sysctl.conf.
sudo nano /etc/sysctl.conf
Вставьте данную строку в конец этого документа.
net. ipv4.ip_forward = 1
Сохраните файл и закройте его. После этого для применения изменений выполните следующую команду. Параметр — p загрузит параметры sysctl из файла /etc/sysctl.conf.Эта команда обеспечит сохранение наших настроек после перезагрузки системы.
sudo sysctl - p
Установите IP-маскарад на сервере.
Необходимо настроить маскировку IP в брандмауэре сервера, чтобы он мог функционировать как виртуальный маршрутизатор для клиентов VPN. Я планирую использовать UFW, который служит интерфейсом для брандмауэра iptables. Установите UFW на Ubuntu следующим образом:
sudo apt install ufw
В первую очередь необходимо разрешить SSH-трафик.
sudo ufw allow 22/tcp
Затем определите название главного сетевого интерфейса вашего сервера.
ip - c a
На моем сервере с Ubuntu интерфейс называется enp3s0.

Для настройки IP-маскарада необходимо внести команду iptables в конфигурационный файл UFW.
sudo nano /etc/ufw/before. rules
В таблице фильтров уже установлены определенные правила по умолчанию. Пожалуйста, добавьте указанные строки в конец этого файла. Не забудьте заменить enp3s0 на имя вашего сетевого интерфейса.
# Правила таблицы NAT *nat :POSTROUTING ACCEPT [0:0] - A POSTROUTING - s 10.10.10.0/24 - o enp3s0 - j MASQUERADE # Завершите каждую таблицу строкой 'COMMIT', иначе эти правила не будут обработаны COMMIT
В текстовом редакторе Nano для перехода к концу файла нажмите комбинацию клавиш Ctrl+W, а затем Ctrl+V.

Указанные строки добавят правило (-A) в конец цепочки POSTROUTING таблицы nat. Это соединит вашу виртуальную частную сеть с интернетом и защитит её от внешнего доступа. В результате интернет сможет видеть только IP-адрес вашего VPN-сервера, скрывая IP-адрес вашего VPN-клиента, аналогично тому, как ваш домашний маршрутизатор скрывает вашу локальную сеть.
Убедитесь, что в начале каждой строки отсутствуют пробелы.
По умолчанию UFW блокирует пересылку пакетов. Однако мы можем разрешить её для нашей локальной сети. Найдите в этом файле цепочку ufw-before-forward и добавьте следующие три строки, которые позволят пересылку пакетов, если источник или назначение имеют IP-адрес в диапазоне 10.10.10.0/24.
# разрешить пересылку для доверенной сети - A ufw-before-forward - s 10.10.10.0/24 - j ACCEPT - A ufw-before-forward - d 10.10.10.0/24 - j ACCEPT

Сохраните файл и закройте его. После этого активируйте UFW.
sudo ufw enable
Если вы ранее активировали UFW, вы можете перезапустить его с помощью команды systemctl.
sudo systemctl restart ufw
Теперь, если вы вызовете правила в цепочке POSTROUTING таблицы NAT с помощью следующей команды:
sudo iptables - t nat - L POSTROUTING
Вы сможете ознакомиться с правилом Masquerade.

Настройка правил брандмауэра UFW может потребовать определённого времени. Если правило маскарада не появляется, попробуйте перезапустить UFW (sudo systemctl restart ufw).
Настройте DNS-резолвер на вашем сервере.
Так как мы назначаем VPN-сервер в роли DNS-сервера для клиентов, необходимо запустить DNS-резолвер на этом сервере. В качестве DNS-сервера мы можем установить bind9.
sudo apt install bind9
После установки BIND он будет запущен автоматически. Чтобы проверить его состояние, используйте:
systemctl status bind9
●named.service - BIND DNS-сервер
Статус: загружен (/lib/systemd/system/named.service; активирован; предустановлено производителем: включено)
Состояние: активен:активно функционирует с Sun 2020-05-17 08:11:26 UTC; 37 секунд назад Документация: man:named(8) Основной PID: 13820 (named) Задачи: 5 (лимит: 1074) Память: 14.3M CGroup: /system. slice/named.service └─13820 /usr/sbin/named - f - u bind
Если он не функционирует, запустите его с помощью:
sudo systemctl start bind9
Внесите изменения в конфигурационный файл DNS-сервера BIND.
sudo nano /etc/bind/named.conf.options
Включите следующую строку, чтобы разрешить пользователям VPN осуществлять рекурсивные DNS-запросы.
allow-recursion < 127.0.0.1; 10.10.10.0/24; >;

Сохраните изменения и закройте файл. После этого внесите правки в файл /etc/default/named.
sudo nano /etc/default/named
Добавьте параметр -4 в OPTIONS, чтобы убедиться, что BIND может отправлять запросы к корневым DNS-серверам.
OPTIONS="-u bind -4"
Сохраните изменения и закройте документ.
По умолчанию в BIND активирована поддержка DNSSEC, которая гарантирует достоверность и защиту DNS-ответов от подделки. Однако, могут возникнуть проблемы с его функционированием, например, из-за смены доверенного ключа или по другим причинам. Чтобы обеспечить корректную работу, можно восстановить базу данных управляемых ключей с помощью следующих команд.
sudo rndc managed-keys destroy sudo rndc reconfig
Перезапустите службу BIND9 для применения внесённых изменений.
sudo systemctl restart bind9
Далее необходимо выполнить команду, которая позволит VPN-клиентам устанавливать соединение через порт 53.
sudo ufw insert 1 allow in from 10.10.10.0/24
Разрешение порта WireGuard в настройках брандмауэра
Выполните команду для открытия UDP-порта 51820 на сервере.
sudo ufw allow 51820/udp
Старт WireGuard
сервер
Введите следующую команду на сервере для запуска WireGuard.
Настройте автоматическое запуск программы при старте системы.
Проверьте состояние с помощью следующей команды. Состояние должно быть активным (вышел).
Сервер WireGuard теперь полностью настроен для приема подключений от клиентов.
Клиент
Настройте автоматическое запуск программы при старте системы.
Убедитесь в его состоянии:
Теперь откройте сайт: https://icanhazip.com/, чтобы узнать ваш публичный IP-адрес. Если все сделано правильно, вы увидите публичный IP-адрес вашего VPN-сервера вместо IP-адреса вашего компьютера.
Также можно воспользоваться следующей командой для получения вашего актуального публичного IP-адреса.
curl https://icanhazip.com
Рекомендации по решению проблем.
Убедитесь, что порт 51820 доступен.
Сначала необходимо установить сканер портов nmap на клиенте VPN.
sudo apt install nmap
Просканируйте UDP-порт 51820 на вашем сервере. Не забудьте заменить 12.34.56.78 на актуальный публичный IP-адрес вашего сервера.
sudo nmap - sU - pU:51820 12.34.56.78
Если сервер WireGuard активен, то при сканировании порта он должен показывать статус открыт или open|filtered.

Если сканирование не показало результатов, это может означать, что сервер WireGuard не функционирует или UDP порт 51820 не открыт в вашем брандмауэре.

Проверьте логи сервера WireGuard на наличие возможных ошибок.
sudo journalctl - eu wg-quick@wg0
Не получается выполнить команду ping.
Вы можете протестировать работоспособность туннеля, отправив ping с VPN-клиента на VPN-сервер (ping 10.10.10.1). Если вы получите такое сообщение об ошибке,
ping: sendmsg: Required key not available
Это может указывать на ошибку в параметре AllowedIPs, например, из-за опечатки. После исправления ошибки перезапустите как VPN-сервер, так и VPN-клиент.
Возможно, вы не включили строку ListenPort = 51820 в конфигурацию вашего сервера.
Публичный IP-адрес остается постоянным.
Если VPN-туннель был успешно создан, но при этом публичный IP-адрес клиента остаётся неизменным, это может указывать на то, что правило маскирования или перенаправления в конфигурационном файле UFW не функционирует должным образом. У меня возникала подобная ситуация, когда из-за опечатки в файле /etc/ufw/before. rules мой компьютер не имел доступа к Интернету.
Важно отметить, что использование параметра SaveConfig=true в разделе [Interface] конфигурационного файла WireGuard не рекомендуется. Этот параметр заставляет WireGuard сохранять текущие настройки при завершении работы. В результате, если вы внесете изменения, добавив новые [Peer] в конфигурационный файл, и затем перезапустите WireGuard, все ваши новые настройки будут перезаписаны.
Активируйте журнал отладки в ядре Linux.
При использовании ядра Linux версии 5.6 и выше у вас есть возможность активировать отладочный лог для WireGuard, введя следующую команду.
sudo su - echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control
После этого вы сможете ознакомиться с отладочными журналами, используя
sudo dmesg - wH | grep wireguard
sudo journalctl - kf | grep wireguard
Если вы столкнулись с этой ошибкой, это указывает на то, что предоставленный публичный ключ является недействительным.
Invalid handshake initiation
Перезапустите
Если ваш VPN по-прежнему не функционирует, попробуйте перезагрузить VPN-сервер.
После этого отключите VPN-клиент.
Обновите программное обеспечение на VPN-клиенте.
sudo apt update; sudo apt upgrade
После этого перезапустите VPN-клиент.
Если ваш WireGuard VPN функционирует только после перезагрузки, подумайте о создании задания cron для автоматической перезагрузки сервиса.
sudo crontab - e
Включите следующую строку в данный файл.
Сравнение производительности WireGuard и OpenConnect.
На одном из своих VPS-серверов я настроил как WireGuard, так и VPN-сервер OpenConnect. Результаты тестирования скорости выглядят следующим образом. Возможно, это не будет казаться быстрым, так как связь между моим компьютером и VPN-сервером оставляет желать лучшего. Ваша скорость будет зависеть от задержек и потерь пакетов между VPN-клиентом и сервером.
- WireGuard — настоящий лидер. Его скорость почти в три раза превышает скорость OpenConnect.
- OpenConnect, использующий TCP с BBR, показывает большую скорость, чем OpenConnect на основе UDP. Это может удивлять, ведь многие утверждают, что UDP всегда быстрее, чем TCP.
WireGuard способен обеспечивать скорость до 52296 Kbps (примерно 51 Mbit/s) при просмотре видео на YouTube.

OpenConnect, использующий TLS с алгоритмом TCP BBR, способен обеспечить скорость до 16504 Kbps (около 16 Mbit/s) во время просмотра видео на YouTube.

OpenConnect (TLS через UDP) способен достигать скорости 12997 Kbps (примерно 12.7 Mbit/s) при просмотре видео на YouTube.

Установка дополнительных клиентов VPN
WireGuard предназначен для связывания одного IP-адреса с одним VPN-клиентом. Чтобы подключить дополнительные VPN-клиенты (например, Windows, Android, iOS и прочие), необходимо сгенерировать уникальную пару закрытого и открытого ключа для каждого клиента. Затем открытый ключ каждого из VPN-клиентов следует внести в конфигурационный файл сервера (/etc/wireguard/wg0.conf) следующим образом:
[Interface] Address = 10.10.10.1/24 PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA= ListenPort = 51820 [Peer] PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA= AllowedIPs = 10.10.10.2/32 [Peer] PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8= AllowedIPs = 10.10.10.3/32 [Peer] PublicKey = EVstHZc6QamzPgefDGPLFEjGyedJk6SZbCJttpzcvC8= AllowedIPs = 10.10.10.4/32
Каждый клиент VPN получит фиксированный частный IP-адрес (например, 10.10.10.2, 10.10.10.3, 10.10.10.4 и так далее). Для того чтобы изменения начали действовать, необходимо перезапустить сервер WireGuard.
После этого настройте конфигурацию WireGuard на каждом VPN-клиенте, как это принято.
Конфигурация VPN-клиента на устройствах iOS и Android.
Учитывая, что у меня есть iPhone, я продемонстрирую, как настроить клиента WireGuard на iOS. Сначала скачайте приложение WireGuard из App Store. Затем запустите его и нажмите на кнопку «Добавить туннель».
Существует три метода для создания нового туннеля WireGuard.
- создать из документа или архива
- превратить в QR-код
- Сформировать с основ.
Выберите способ с использованием QR-кода, так как это более удобно. На сервере выполните следующую команду для создания открытого и закрытого ключа WireGuard для клиента iOS.
wg genkey | sudo tee /etc/wireguard/ios_private. key | wg pubkey | sudo tee /etc/wireguard/ios_public. key
Создайте файл настройки WireGuard для клиента на iOS.
sudo nano /etc/wireguard/ios.conf
Включите следующие строки.
[Interface] Address = 10.10.10.3/24 DNS = 10.10.10.1 Закрытый ключ =mNiZvB+sASN/+ZiJkMyan1ZZOzCXkrjYPlbg7rZJ7Fc=[Участник] #VPN сервер ОбщественныйКлюч =OMaXX7XD+wEYWfYyFcZZBN4vFSC16A1e8t80ONiJKWY=Разрешенные IP-адреса: 0.0.0.0/0 Конечная точка:12.34.56.78:51820 PersistentKeepalive = 25
- Адрес: Введите приватный IP-адрес для устройства iOS клиента.
- DNS: укажите 10.10.10.1 (VPN-сервер) в качестве DNS-сервера. Вы также можете добавить дополнительные DNS-серверы для резервного копирования, например: DNS = 10.10.10.1, 8.8.8.8. Учтите, что приложение iOS не принимает синтаксис DNS = 10.10.10.1 8.8.8.8.
- Закрытый ключ клиента для iOS можно обнаружить в файле /etc/wireguard/ios_private. key.
- Открытый ключ сервера можно обнаружить в файле /etc/wireguard/server_public. key на сервере.
- AllowedIPs : 0.0.0.0/0 охватывает весь интернет-пространство, что подразумевает, что весь входящий и исходящий трафик должен проходить через VPN.
- Точка доступа: Открытый IP-адрес и порт вашего VPN-сервера. Замените 12.34.56.78 на фактический открытый IP-адрес вашего сервера.
- PersistentKeepalive: Каждые 25 секунд отправляйте пустой аутентифицированный пакет на пира, чтобы поддерживать соединение активным. Без включенного PersistentKeepalive сервер VPN может не иметь возможности отправлять пинг клиенту VPN.
Сохраните файл и закройте его. После этого выполните следующую команду на сервере WireGuard VPN для создания QR-кода на основе конфигурационного файла iOS.
sudo apt install qrencode sudo cat /etc/wireguard/ios.conf | qrencode - t ansiutf8
Отсканируйте QR-код в приложении WireGuard для iOS, чтобы загрузить содержимое файла /etc/wireguard/ios.conf в клиент WireGuard на вашем устройстве.
После установки туннеля на клиенте iOS необходимо также внести изменения в конфигурационный файл сервера WireGuard, добавив туда [peer].
sudo nano /etc/wireguard/wg0.conf
[Interface] Address = 10.10.10.1/24 PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA= ListenPort = 51820 [Peer] PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA= AllowedIPs = 10.10.10.2/32 [Peer] # клиент iOS PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8= AllowedIPs = 10.10.10.3/32
Сохраните изменения и закройте файл. После этого перезапустите сервер WireGuard VPN.
Теперь вы можете подключиться к WireGuard VPN через приложение для iOS.
Конфигурация клиента для Windows
После установки откройте программу WireGuard. На левой панели щелкните правой кнопкой мыши, чтобы создать новый пустой туннель. Это автоматически сгенерирует пару ключей (открытый и закрытый) для клиента Windows.

Теперь необходимо включить дополнительную информацию.
[Interface] PrivateKey = mNiZvB+sASN/+ZiJkMyan1ZZOzCXkrjYPlbg7rZJ7Fc= Address = 10.10.10.4/24 DNS равен 10.10.10.1 [Peer] # VPN-сервер Открытый ключ =OMaXX7XD+wEYWfYyFcZZBN4vFSC16A1e8t80ONiJKWY=Разрешенные IP-адреса: 0.0.0.0/0 Конечная точка:12.34.56.78:51820 PersistentKeepalive = 25
- Укажите частный IP-адрес для компьютера с Windows.
- Укажите 10.10.10.1 (сервер VPN) в качестве основного DNS-сервера. Для резервирования можно добавить несколько DNS-серверов, например: DNS = 10.10.10.1, 8.8.8.8. Имейте в виду, что приложение для Windows не поддерживает формат записи DNS = 10.10.10.1 8.8.8.8.
- Закрытый ключ: Автоматически генерируемый ключ клиента Windows.
- Открытый ключ сервера можно обнаружить в файле /etc/wireguard/server_public. key на сервере.
- AllowedIPs: 0.0.0.0/0 охватывает весь интернет, что подразумевает необходимость направлять весь интернет-трафик через VPN.
- Endpoint: Публичный IP-адрес и порт VPN-сервера. Замените 12.34.56.78 на фактический публичный IP-адрес вашего сервера.
- PersistentKeepalive: Отправляйте пустой аутентифицированный пакет вашему партнеру каждые 25 секунд для поддержания активного соединения. Если PersistentKeepalive не активирован, VPN-сервер может не суметь пинговать VPN-клиента.

Сохраните настройки.
Когда туннель будет добавлен на клиенте Windows, необходимо будет внести изменения в файл конфигурации сервера WireGuard, добавив [peer].
sudo nano /etc/wireguard/wg0.conf
[Interface] Address = 10.10.10.1/24 PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA= ListenPort = 51820 [Peer] PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA= AllowedIPs = 10.10.10.2/32 [Peer] # клиент iOS PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8= AllowedIPs = 10.10.10.3/32 [Peer] # клиент Windows PublicKey = wJpwC/gCWXZTGa5lQReKowRvymaaEUav0N1qeK74HlQ= AllowedIPs = 10.10.10.4/32
Сохраните изменения и закройте файл. После этого перезапустите сервер WireGuard VPN.
Теперь вы можете настроить подключение WireGuard VPN на операционной системе Windows.
Автоматическое восстановление соединения при отключении VPN.
В некоторых случаях соединение VPN может потеряться по разным причинам. Вы можете использовать следующую команду для проверки, способен ли VPN-клиент отправить пинг на частный IP-адрес сервера VPN (10.10.10.1). Если пинг не проходит, то будет выполнена команда справа для перезапуска VPN-клиента. || является оператором ИЛИ в Bash, который выполняет команду справа только в случае, если команда слева завершилась с ошибкой.
Пинг будет осуществлён 9 раз, что составляет 9 секунд. Вы можете воспользоваться циклом for в оболочке Bash, чтобы выполнить всю команду 6 раз, в результате чего общее время составит 54 секунды.
for ((i=1; ido (ping - c9 10.10.10.1 > /dev/null || systemctl restart [email protected]) done
Теперь у нас есть возможность настроить задачу Cron для автоматизации данного процесса. Необходимо внести изменения в файл crontab для пользователя root на VPN-клиенте.
sudo crontab - e
Bash не устанавливается как стандартная оболочка в Cron. Чтобы назначить её в качестве оболочки по умолчанию, добавьте следующую строку в начало файла Crontab.
SHELL=/bin/bash
Добавьте следующую строку в нижней части этого файла.
* * * * * for ((i=1; ido (ping - c9 10.10.10.1 > /dev/null || systemctl restart [email protected]) done
Эта задача Cron будет запускаться каждую минуту и выполнять 6 проверок в течение каждой минуты. Не забудьте сохранить изменения и закрыть файл.
Как активировать поддержку IPv6 в WireGuard VPN
Измените файл настройки сервера WireGuard.
sudo nano /etc/wireguard/wg0.conf
Включите частный IPv6-адрес наряду с IPv4-адресом.
[Interface] Address = 10.10.10.1/24, fda9:4efe:7e3b:03ea::1/64 Порт для прослушивания = 51820
Закрытый ключ = cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=
[Собеседник]
Открытый ключ = AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4=
Разрешенные IP-адреса = 10.10.10.2/32 fda9:4efe:7e3b:03ea::2/64
Сохраните файл и закройте его. Затем перезапустите сервер WireGuard.
sudo systemctl restart wg-quick@wg0
После этого внесите изменения в файл конфигурации клиента WireGuard.
sudo nano /etc/wireguard/wg-client0.conf
Включите частный IPv6-адрес наряду с IPv4-адресом.
[Interface] Address = 10.10.10.2/24, fda9:4efe:7e3b:03ea::2/64 DNS = 10.10.10.1
Приватный ключ = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=
[Сторона]
Публичный ключ = RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I=
Разрешенные IP = 0.0.0.0/0, ::0/0 Endpoint = 12.34.56.78:51820 PersistentKeepalive = 25
Сохраните файл и закройте его. После этого перезапустите клиент WireGuard.
sudo systemctl restart wg-quick@wg-client0
При возникновении следующей ошибки,
RTNETLINK answers permission denied
Необходимо активировать IPv6 на клиентском устройстве.
sudo nano /etc/sysctl. d/60-custom.conf
Включите следующие строки.
net. ipv6.conf.all. disable_ipv6 = 0 net. ipv6.conf.default. disable_ipv6 = 0 net. ipv6.conf.lo. disable_ipv6 = 0
Сохраните файл и закройте его. После этого внесите изменения.
sudo sysctl - p /etc/sysctl. d/60-custom.conf
Активируйте пересылку IPv6 на сервере VPN.
Теперь необходимо активировать пересылку IP для IPv6 на VPN-сервере. Для этого откройте файл sysctl.conf и внесите изменения.
sudo nano /etc/sysctl. d/60-custom.conf
Включите следующую строку в данный файл.
net. ipv6.conf.all. forwarding=1
Закройте файл после сохранения. Затем выполните команду ниже, чтобы применить изменения.
sudo sysctl - p /etc/sysctl. d/60-custom.conf
Настройте маскировку IPv6 на сервере.
Следующим шагом необходимо настроить маскировку IPv6 в файрволе сервера, чтобы сервер начал функционировать как виртуальный роутер для VPN-пользователей.
sudo nano /etc/ufw/before6.rules
По умолчанию для таблицы фильтрации установлены определенные правила. В конец данного файла необходимо добавить следующие строки, при этом заменив ens3 на название вашего сетевого интерфейса.
# Правила таблицы NAT *nat :POSTROUTING ACCEPT [0:0] - A POSTROUTING - s fda9:4efe:7e3b:03ea::/64 - o ens3 - j MASQUERADE # Заканчивайте каждую таблицу строкой 'COMMIT', иначе эти правила не будут обработаны COMMIT
Чтобы переместиться в конец файла в текстовом редакторе Nano, нажмите Ctrl+W, затем Ctrl+V.

По умолчанию UFW блокирует пересылку пакетов. Мы можем разрешить эту функцию для нашей частной сети IPv6. В этом файле найдите цепочку ufw6-before-forward и добавьте три строки, которые позволят пересылку пакетов, если исходный или целевой IP находятся в диапазоне fda9:4efe:7e3b:03ea::/64.
# Разрешить пересылку IPv6 для VPN - A ufw6-before-forward - s fda9:4efe:7e3b:03ea::/64 - j ACCEPT - A ufw6-before-forward - d fda9:4efe:7e3b:03ea::/64 - j ACCEPT

Сохраните файл и закройте его. Затем перезапустите UFW для применения изменений.
sudo systemctl restart ufw
Теперь, если вы вызовете правила в цепочке POSTROUTING таблицы NAT с помощью следующей команды:
sudo ip6tables - t nat - L POSTROUTING
Вы можете ознакомиться с принципом маскировки.

Углубленное применение
Теперь я расскажу о том, как применять маршрутизацию по политике, разделенное туннелирование и аварийный выключатель VPN с использованием WireGuard VPN. Важно помнить, что сочетание этих методов не рекомендуется. Если вы выбрали маршрутизацию по политике, избегайте использования разделенного туннелирования и аварийного выключателя, и наоборот. Этот раздел ориентирован на опытных пользователей. Новичкам в WireGuard, которые не понимают назначения этих функций, лучше не следовать данным инструкциям.
Политическая маршрутизация
По умолчанию весь трафик клиента VPN проходит через сервер VPN. Однако иногда возникает необходимость направлять лишь определённые виды трафика, учитывая протокол транспортного уровня и целевой порт. Этот подход называется политической маршрутизацией.
Настройка маршрутизации по политике выполняется на клиентском устройстве, и перед этим необходимо отключить VPN-соединение.
После этого внесите изменения в файл настроек клиента.
sudo nano /etc/wireguard/wg-client0.conf
Если вы внесете три новые строки в раздел [interface], WireGuard сформирует маршрутизационную таблицу с названием “1234” и добавит правило ip в эту таблицу. В данном случае трафик будет перенаправляться через VPN-сервер только при использовании TCP как транспортного протокола и порта назначения 25, что соответствует отправке электронных писем с клиентского устройства.
Table = 1234 PostUp = ip rule add ipproto tcp dport 25 table 1234 PreDown = ip rule delete ipproto tcp dport 25 table 1234

Важно: Для настройки маршрутизации по политике клиент должен использовать Ubuntu версии 20.04 или выше, так как утилита ip в Ubuntu 18.04 не поддерживает параметры ipproto и dport.
Сохраните файл и закройте его. После этого откройте клиент WireGuard.
Для маршрутизации трафика через TCP-порты 80 и 443 применяйте данный синтаксис.
Table = 1234 PostUp = ip rule add ipproto tcp dport 80 table 1234; ip rule add ipproto tcp dport 443 table 1234 PreDown = ip rule delete ipproto tcp dport 80 table 1234; ip rule delete ipproto tcp dport 443 table 1234
Не забудьте отключить соединение WireGuard VPN перед тем, как вносить изменения в правила маршрутизации по политике.
Вы можете также задать диапазон портов следующим образом: от TCP порта 26 до TCP порта 10240.
Table = 1234 PostUp = ip rule add ipproto tcp dport 26-10240 table 1234 PreDown = ip rule delete ipproto tcp dport 26-10240 table 1234
Чтобы указать порты для TCP и UDP, удалите ipproto tcp.
Table = 1234 PostUp = ip rule add dport 26-10240 table 1234 PreDown = ip rule delete dport 26-10240 table 1234
Вы можете настроить VPN-клиент так, чтобы VPN-туннель активировался лишь при отправке трафика к определённым IP-адресам, используя для этого опцию «to».
Table = 1234 PostUp = ip rule add to 10.0.0.0/24 table 1234 PreDown = ip rule delete to 10.0.0.0/24 table 1234
Деление туннелей
По умолчанию весь трафик на VPN-клиенте проходит через VPN-сервер. Чтобы настроить разделение туннелей и сделать так, чтобы только трафик к IP-диапазону 10.10.10.0/24 использовал WireGuard VPN, выполните следующие шаги. Это особенно полезно для создания частной сети между несколькими облачными серверами, так как VPN-клиенты будут функционировать на этих серверах. Использование полного VPN-туннеля может привести к потере соединения с облачными серверами.
Измените файл настроек клиента.
sudo nano /etc/wireguard/wg-client0.conf
AllowedIPs = 0.0.0.0/0
AllowedIPs = 10.10.10.0/24
Трафик будет проходить через VPN только в том случае, если адрес назначения находится в диапазоне IP 10.10.10.0/24. После этого сохраните изменения и закройте файл. Затем перезапустите клиент WireGuard.
Можно также разрешить доступ для нескольких диапазонов IP. Например, если VPN-сервер управляет сетью 10.10.20.0/24, вы можете установить параметры AllowedIPs на VPN-клиенте следующим образом:
AllowedIPs = 10.10.10.0/24, 10.10.20.0/24
Таким образом, VPN-клиент способен подключаться к сети 10.10.20.0/24 через VPN-сервер и в обратном направлении.
Для добавления одного IP-адреса воспользуйтесь следующим форматом.
AllowedIPs = 10.10.10.0/24, 10.10.20.0/24, 8.8.8.8/32
Клиенту рекомендуется подключаться к VPN-серверу для взаимодействия с 8.8.8.8.
Функция отключения интернета при отключении VPN
Ваш компьютер по умолчанию может подключаться к Интернету через стандартный шлюз, если соединение с VPN прерывается. Вы можете активировать функцию kill switch, которая блокирует передачу незащищенных данных через интерфейсы, не связанные с WireGuard.
Прекратите работу клиента WireGuard.
Измените файл настроек клиента.
sudo nano /etc/wireguard/wg-client0.conf
Включите следующие две строки в раздел [interface].
PostUp = iptables - I OUTPUT ! - o %i - m mark ! --mark $(wg show %i fwmark) - m addrtype ! --dst-type LOCAL - j REJECT PreDown = iptables - D OUTPUT ! - o %i - m mark ! --mark $(wg show %i fwmark) - m addrtype ! --dst-type LOCAL - j REJECT
[Интерфейс] Адрес = 10.10.10.2/24 DNS = 10.10.10.1 ПриватныйКлюч = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=PostUp = iptables - I OUTPUT ! - o %i - m mark ! --mark $(wg show %i fwmark) - m addrtype ! --dst-type LOCAL - j REJECT
PreDown = iptables - D OUTPUT ! - o %i - m mark ! --mark $(wg show %i fwmark) - m addrtype ! --dst-type LOCAL - j REJECT
[Сосед] ПубличныйКлюч =RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I=Допустимые IP-адреса = 0.0.0.0/0; УказанныйЭндпоинт =12.34.56.78:51820 ПостоянныйKeepalive = 25
Сохраните файл и закройте его. После этого откройте клиент WireGuard.
Несколько IP-адресов в интерфейсе WireGuard.
Если вы давно используете настольную версию Ubuntu, то, вероятно, вам известно, что Network Manager позволяет получать несколько IP-адресов от вашего домашнего маршрутизатора для Ethernet-интерфейса. Кроме того, интерфейс WireGuard также поддерживает множественные IP-адреса. К примеру, на VPN-клиенте можно настроить два IP-адреса.
[Интерфейс] Адрес = 10.10.10.2/24 Адрес = 10.10.10.3/24 .
В данной ситуации необходимо разрешить несколько IP-адресов на VPN-сервере для указанного клиента, иначе клиент VPN может не установить соединение с сервером.
[Сосед] . РазрешенныеIPs = 10.10.10.2/32, 10.10.10.3/32
Вы можете воспользоваться этой командой для проверки IP-адресов, ассоциированных с сетевым интерфейсом.
ip - c a
Примечание
- Команда ifconfig позволяет отобразить только IP-адрес сетевого интерфейса.
- При создании нового.conf файла для другого интерфейса WireGuard, убедитесь, что он использует порт, отличный от 51820, иначе возникнет ошибка «Адрес уже используется».
Заключение
На этом всё! Надеюсь, что данный учебник оказался полезным для вас при установке и настройке WireGuard на Ubuntu. Если вы нашли эту статью интересной, подписывайтесь на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций.

