/ фото Tambako The Jaguar CC
Кратко о проекте
WireGuard — VPN-туннель нового поколения, созданный Джейсоном Доненфельдом (Jason A. Donenfeld), главой компании Edge Security. Проект разрабатывался как упрощенная и шустрая альтернатива OpenVPN и IPsec. Первая версия продукта содержала всего 4 тыс. строк кода. Для сравнения, в OpenVPN порядка 120 тыс. строк, а в IPSec — 420 тыс.
По словам разработчиков, WireGuard несложно настроить, а безопасность протокола достигается за счет проверенных криптографических алгоритмов. При смене сети: Wi-Fi, LTE или Ethernet нужно каждый раз переподключаться к VPN-серверу. Серверы WireGuard же не разрывают соединение, даже если пользователь получил новый IP-адрес.
Несмотря на то что WireGuard изначально заточен под Linux-ядро, разработчики позаботились и о портативной версии инструмента для Android-устройств. Приложение пока недоработано, однако попробовать его в деле можно уже сейчас. Для этого нужно стать одним из тестеров.
В целом WireGuard пользуется довольно большой популярностью и даже был реализован несколькими VPN-провайдерами, например Mullvad и AzireVPNВ. В сети опубликовано большое количество руководств по настройке этого решения. Например, есть гайды, которые создают пользователи, а есть гайды, подготовленные авторами проекта.
Технические подробности
В официальной документации (стр.18) отмечено, что пропускная способность у WireGuard в четыре раза выше, чем у OpenVPN: 1011 Мбит/с против 258 Мбит/с соответственно. WireGuard опережает и стандартное решение для Linux IPsec ? у того 881 Мбит/с. Превосходит он его и по простоте настройки.
После обмена ключами (VPN-подключение инициализируется почти как в SSH) и установления соединения WireGuard самостоятельно решает все остальные задачи: нет необходимости беспокоиться маршрутизации, контроле состояния и др. Дополнительные усилия на настройку понадобится приложить только в том случае, если хочется задействовать симметричное шифрование.
/ фото Anders Hojbjerg CC
Для установки понадобится дистрибутив с ядром Linux «старше» 4.1. Его можно найти в репозиториях основных дистрибутивов Linux.
$ sudo add-apt-repository ppa:hda-me/wireguard
$ sudo apt update
$ sudo apt install wireguard-dkms wireguard-tools
Как отмечают редакторы xakep.ru, самостоятельная сборка из исходных текстов также несложна. Достаточно поднять интерфейс и сгенерировать открытый и закрытый ключи:
$ sudo ip link add dev wg0 type wireguard
$ wg genkey | tee privatekey | wg pubkey > publickey
WireGuard не использует интерфейс для работы с криптопровайдером CryptoAPI. Вместо него, используется поточный шифр ChaCha20, криптографическая имитовставка Poly1305 и собственные криптографические хеш-функции.
Секретный ключ генерируется с применением протокола Диффи — Хеллмана на базе эллиптической кривой Curve25519. При хешировании задействуются хеш-функции BLAKE2 и SipHash. За счет формата меток времени TAI64N протокол отбрасывает пакеты с меньшим значением timestamp, тем самым предотвращая DoS- и replay-атаки.
При этом WireGuard задействует функцию ioctl для контроля ввода/вывода (раньше использовался Netlink), что делает код чище и проще. Убедиться в этом можно, заглянув в код конфигурации.
Планы разработчиков
Пока что WireGuard — это out-of-tree модуль ядра. Но автор проекта Джейсон Доненфельд говорит, что уже настало время для полноценной реализации в ядре Linux. Так как он проще и надежнее других решений. Джейсона в этом плане поддерживает даже сам Линус Торвальдс — он назвал код WireGuard «произведением искусства».
Но о точных датах внедрения WireGuard в ядро пока никто не говорит. И едва ли это случится с выходом августовского Linux kernel 4.18. Однако есть вероятность, что это произойдет в самом ближайшем будущем: в версии 4.19 или 5.0.
Когда WireGuard будет добавлен в ядро, разработчики хотят доработать приложение для Android-устройств и начать писать приложение под iOS. Кроме того, планируется завершить реализации на Go и Rust и портировать их на macOS, Windows и BSD. Также планируется реализация WireGuard для более «экзотических систем»: DPDK, FPGA, а также множество других занятных вещей. Все они перечислены в to-do-списке авторов проекта.
P.S. Ещё несколько статей из нашего корпоративного блога:
- Облачные технологии в финансовой сфере: опыт российских компаний
- Тестирование дисковой системы в облаке
- Что скрывается за термином vCloud Director – взгляд изнутри
Основное направление нашей деятельности — предоставление облачных сервисов:
Виртуальная инфраструктура (IaaS) | PCI DSS хостинг | Облако ФЗ-152 | SAP-хостинг | Виртуальная СХД | Шифрование данных в облаке | Облачное хранилище
Комментарии (31)
DenMMM
09.08.2018 22:50При смене сети: Wi-Fi, LTE или Ethernet нужно каждый раз переподключаться к VPN-серверу. Серверы WireGuard же не разрывают соединение, даже если пользователь получил новый IP-адрес.
Старый добрый IPSEC IKEv2 тоже так умеет.dartraiden
09.08.2018 23:34+1Проблема в том, что настройка IPSec — занятие весьма нетривиальное. С WG достаточно сгенерировать ключи, прописать их в конфиг, указать IP-адреса и… всё.
ranzhe
10.08.2018 04:05Утверждение про сложность настройки ipsec — тяжелое наследство, тянущееся со времен IKEv1, где действительно было достаточно не совсем очевидных граблей.
IKEv2 очень сильно отличается в этом плане, отлично работает за натом там, где IKEv1 даже со включенным NAT Traversal не хотел заводиться, есть поддержка MOBIKE (фича, аналогичная описанной в Wireguard, с клиентами, меняющими свой айпи и неразрывной сессией), а настройка очень проста. С EAP-mschapv2 аутентификацией вообще заводится с пол-пинка, лишь бы клиент поддерживал (привет, Mikrotik!).Loki3000
10.08.2018 14:35Сложность настройки сервера — еще половина беды. В конце-концов, настраивается он один раз. А вот сложность настройки клиентов — это настоящая проблема. То же ipsec подключение поднять на свежеустановленной убунте — то еще приключение. И даже когда/если получится, оно все равно напоминает вигвам из костылей, а не законченное надежное решение.
ranzhe
11.08.2018 05:49В первом абзаце моего комментария, на который вы отвечали, отсутствует указание на то, что речь идет сугубо о сервере. И это произошло совсем не случайно ;)
VGusev2007
10.08.2018 00:22Не очень понял, этот VPN может ходить только через сервера этой компании? Или всё можно сделать частным образом? Сервер, клиент — и получить кучу годноты?
Milein
10.08.2018 00:50Можно самому. У меня на моём VPS поднят сервер.
Как по мне наибольшая годнота от применения его на мобилах. У меня кастомное ядро с поддержкой wireguard, туннель постоянно поднят, а дополнительная нагрузка на батарею копеечная. И никаких забот о том что где что-то заблокировано или в каких публичных вафлях хотят тебе рекламу вставить.
ranzhe
10.08.2018 03:59т.е. даже безотносительно к тому, что там написано и нарисовано по внешним ссылкам, вы считаете, что Линус назвал бы произведением искусства решение, насквозь пронизанное vendor lock-in'ом, и оно (решение) имело бы хоть какие-то шансы на попадание в апстрим?
oam2oam
10.08.2018 06:01Мне кажется, сейчас незаслуженно предан забвению vtun. Я им пользуюсь много лет и ни разу не встречал проблем… Вот уж это решение точно суперминималистично и сверхпросто, хотя и в духе linux — то есть является кирпичиком для построения системы…
ZigFisher
10.08.2018 23:04+1Поддержу, друг!
У меня более восьми тысяч инсталляций на различных устройствах с 2003 года.
Единственное решение, тупое как пробка (в хорошем смысле слова ибо ничего лишнего), с достаточным функционалом и безотказно работающее на любом железе.
Kaberc
10.08.2018 06:26> Линус назвал произведением искусства
Не совсем так, Линус сказал, что код не идеален, но по сравнению с ужасами IPsec и OpenVPN — произведение искусства.
alprk
10.08.2018 10:04Случайно стал пользователем WireGurad благодаря github.com/trailofbits/algo. Впечатления очень положительные, приложение под Android удобное, замеры скорости (в хорошие для сервера дни) с туннелем и без туннеля практически не отличаются. При смене сети
танкитребовательные к сети бизнес-приложения также тупят до рестарта как и без туннеля.
awsswa59
10.08.2018 10:07Микротик включил бы у себя этот формат VPN — сразу бы в массы пошло.
Может петицию для микротика сочиним?alprk
10.08.2018 10:13На форуме уже посчитали что openvpn делали 3 года после feature request и ждут в 2020 :)
forum.mikrotik.com/viewtopic.php?t=134093TonyLorencio
10.08.2018 12:12ЕМНИП, Mikrotik OpenVPN клиента до ума у себя так и не довели — ни UDP, ни авторизации без логина/пароля не завезли до сих пор
hokum13
10.08.2018 13:46Хожу с тика на линуксовый овпн без пароля, по сертификату. Логин просто должен быть, какой — без разницы.
Pinkerton42
10.08.2018 13:58Ты обратно попробуй сходить.
hokum13
10.08.2018 14:43У TonyLorencio речь шла про клиента.
Да и смысла не вижу овпн сервер на тике поднимать. Обычно те локации, где нет серверов подключаются к тем локациям, где сервера есть, а не наоборот. А если есть сервер, то и виртуальный шлюз/овпн сервер поднять не сложно.
Плюс, если не путаю, на soho роутерах (кроме ac^2) мощи нехватает для овпн из-за низкой производительности и отсутствия аппаратного шифрования.Pinkerton42
10.08.2018 14:49Некоторые хотят именно так, ибо на выделенный сервер деньгов жалко, а удаленным клиентам надо.
hokum13
10.08.2018 15:06Надо что? Сервера то нету. Зачем тогда объединение сетей?
Ну ок, пусть это какой-то вырожденный случай и бессерверному офису нужен доступ скажем к ip камере или очень тупому nas-у. Но случай редкий. И можно либо небрезговать паролем, либо использовать кошерный (с точки зрения mikrotik) ipsec.VolCh
11.08.2018 11:59Одноранговые сети много где живут в soho. Каждый с каждым работает, файлики там пошарить или принтер.
VolCh
11.08.2018 11:57Может оказаться, что в физической локальной сети, логической частью которой хочешь стать удалённо, только роутер как-то похож на сервер, в частности всегда включён. Самый простой пример — домашняя сеть.
Godless
10.08.2018 11:40Кто-нибудь сравнивал по производительности WireGurad и SoftEther VPN без софтовой сети?
alexkuzko
10.08.2018 13:37Ещё бы и с tuncvpn сравнить. Он тоже весьма годный и не сильно ресурсоемкий.
blind_oracle
10.08.2018 16:43WireGuard работает полностью в режиме ядра. Как работает этот SoftEther я не знаю, но подозреваю что так же как и OpenVPN — через tun/tap.
Так что по скорости их вряд-ли имеет смысл сравнивать.
Fracta1L
10.08.2018 17:38Несмотря на то что WireGuard изначально заточен под Linux-ядро, разработчики позаботились и о портативной версии инструмента для Android-устройств
Некорректная фраза, т.к. Android использует ядро Linux, и «несмотря на» тут неуместно.
shifttstas
10.08.2018 20:22Интересно почему не сделали клиента под iOS, помогло бы для популяризации, вон outline на shadow socks сделали же
thauquoo
11.08.2018 18:58Мне не нравится, что они используют собственные реализации шифрования вместо crypto API, даже под предлогом высокой скорости работы. Может, стоило бы улучшить crypto API и перевести проект на crypto API, прежде чем принимать в mainstream?
nafgne
Какой-то маркетинговый буллшит.