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.