В конце июля разработчики 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-хостинг | Виртуальная СХД | Шифрование данных в облаке | Облачное хранилище

Комментарии (31)


  1. nafgne
    09.08.2018 22:23
    -3

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


  1. DenMMM
    09.08.2018 22:50

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

    Старый добрый IPSEC IKEv2 тоже так умеет.


    1. dartraiden
      09.08.2018 23:34
      +1

      Проблема в том, что настройка IPSec — занятие весьма нетривиальное. С WG достаточно сгенерировать ключи, прописать их в конфиг, указать IP-адреса и… всё.


      1. ranzhe
        10.08.2018 04:05

        Утверждение про сложность настройки ipsec — тяжелое наследство, тянущееся со времен IKEv1, где действительно было достаточно не совсем очевидных граблей.

        IKEv2 очень сильно отличается в этом плане, отлично работает за натом там, где IKEv1 даже со включенным NAT Traversal не хотел заводиться, есть поддержка MOBIKE (фича, аналогичная описанной в Wireguard, с клиентами, меняющими свой айпи и неразрывной сессией), а настройка очень проста. С EAP-mschapv2 аутентификацией вообще заводится с пол-пинка, лишь бы клиент поддерживал (привет, Mikrotik!).


        1. Loki3000
          10.08.2018 14:35

          Сложность настройки сервера — еще половина беды. В конце-концов, настраивается он один раз. А вот сложность настройки клиентов — это настоящая проблема. То же ipsec подключение поднять на свежеустановленной убунте — то еще приключение. И даже когда/если получится, оно все равно напоминает вигвам из костылей, а не законченное надежное решение.


          1. ranzhe
            11.08.2018 05:49

            В первом абзаце моего комментария, на который вы отвечали, отсутствует указание на то, что речь идет сугубо о сервере. И это произошло совсем не случайно ;)


  1. VGusev2007
    10.08.2018 00:22

    Не очень понял, этот VPN может ходить только через сервера этой компании? Или всё можно сделать частным образом? Сервер, клиент — и получить кучу годноты?


    1. Milein
      10.08.2018 00:50

      Можно самому. У меня на моём VPS поднят сервер.
      Как по мне наибольшая годнота от применения его на мобилах. У меня кастомное ядро с поддержкой wireguard, туннель постоянно поднят, а дополнительная нагрузка на батарею копеечная. И никаких забот о том что где что-то заблокировано или в каких публичных вафлях хотят тебе рекламу вставить.


    1. ranzhe
      10.08.2018 03:59

      т.е. даже безотносительно к тому, что там написано и нарисовано по внешним ссылкам, вы считаете, что Линус назвал бы произведением искусства решение, насквозь пронизанное vendor lock-in'ом, и оно (решение) имело бы хоть какие-то шансы на попадание в апстрим?


  1. oam2oam
    10.08.2018 06:01

    Мне кажется, сейчас незаслуженно предан забвению vtun. Я им пользуюсь много лет и ни разу не встречал проблем… Вот уж это решение точно суперминималистично и сверхпросто, хотя и в духе linux — то есть является кирпичиком для построения системы…


    1. ZigFisher
      10.08.2018 23:04
      +1

      Поддержу, друг!
      У меня более восьми тысяч инсталляций на различных устройствах с 2003 года.
      Единственное решение, тупое как пробка (в хорошем смысле слова ибо ничего лишнего), с достаточным функционалом и безотказно работающее на любом железе.


  1. Kaberc
    10.08.2018 06:26

    > Линус назвал произведением искусства
    Не совсем так, Линус сказал, что код не идеален, но по сравнению с ужасами IPsec и OpenVPN — произведение искусства.


  1. alprk
    10.08.2018 10:04

    Случайно стал пользователем WireGurad благодаря github.com/trailofbits/algo. Впечатления очень положительные, приложение под Android удобное, замеры скорости (в хорошие для сервера дни) с туннелем и без туннеля практически не отличаются. При смене сети танки требовательные к сети бизнес-приложения также тупят до рестарта как и без туннеля.


  1. tgz
    10.08.2018 10:05

    PKSC умеет?


  1. awsswa59
    10.08.2018 10:07

    Микротик включил бы у себя этот формат VPN — сразу бы в массы пошло.
    Может петицию для микротика сочиним?


    1. alprk
      10.08.2018 10:13

      На форуме уже посчитали что openvpn делали 3 года после feature request и ждут в 2020 :)
      forum.mikrotik.com/viewtopic.php?t=134093


      1. TonyLorencio
        10.08.2018 12:12

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


        1. alprk
          10.08.2018 12:33

          ага. ну зато есть Metarouter, правда его тоже не на все устройства завезли))


        1. hokum13
          10.08.2018 13:46

          Хожу с тика на линуксовый овпн без пароля, по сертификату. Логин просто должен быть, какой — без разницы.


          1. Pinkerton42
            10.08.2018 13:58

            Ты обратно попробуй сходить.


            1. hokum13
              10.08.2018 14:43

              У TonyLorencio речь шла про клиента.

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

              Плюс, если не путаю, на soho роутерах (кроме ac^2) мощи нехватает для овпн из-за низкой производительности и отсутствия аппаратного шифрования.


              1. Pinkerton42
                10.08.2018 14:49

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


                1. hokum13
                  10.08.2018 15:06

                  Надо что? Сервера то нету. Зачем тогда объединение сетей?

                  Ну ок, пусть это какой-то вырожденный случай и бессерверному офису нужен доступ скажем к ip камере или очень тупому nas-у. Но случай редкий. И можно либо небрезговать паролем, либо использовать кошерный (с точки зрения mikrotik) ipsec.


                  1. VolCh
                    11.08.2018 11:59

                    Одноранговые сети много где живут в soho. Каждый с каждым работает, файлики там пошарить или принтер.


              1. VolCh
                11.08.2018 11:57

                Может оказаться, что в физической локальной сети, логической частью которой хочешь стать удалённо, только роутер как-то похож на сервер, в частности всегда включён. Самый простой пример — домашняя сеть.


  1. Godless
    10.08.2018 11:40

    Кто-нибудь сравнивал по производительности WireGurad и SoftEther VPN без софтовой сети?


    1. alexkuzko
      10.08.2018 13:37

      Ещё бы и с tuncvpn сравнить. Он тоже весьма годный и не сильно ресурсоемкий.


    1. blind_oracle
      10.08.2018 16:43

      WireGuard работает полностью в режиме ядра. Как работает этот SoftEther я не знаю, но подозреваю что так же как и OpenVPN — через tun/tap.

      Так что по скорости их вряд-ли имеет смысл сравнивать.


  1. Fracta1L
    10.08.2018 17:38

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


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


  1. shifttstas
    10.08.2018 20:22

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


  1. thauquoo
    11.08.2018 18:58

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