WireGuard «придет» в ядро Linux — почему?

    В конце июля разработчики VPN-туннеля WireGuard предложили набор патчей, которые сделают их ПО для организации VPN-туннелей частью ядра Linux. Однако точная дата реализации «задумки» пока остается неизвестной. Под катом поговорим об этом инструменте подробнее.


    / фото 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. Ещё несколько статей из нашего корпоративного блога:




    Основное направление нашей деятельности — предоставление облачных сервисов:

    Виртуальная инфраструктура (IaaS) | PCI DSS хостинг | Облако ФЗ-152 | SAP-хостинг | Виртуальная СХД | Шифрование данных в облаке | Облачное хранилище
    ИТ-ГРАД 423,82
    vmware iaas provider
    Поделиться публикацией
    Комментарии 31
      –14

      Какой-то маркетинговый буллшит.

        0
        При смене сети: Wi-Fi, LTE или Ethernet нужно каждый раз переподключаться к VPN-серверу. Серверы WireGuard же не разрывают соединение, даже если пользователь получил новый IP-адрес.

        Старый добрый IPSEC IKEv2 тоже так умеет.
          +4
          Проблема в том, что настройка IPSec — занятие весьма нетривиальное. С WG достаточно сгенерировать ключи, прописать их в конфиг, указать IP-адреса и… всё.
            +1
            Утверждение про сложность настройки ipsec — тяжелое наследство, тянущееся со времен IKEv1, где действительно было достаточно не совсем очевидных граблей.

            IKEv2 очень сильно отличается в этом плане, отлично работает за натом там, где IKEv1 даже со включенным NAT Traversal не хотел заводиться, есть поддержка MOBIKE (фича, аналогичная описанной в Wireguard, с клиентами, меняющими свой айпи и неразрывной сессией), а настройка очень проста. С EAP-mschapv2 аутентификацией вообще заводится с пол-пинка, лишь бы клиент поддерживал (привет, Mikrotik!).
              +1
              Сложность настройки сервера — еще половина беды. В конце-концов, настраивается он один раз. А вот сложность настройки клиентов — это настоящая проблема. То же ipsec подключение поднять на свежеустановленной убунте — то еще приключение. И даже когда/если получится, оно все равно напоминает вигвам из костылей, а не законченное надежное решение.
                +1
                В первом абзаце моего комментария, на который вы отвечали, отсутствует указание на то, что речь идет сугубо о сервере. И это произошло совсем не случайно ;)
          +1
          Не очень понял, этот VPN может ходить только через сервера этой компании? Или всё можно сделать частным образом? Сервер, клиент — и получить кучу годноты?
            +3
            Можно самому. У меня на моём VPS поднят сервер.
            Как по мне наибольшая годнота от применения его на мобилах. У меня кастомное ядро с поддержкой wireguard, туннель постоянно поднят, а дополнительная нагрузка на батарею копеечная. И никаких забот о том что где что-то заблокировано или в каких публичных вафлях хотят тебе рекламу вставить.
              +1
              т.е. даже безотносительно к тому, что там написано и нарисовано по внешним ссылкам, вы считаете, что Линус назвал бы произведением искусства решение, насквозь пронизанное vendor lock-in'ом, и оно (решение) имело бы хоть какие-то шансы на попадание в апстрим?
              +1
              Мне кажется, сейчас незаслуженно предан забвению vtun. Я им пользуюсь много лет и ни разу не встречал проблем… Вот уж это решение точно суперминималистично и сверхпросто, хотя и в духе linux — то есть является кирпичиком для построения системы…
                +1
                Поддержу, друг!
                У меня более восьми тысяч инсталляций на различных устройствах с 2003 года.
                Единственное решение, тупое как пробка (в хорошем смысле слова ибо ничего лишнего), с достаточным функционалом и безотказно работающее на любом железе.
                +19
                > Линус назвал произведением искусства
                Не совсем так, Линус сказал, что код не идеален, но по сравнению с ужасами IPsec и OpenVPN — произведение искусства.
                  0
                  Случайно стал пользователем WireGurad благодаря github.com/trailofbits/algo. Впечатления очень положительные, приложение под Android удобное, замеры скорости (в хорошие для сервера дни) с туннелем и без туннеля практически не отличаются. При смене сети танки требовательные к сети бизнес-приложения также тупят до рестарта как и без туннеля.
                    0
                    PKSC умеет?
                      +1
                      Микротик включил бы у себя этот формат VPN — сразу бы в массы пошло.
                      Может петицию для микротика сочиним?
                        +1
                        На форуме уже посчитали что openvpn делали 3 года после feature request и ждут в 2020 :)
                        forum.mikrotik.com/viewtopic.php?t=134093
                          +1

                          ЕМНИП, Mikrotik OpenVPN клиента до ума у себя так и не довели — ни UDP, ни авторизации без логина/пароля не завезли до сих пор

                            0
                            ага. ну зато есть Metarouter, правда его тоже не на все устройства завезли))
                              0
                              Хожу с тика на линуксовый овпн без пароля, по сертификату. Логин просто должен быть, какой — без разницы.
                                0
                                Ты обратно попробуй сходить.
                                  0
                                  У TonyLorencio речь шла про клиента.

                                  Да и смысла не вижу овпн сервер на тике поднимать. Обычно те локации, где нет серверов подключаются к тем локациям, где сервера есть, а не наоборот. А если есть сервер, то и виртуальный шлюз/овпн сервер поднять не сложно.

                                  Плюс, если не путаю, на soho роутерах (кроме ac^2) мощи нехватает для овпн из-за низкой производительности и отсутствия аппаратного шифрования.
                                    0
                                    Некоторые хотят именно так, ибо на выделенный сервер деньгов жалко, а удаленным клиентам надо.
                                      0
                                      Надо что? Сервера то нету. Зачем тогда объединение сетей?

                                      Ну ок, пусть это какой-то вырожденный случай и бессерверному офису нужен доступ скажем к ip камере или очень тупому nas-у. Но случай редкий. И можно либо небрезговать паролем, либо использовать кошерный (с точки зрения mikrotik) ipsec.
                                        0
                                        Одноранговые сети много где живут в soho. Каждый с каждым работает, файлики там пошарить или принтер.
                                      0
                                      Может оказаться, что в физической локальной сети, логической частью которой хочешь стать удалённо, только роутер как-то похож на сервер, в частности всегда включён. Самый простой пример — домашняя сеть.
                            0
                            Кто-нибудь сравнивал по производительности WireGurad и SoftEther VPN без софтовой сети?
                              0
                              Ещё бы и с tuncvpn сравнить. Он тоже весьма годный и не сильно ресурсоемкий.
                                0
                                WireGuard работает полностью в режиме ядра. Как работает этот SoftEther я не знаю, но подозреваю что так же как и OpenVPN — через tun/tap.

                                Так что по скорости их вряд-ли имеет смысл сравнивать.
                                +2
                                Несмотря на то что WireGuard изначально заточен под Linux-ядро, разработчики позаботились и о портативной версии инструмента для Android-устройств


                                Некорректная фраза, т.к. Android использует ядро Linux, и «несмотря на» тут неуместно.
                                  0

                                  Интересно почему не сделали клиента под iOS, помогло бы для популяризации, вон outline на shadow socks сделали же

                                    +1
                                    Мне не нравится, что они используют собственные реализации шифрования вместо crypto API, даже под предлогом высокой скорости работы. Может, стоило бы улучшить crypto API и перевести проект на crypto API, прежде чем принимать в mainstream?

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое