WireGuard представляет собой протокол для виртуальных частных сетей (VPN), разработанный с целью обеспечения безопасного и эффективного обмена данными между устройствами через интернет. Его отличительными характеристиками являются простота, эффективность и высокая скорость передачи данных. Кроме того, в отличие от многих других своих аналогов WireGuard имеет более компактный и прозрачный код, что во многом упрощает его внедрение.
В настоящем руководстве попробуем настроить VPN-подключение между виртуальным выделенным сервером, работающем на Windows Server 2016, и рабочей станцией, находящейся внутри нашей локальной сети. При создании такого подключения у нас появится возможность осуществлять обмен данными между этими узлами через интернет. При этом трафик между ними будет зашифрован и, соответственно, защищён с целью обеспечения конфиденциальности и безопасности передаваемых данных.
Настройка VPN-сервера
Установка WireGuard на Windows-систему заключается в инсталляции соответствующего небольшого приложения. Загрузить его можно с официальной страницы WireGuard.

По окончании загрузки запустите установщик, в результате работы которого откроется проинсталлированное приложение. Здесь нажмите Add Tunnel и затем кликните Add empty tunnel.

В строку Name введите название создаваемого подключения, например, wg0. Затем добавьте в конфигурацию две строки:
ListenPort = 51820
Address = 10.0.0.1/32

В данном случае:
51820— номер порта, который будет использоваться при подключении. По умолчанию в WireGuard используется порт с номером51820, но вы можете изменить его на другой.10.0.0.1/32— IP-адрес, который мы назначаем своему VPN-серверу внутри создаваемой VPN-сети. Его вы также можете изменить на свой, но учитывайте, что клиентам вашего VPN необходимо будет присваивать IP-адреса из той же подсети.
Для сохранения внесённых изменений нажмите Save.
Настройка VPN-клиента
Настройка клиента VPN-клиента выглядит так же, как и настройка сервера. На локальный компьютер необходимо установить то же самое приложение, затем запустить его и добавить пустой VPN-туннель.

Здесь укажите название создаваемого подключения, которое не должно обязательно совпадать с названием подключения на сервере. Затем в раздел [Interface] добавьте строки, содержащие IP-адрес VPN-клиента (он должен быть в той же подсети, что и VPN-сервер) и IP-адрес сервера DNS, который будет использоваться в данном подключении.
В нашем примере эти строки выглядят следующим образом:
Address = 10.0.0.2/32
DNS = 8.8.8.8
После чего в конфигурацию VPN-клиента добавьте секцию [Peer]. Она должна содержать следующие параметры:
PublicKey— в качестве значения должен содержать публичный ключ (Public key) VPN-сервера (см. настройку VPN-сервера).AllowedIPs— параметр указывает на IP-адреса и подсети, которые должны будут маршрутизироваться через создаваемый VPN-туннель (в нашем примере это подсеть10.0.0.0/24).Endpoint— IP-адрес VPN-сервера и номер используемого при подключении порта.PersistentKeepalive— указывает на то, с какой периодичностью (в секундах) будет отправляться сообщениеkeepaliveмежду клиентом и сервером VPN-сети (в нашем примере это — 20 секунд).
Чтобы сохранить изменения, внесённые в конфигурацию, нажмите Сохранить.
Активация VPN-соединения
На заключительном этапе настройки нашей VPN-сети необходимо снова вернуться к настройке сервера. Здесь откройте конфигурацию сервера WireGuard при помощи кнопки Edit.

В окно редактирования конфигурации добавьте секцию [Peer], которая должна содержать параметры подключаемого в VPN-сети клиента. А именно:
PublicKey— параметр должен содержать публичный ключ (Public key) клиента VPN-сети (см. настройку VPN-клиента).AllowedIPs— IP-адрес VPN-клиента.
Для сохранения изменений в конфигурации нажмите Save. После чего уже можно активировать созданное VPN-подключение. Для этого в приложении и на сервере, и на клиенте кликните Activate или Подключить.
После активации VPN-соединения между сервером и клиентом в приложении WireGuard будет отражаться статистика подключения.

Убедиться в том, что соединение между нашими узлами работает, можно запустив ping с сервера на клиента и наоборот. То есть, в нашем примере со стороны клиента, имеющего IP-адрес внутри созданной VPN-сети 10.0.0.2, сервер, IP-адрес которого 10.0.0.1, будет отвечать на эхо-запросы, запущенные командой ping 10.0.0.1. И наоборот, если на сервере запустить команду ping 10.0.0.2, мы увидим, что клиент нашей VPN-сети доступен внутри неё, то есть отвечает на отправляемые запросы. Всё это, разумеется, будет работать, если и на сервере, и на клиенте разрешены ответы на запросы по ICMP.