Заявленные преимущества WireGuard над другими VPN решениями:

  • Простой в использовании.
  • Использует современную криптографию: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF и т.д.
  • Компактный читаемый код, проще исследовать на уязвимости.
  • Высокая производительность.
  • Четкая и проработанная спецификация.

Принципы работы

Принципы работы можно описать примерно так:

  • Создается WireGuard интерфейс, ему назначается приватный ключ и IP адрес. Загружаются настройки других пиров: их публичные ключи, IP адреса и т.д.
  • Все IP пакеты, приходящие на WireGuard интерфейс инкапсулируются в UDP и безопасно доставляются другим пирам.
  • Клиенты задают публичный IP адрес сервера в настройках. Сервер автоматически узнает внешние адреса клиентов, когда от них приходят корректно аутентифицированные данные.
  • Сервер может менять публичный IP адрес не прерывая работы. При этом он отошлет оповещение подключенным клиентам и они обновят свою конфигурацию на лету.
  • Используется концепт маршрутизации Cryptokey Routing. WireGuard принимает и отправляет пакеты на основании публичного ключа пира. Когда сервер расшифровывает корректно аутентифицированный пакет, проверяется его src поле. Если оно соответствует с конфигурацией allowed-ips аутентифицированного пира, то пакет принимается интерфейсом WireGuard. При отправке исходящего пакета происходит соответственная процедура: берется dst поле пакета и на основании его выбирается соответсвующий пир, пакет подписывается своим ключом, шифруется ключом пира и отправляется на remote endpoint.

Вся основная логика WireGuard занимает менее 4 тысяч строк кода, тогда как OpenVPN и IPSec имеют сотни тысяч строк. Для поддержки современных криптоалгоритмов предлагается включить в состав ядра Linux новый криптографический API Zinc. В данный момент идет обсуждение, насколько это удачная идея.

Производительность

Максимальное преимущество в производительности (по сравнению с OpenVPN и IPSec) будет заметно на Linux системах, так как там WireGuard реализован в виде модуля ядра. Кроме этого поддерживаются macOS, Android, iOS, FreeBSD и OpenBSD, но в них WireGuard выполняется в userspace со всеми вытекающими последствиями для производительности. Поддержку Windows обещают добавить в ближайшем будущем.

Результаты бенчмарков с официального сайта:

Безопасность использования

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

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

Может ли WireGuard обойти брандмауэры?

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

К счастью, существует способ сделать туннелирование пакетов UDP через TCP, чтобы эту проблему можно было обойти. Также возможно запрограммировать соединение на использование порта 443 (порт трафика HTTPS), чтобы сделать его еще более трудным для блокировки. Единственная проблема со всем, что решения на данный момент на Linux.

Установка

Процесс установки детально описан на официальном сайте, отдельно хочется отметить отличную поддержку OpenWRT.

Генерируются ключи шифрования утилитой wg:

SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )

Далее, нужно создать серверный конфиг /etc/wireguard/wg0.conf со следующим содержанием:

[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32

и поднять туннель скриптом wg-quick:

sudo wg-quick up /etc/wireguard/wg0.conf

В системах с systemd вместо этого можно использовать sudo systemctl start wg-quick@wg0.service.

На клиентской машине, создать конфиг /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = $CLIENT_PRIVKEY
Address = 10.9.0.2/24
[Peer]
PublicKey = $SERVER_PUBKEY
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820 # Внешний IP сервера
PersistentKeepalive = 25 

И точно так же поднять туннель:

sudo wg-quick up /etc/wireguard/wg0.conf

Осталось настроить NAT на сервере, чтобы клиенты могли выходить в Интернет, и все готово!

Установка и настройка через скрипт

Скачиваем и выполняем следующий скрипт

wget https://raw.githubusercontent.com/l-n-s/wireguard-install/master/wireguard-install.sh -O wireguard-install.sh
bash wireguard-install.sh

Опции

Скрипт содержит следующие опции для настройки:

  • INTERACTIVE — если вписать «no» скрипт не будет задавать вопросов
  • PRIVATE_SUBNET — настройка частной подсети «10.9.0.0/24» по умолчанию
  • SERVER_HOST — публичный IP адрес, автоопределение по умолчанию
  • SERVER_PORT — прослушиваемые порты, выбираются рандомно
  • CLIENT_DNS — DNS сервера используемые клиентами, указываются через запятую

Настройка клиентов на примере Ubuntu

sudo add-apt-repository ppa:wireguard/wireguard -y && sudo apt update && sudo apt install wireguard resolvconf -y
sudo reboot

Копируем файл /root/client-wg0.conf с удаленного сервера на клиентский по следующему пути /etc/wireguard/wg0.conf и выполняем sudo systemctl start wg-quick@wg0.service

Посмотреть статус соединения: sudo wg show

Получение QR код с настройками в PNG

Может понадобится в случае если необходимо кому-то дать доступ — перекинуть картинку с кодом будет довольно быстро

qrencode -t PNG -o qr.png < tunnel.conf

Достоинства и недостатки

Достоинства

  • WireGuard использует самую современную криптографию для обеспечения высоконадежных онлайн-соединений.
  • Протокол WireGuard VPN имеет меньшую кодовую базу, чем OpenVPN и IPSec, что упрощает аудит для выявления уязвимостей.
  • WireGuard разработан для обеспечения высокой скорости, а текущие тесты показывают, что он быстрее, чем IPSec и OpenVPN.
  • Протокол WireGuard имеет улучшения производительности, которые могут снизить потребление батареи и улучшить поддержку роуминга на мобильных устройствах.
  • Его можно очень легко настроить, поскольку он использует только открытые ключи для идентификации и шифрования, поэтому ему не потребуется инфраструктура сертификатов.

Недостатки

  •   WireGuard в настоящее время находится в стадии разработки, поэтому это протокол, который следует использовать для экспериментов, а не для защиты онлайн-данных.
  • В настоящее время WireGuard работает только по протоколу UDP и не использует порт 443 (порт трафика HTTPS). В результате он может быть заблокирован сетевым администратором.
  • WireGuard в основном хорошо работает на дистрибутивах Linux. Есть порты для других платформ, но они не очень надежны.
  • У WireGuard есть некоторые проблемы с конфиденциальностью, так как его программирование заставит VPN-провайдеров регистрировать пользовательские данные.
  • WireGuard очень новый и не был тщательно протестирован.

Сравнение с другими VPN протоколами

WireGuard против PPTP

Несмотря на то, что WireGuard в настоящее время является экспериментальным протоколом, безопасность, которую он предлагает, кажется намного лучше и надежнее, чем может обеспечить PPTP. Например, встроенный в WireCuard шифр ChaCha20 более безопасен, чем шифрование MPPE PPTP, которое имеет много уязвимостей. Кроме того, существует тот факт, что трафик PPTP был взломан АНБ, и что PPTP, в отличие от WireGuard, не является открытым исходным кодом.

С точки зрения стабильности, WireGuard работает лучше, поскольку PPTP очень легко блокируется брандмауэрами NAT, потому что PPTP изначально не работает с NAT. Тем не менее, стоит отметить, что WireGuard может быть заблокирован сетевыми администраторами и в его текущем состоянии, поскольку он использует только протокол UDP — если, конечно, не приняты дополнительные меры для туннелирования пакетов UDP через TCP.

Известно, что PPTP является очень быстрым протоколом (именно поэтому многие все еще используют его), но WireGuard может предложить очень быстрые соединения из-за его легкой сборки. На данный момент, тем не менее, нет никакого теста, показывающего, насколько быстрый WireGuard по сравнению с PPTP.

Некоторые платформы (такие как macOS Sierra и iOS 10) перестали предлагать встроенную поддержку PPTP, и было бы не надуманным предположить, что они вместо этого начнут предлагать встроенную поддержку WireGuard — как только она станет полностью стабильной, конечно.

В настоящее время на самом деле трудно рекомендовать любой из этих протоколов для безопасного соединения. WireGuard определенно станет очевидным вариантом после того, как он пройдет достаточное количество тестов и завершит процесс разработки. Но на данный момент лучше выбрать другой протокол (например, OpenVPN или SoftEther).

WireGuard против L2TP / IPSec

Поскольку WireGuard стремится заменить «устаревший» IPSec, можно с уверенностью предположить, что он сможет предложить более удобный и безопасный способ работы в Интернете, чем L2TP / IPSec, особенно потому, что этот код является открытым исходным кодом, поэтому никаких опасений ни у какого правительства нет. сущность, вмешивающаяся в это. Не забывайте — Сноуден утверждал, что АНБ намеренно ослабило протокол L2TP / IPSec. Хотя нет никаких доказательств, подтверждающих это утверждение, об этом все же стоит помнить.

Однако мы точно знаем, что WireGuard намного быстрее, чем IPSec, и обеспечивает лучшую производительность. Согласно тестам на веб-сайте WireGuard, пропускная способность WireGuard может достигать 1000 Мбит / с, тогда как IPSec может обрабатывать только пропускную способность около 800 Мбит / с. Более легкая база кода также, вероятно, поможет WireGuard повысить производительность, не говоря уже о том, что функция двойной инкапсуляции в L2TP / IPSec имеет тенденцию замедлять соединения.

L2TP / IPSec легче блокировать, чем WireGuard — особенно с брандмауэром NAT

WireGuard против IKEv2 / IPSec

С точки зрения безопасности, и WireGuard, и IKEv2 / IPSec могут многое предложить. В то время как WireGuard использует новое современное шифрование, IKEv2 предлагает поддержку нескольких мощных шифров. Кроме того, IKEv2 имеет реализации с открытым исходным кодом, поэтому он может быть таким же заслуживающим доверия, как WireGuard. Единственная проблема с IKE в целом заключается в том, что есть утечка презентаций NSA, которые якобы показывают, как это можно использовать для расшифровки трафика IPSec.

IKEv2 / IPSec и WireGuard отлично справляются с обходом брандмауэров, но не используют порт 443 (порт трафика HTTPS), поэтому они могут быть заблокированы прилежным сетевым администратором. Что касается скоростей, это немного сложно сказать, но несложно утверждать, что они связаны или что IKEv2 почти так же быстр, как WireGuard. Правда, сам по себе IPSec довольно медленный, но IKEv2 / IPSec способен предложить очень высокие скорости.

IKEv2 предлагает поддержку MOBIKE, функции, которая позволяет протоколу противостоять изменениям в сети (например, когда вы переключаетесь с соединения WiFi на свой тарифный план) без сброса.

WireGuard против IPSec

Хотя IPSec является безопасным, WireGuard использует современное современное шифрование и шифры, чтобы обеспечить еще большую защиту данных — не говоря уже о том, что протокол с открытым исходным кодом, что делает его гораздо более надежным.

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

IPSec потенциально легче блокировать с помощью брандмауэра, чем WireGuard.

WireGuard против SSTP

SSTP считается таким же безопасным, как OpenVPN, поэтому весьма вероятно, что шифрование SSTP столь же надежно, как и безопасность WireGuard VPN — по крайней мере, на данный момент. Тем не менее, нам нужно упомянуть слона в комнате — SSTP принадлежит исключительно Microsoft, компании, у которой ранее не было проблем с передачей доступа к зашифрованным сообщениям NSA. И да, это также означает, что SSTP не является открытым исходным кодом, как WireGuard.

С другой стороны, SSTP гораздо сложнее заблокировать с помощью брандмауэра, чем WireGuard в настоящее время. Почему? Поскольку SSTP может использовать порт 443. Поскольку этот порт зарезервирован для трафика HTTPS, он обычно не может быть заблокирован сетевыми администраторами. WireGuard также можно настроить (с некоторыми усилиями) на использование порта 443, но — по умолчанию — он использует порты UDP. К сожалению, сетевой администратор вполне может полностью заблокировать UDP и разрешить только TCP-трафик в сети.

Что касается скоростей, вполне безопасно предположить, что WireGuard быстрее, чем SSTP. Не забывайте — скорости SSTP несколько похожи на скорости OpenVPN. А поскольку WireGuard намного быстрее, чем OpenVPN, он, вероятно, быстрее, чем SSTP.

WireGuard против SoftEther

SoftEther и WireGuard — это, по сути, новые протоколы в блоке, хотя WireGuard является «самым молодым» между ними. Оба протокола с открытым исходным кодом, обеспечивают первоклассную безопасность и предлагают очень высокую скорость. Есть шанс, что WireGuard будет немного быстрее, поскольку его пропускная способность может достигать 1000 Мбит/с, а пропускная способность SoftEther — приблизительно до 900 Мбит/с.

SoftEther по-прежнему является лучшим вариантом на данный момент, поскольку протокол более стабилен и не может быть по-настоящему заблокирован сетевыми администраторами, поскольку он может использовать порт трафика HTTPS (порт 443).

WireGuard против OpenVPN

С точки зрения безопасности у обоих протоколов есть что предложить: высокозащищенные шифры и 256-битное шифрование. Однако, если не будут приняты меры для обеспечения того, чтобы WireGuard мог использовать TCP и порт 443 без необходимости обходных путей, сетевому администратору будет намного проще блокировать его, чем OpenVPN, который может использовать как UDP и TCP, так и порт 443.

Что касается скоростей, между WireGuard и OpenVPN существует огромный разрыв. Согласно этим тестам, разница в пропускной способности между двумя протоколами составляет около 700-800 Мбит/с. Кроме того, время пинга намного ниже с WireGuard (0,403 мс) по сравнению с OpenVPN (1,514 мс).

Стоит-ли использовать протокол WireGuard?

На данный момент лучше всего использовать WireGuard, только если вы хотите протестировать протокол и поэкспериментировать с ним, чтобы увидеть, на что он способен, какие уязвимости он имеет, и насколько хорошо он может работать с брандмауэрами.

Но вам определенно следует избегать использования протокола WireGuard, если вы хотите, чтобы ваш сетевой трафик и конфиденциальность в Интернете были защищены. К сожалению, он недостаточно стабилен, чтобы гарантировать действительно безопасные соединения — не говоря уже о том, что использование WireGuard со сторонней службой VPN означает, что вы не сможете воспользоваться политикой отсутствия журнала, поскольку поставщик не может придерживаться этого с WireGuard.