WireGuard

Бесплатный и открытый протокол VPN

WireGuard
Оригинальный автор(ы)Джейсон А. Доненфельд
Разработчик(и)Джейсон А. Доненфельд
Первоначальный выпуск2015 ; 10 лет назад [1] ( 2015 )
Стабильный релиз
1.0.20220627 [2]  / 27 июня 2022 г. ; 2 года назад ( 27 июня 2022 )
Репозиторий
  • git.zx2c4.com/wireguard-linux
Написано вC ( Linux , модули ядра FreeBSD , NetBSD , драйверы ядра OpenBSD , драйверы ядра Windows ), Go (реализация пользовательского пространства)
Операционная система
ТипВиртуальная частная сеть
Лицензияразличные бесплатные и с открытым исходным кодом
Веб-сайтwww.wireguard.com

WireGuard — это протокол связи и бесплатное программное обеспечение с открытым исходным кодом , которое реализует зашифрованные виртуальные частные сети (VPN). [5] Он стремится быть легче и производительнее, чем IPsec и OpenVPN , два распространенных протокола туннелирования . [6] Протокол WireGuard передает трафик по UDP . [7]

В марте 2020 года версия программного обеспечения для Linux достигла стабильного производственного релиза и была включена в ядро ​​Linux 5.6, а также была портирована на более ранние ядра Linux в некоторых дистрибутивах Linux . [4] Компоненты ядра Linux лицензируются в соответствии с лицензией GNU General Public License (GPL) версии 2; другие реализации — в соответствии с GPLv2 или другими свободными/открытыми лицензиями. [5]

Протокол

Протокол WireGuard представляет собой вариант шаблона рукопожатия Noise Protocol Framework IK , как показано выбором Noise_IKpsk2_25519_ChaChaPoly_BLAKE2sдля значения строки Construction, указанной на стр. 10 Белой книги.

WireGuard использует следующее: [8]

В мае 2019 года исследователи из INRIA опубликовали проверенное машиной доказательство протокола WireGuard, созданное с помощью помощника по проверке CryptoVerif . [9]

Дополнительный режим предварительно общего симметричного ключа

WireGuard поддерживает режим предварительно распределенного симметричного ключа, который обеспечивает дополнительный уровень симметричного шифрования для смягчения будущих достижений в области квантовых вычислений. Это устраняет риск того, что трафик может храниться до тех пор, пока квантовые компьютеры не смогут взломать Curve25519 , после чего трафик может быть расшифрован. Предварительно распределенные ключи «обычно проблематичны с точки зрения управления ключами и с большей вероятностью могут быть украдены», но в краткосрочной перспективе, если симметричный ключ будет скомпрометирован, ключи Curve25519 по-прежнему обеспечивают более чем достаточную защиту. [10]

Нетворкинг

WireGuard использует только [7] UDP [ 5] из-за потенциальных недостатков TCP-over-TCP. [7] [11] [12] Туннелирование TCP через соединение на основе TCP известно как «TCP-over-TCP», и это может привести к существенной потере производительности передачи из-за проблемы сбоя TCP .

Порт сервера по умолчанию — UDP 51820.

WireGuard полностью поддерживает IPv6, как внутри, так и снаружи туннеля. Он поддерживает только уровень 3 для IPv4 и IPv6 и может инкапсулировать v4-в-v6 и наоборот. [13]

Накладные расходы MTU

Накладные расходы WireGuard распределяются следующим образом: [14]

  • 20-байтовый заголовок IPv4 или 40-байтовый заголовок IPv6
  • 8-байтовый заголовок UDP
  • 4-байтовый тип
  • 4-байтовый индекс ключа
  • 8-байтовый одноразовый номер
  • N-байт зашифрованных данных
  • 16-байтовый тег аутентификации

Эксплуатационные соображения MTU

Предполагая, что базовая сеть, транспортирующая пакеты WireGuard, поддерживает MTU в 1500 байт, настройка интерфейса WireGuard на MTU в 1420 байт для всех задействованных одноранговых узлов идеально подходит для транспортировки трафика IPv6 + IPv4. Однако при исключительной передаче трафика IPv4 более высокого MTU в 1440 байт для интерфейса WireGuard будет достаточно. [14]

С точки зрения эксплуатации и единообразия конфигурации сети выбор конфигурации 1420 MTU для всей сети для интерфейсов WireGuard был бы выгоден. Такой подход обеспечивает согласованность и облегчает более плавный переход к включению IPv6 для одноранговых узлов и интерфейсов WireGuard в будущем.

Предостережение

Могут быть ситуации, когда, например, одноранговый узел находится за сетью с MTU 1500 байт, а второй одноранговый узел находится за беспроводной сетью, такой как сеть LTE , где зачастую оператор решает использовать MTU, который намного меньше 1420 байт. В таких случаях базовый стек IP-сетей хоста фрагментирует инкапсулированный пакет UDP и отправляет пакеты через него, однако пакеты внутри туннеля останутся согласованными и не будут нуждаться в фрагментации, поскольку PMTUD определит MTU между одноранговыми узлами (в этом примере это будет 1420 байт) и отправит фиксированный размер пакета между одноранговыми узлами.

Расширяемость

WireGuard разработан для расширения сторонними программами и скриптами. Это было использовано для дополнения WireGuard различными функциями, включая более удобные интерфейсы управления (включая более простую настройку ключей), ведение журнала, динамические обновления брандмауэра, динамическое назначение IP-адресов [15] и интеграцию LDAP . [ необходима цитата ]

Исключение таких сложных функций из минимальной базовой кодовой базы повышает ее стабильность и безопасность. Для обеспечения безопасности WireGuard ограничивает возможности реализации криптографических элементов управления, ограничивает выбор процессов обмена ключами и сопоставляет алгоритмы [8] с небольшим подмножеством современных криптографических примитивов . Если в каком-либо из примитивов обнаружен недостаток, может быть выпущена новая версия, которая решает проблему.

Прием

Обзор Ars Technica показал, что WireGuard прост в настройке и использовании, использует надежные шифры и имеет минимальную кодовую базу, что обеспечивает небольшую поверхность атаки. [16]

WireGuard получил финансирование от Open Technology Fund [17] и пожертвования от Jump Trading , Mullvad , Tailscale , Fly.io и NLnet Foundation . [18]

Сенатор Орегона Рон Уайден рекомендовал Национальному институту стандартов и технологий (NIST) оценить WireGuard в качестве замены существующим технологиям. [19]

Доступность

Реализации

Реализации протокола WireGuard включают в себя:

  • Первоначальная реализация Доненфельда, написанная на C и Go. [20]
  • BoringTun от Cloudflare — реализация пользовательского пространства , написанная на Rust . [21] [22]
  • Реализация Мэтта Данвуди для OpenBSD, написанная на языке C. [23]
  • Реализация wg(4) для NetBSD, написанная на языке C. [24]
  • Реализация FreeBSD написана на языке C и разделяет большую часть пути данных с реализацией OpenBSD. [25]
  • Собственная реализация ядра Windows называется «wireguard-nt» с августа 2021 года. [26]
  • Модемы-маршрутизаторы AVM Fritz!Box, поддерживающие Fritz!OS версии 7.39 и выше. Разрешает соединения WireGuard site-to-site с версии 7.50 и выше. [27]
  • Реализация пользовательского пространства векторной пакетной обработки, написанная на языке C.

История

Ранние снимки кодовой базы существуют с 30 июня 2016 года. [28] Логотип вдохновлен каменной гравюрой мифологического Питона , которую Джейсон Доненфельд увидел во время посещения музея в Дельфах . [29]

9 декабря 2019 года Дэвид Миллер — основной ответственный за поддержку сетевого стека Linux — принял исправления WireGuard в дерево поддержки «net-next» для включения в будущее ядро. [30] [31] [32]

28 января 2020 года Линус Торвальдс объединил дерево net-next Дэвида Миллера, и WireGuard вошел в основное дерево ядра Linux. [33]

20 марта 2020 года разработчики Debian включили параметры сборки модуля для WireGuard в своей конфигурации ядра для версии Debian 11 (тестирование). [34]

29 марта 2020 года WireGuard был включен в состав Linux 5.6. Версия программного обеспечения для Windows остается на стадии бета-тестирования. [4]

30 марта 2020 года разработчики Android добавили собственную поддержку ядра WireGuard в свой образ Generic Kernel. [35]

22 апреля 2020 года разработчик NetworkManager Беньямино Гальвани объединил поддержку графического интерфейса для WireGuard в GNOME . [36]

12 мая 2020 года Мэтт Данвуди предложил исправления для собственной поддержки ядра WireGuard в OpenBSD . [37]

22 июня 2020 года, после работы Мэтта Данвуди и Джейсона А. Доненфельда, поддержка WireGuard была импортирована в OpenBSD. [38]

23 ноября 2020 года Джейсон А. Доненфельд выпустил обновление пакета Windows , улучшающее установку, стабильность, поддержку ARM и корпоративные функции. [39]

29 ноября 2020 года поддержка WireGuard была импортирована в ядро ​​FreeBSD 13. [25]

19 января 2021 года поддержка WireGuard была добавлена ​​для предварительного просмотра в моментальные снимки разработки pfSense Community Edition (CE) 2.5.0. [40]

В марте 2021 года поддержка WireGuard в режиме ядра была удалена из FreeBSD 13.0, все еще находящейся в стадии тестирования, после того, как срочная очистка кода в FreeBSD WireGuard не могла быть завершена быстро. [41] В pfSense Community Edition (CE) 2.5.0 и pfSense Plus 21.02 на базе FreeBSD также удален WireGuard на базе ядра. [42]

В мае 2021 года поддержка WireGuard была вновь введена в моментальные снимки разработки pfSense CE и pfSense Plus в качестве экспериментального пакета, написанного членом сообщества pfSense Кристианом Макдональдом. Пакет WireGuard для pfSense включает в себя текущую разработку WireGuard в режиме ядра Джейсона А. Доненфельда, которая изначально спонсировалась Netgate. [43] [40] [44]

В июне 2021 года официальные репозитории пакетов для pfSense CE 2.5.2 и pfSense Plus 21.05 включили пакет WireGuard. [45]

В 2023 году WireGuard получил поддержку в размере более 200 000 евро от Немецкого государственного технологического фонда . [46]

Смотрите также

Примечания

  1. ^ Не все платформы могут иметь текущую выпущенную версию, а некоторые могут находиться в стадии бета-тестирования. [ требуется обновление? ]

Ссылки

  1. ^ Грауэр, Яэль (16 января 2021 г.). «Как попытка одного хакера защитить Интернет стала важнейшей частью операционных систем Mac, Linux и Windows». Business Insider . Получено 25 ноября 2022 г.
  2. ^ "wireguard-linux-compat" . Получено 4 ноября 2022 г. .
  3. ^ "Установка". WireGuard . Получено 23 апреля 2020 г. .
  4. ^ abc Salter, Jim (30 марта 2020 г.). «WireGuard VPN достигает версии 1.0.0 — и входит в следующее ядро ​​Linux». Архивировано из оригинала 31 марта 2020 г. Получено 23 апреля 2020 г.
  5. ^ abc "WireGuard: быстрый, современный, безопасный VPN-туннель". WireGuard. Архивировано из оригинала 28 апреля 2018 г. Получено 31 марта 2021 г.
  6. ^ Пренил, Барт; Веркаутерен, Фредерик, ред. (11 июня 2018 г.). Прикладная криптография и сетевая безопасность. Спрингер. ISBN 978-3-319-93387-0. Архивировано из оригинала 18 февраля 2019 . Получено 25 июня 2018 .
  7. ^ abcd Доненфельд, Джейсон А. «Известные ограничения — WireGuard». www.wireguard.com . Получено 1 июня 2020 г. .
  8. ^ ab Donenfeld, Jason A. "Protocol & Cryptography - WireGuard". www.wireguard.com . Получено 14 мая 2023 г. .
  9. ^ Липп, Бенджамин; Бланше, Бруно; Бхаргаван, Картикеян (2019), Механизированное криптографическое доказательство протокола виртуальной частной сети WireGuard (отчет), Исследовательский отчет RR-9269, Париж: Inria, стр. 49, hal-02100345
  10. ^ Доненфельд, Джейсон (2 мая 2021 г.). «WireGuard: туннель ядра сети следующего поколения» (PDF) . Wireguard.com .
  11. ^ Тиц, Олаф (23 апреля 2001 г.). «Почему TCP поверх TCP — плохая идея» . Получено 17 октября 2015 г.
  12. ^ Хонда, Осаму; Охсаки, Хироюки; Имасе, Макото; Ишизука, Мика; Мураяма, Дзюнъити (октябрь 2005 г.). «Понимание TCP через TCP: влияние туннелирования TCP на сквозную пропускную способность и задержку». В Atiquzzaman, Mohammed; Баландин, Сергей I (ред.). Производительность, качество обслуживания и управление сетями связи и датчиков следующего поколения III . Том 6011. Bibcode : 2005SPIE.6011..138H. CiteSeerX 10.1.1.78.5815 . doi : 10.1117/12.630496. S2CID  8945952. 
  13. ^ Доненфельд, Джейсон А. «Введение и мотивация» (PDF) . WireGuard: Next Generation Kernel Network Tunnel (PDF) . Архивировано (PDF) из оригинала 4 марта 2018 г.
  14. ^ ab Donenfeld, Jason A. (11 декабря 2017 г.). "[WireGuard] Размеры заголовка / MTU для Wireguard" . Получено 13 января 2024 г. .
  15. ^ Wireguard Dynamic IP Configuration Tool, WireGuard, 14 мая 2023 г. , получено 14 мая 2023 г.
  16. ^ Salter, Jim (26 августа 2018 г.). «Обзор WireGuard VPN: новый тип VPN предлагает серьезные преимущества». Ars Technica . Архивировано из оригинала 20 сентября 2018 г.
  17. ^ «Создание более безопасного, доступного и отказоустойчивого протокола WireGuard VPN». www.opentech.fund . Получено 20 июня 2022 г. .
  18. ^ "Пожертвования". WireGuard. Архивировано из оригинала 28 апреля 2018 года . Получено 28 апреля 2018 года .
  19. ^ "US Senator Recommends Open-Source WireGuard To NIST For Government VPN". Phoronix . 30 июня 2018 г. Архивировано из оригинала 5 августа 2018 г. Получено 5 августа 2018 г.
  20. ^ Доненфельд, Джейсон (7 июня 2019 г.). «WireGuard: быстрый, современный, безопасный VPN-туннель» . Получено 16 июня 2019 г.
  21. ^ Краснов, Влад (18 декабря 2018 г.). "BoringTun, реализация WireGuard в пользовательском пространстве на Rust". Cloudflare Blog . Архивировано из оригинала 4 апреля 2019 г. Получено 29 марта 2019 г.
  22. ^ "CloudFlare запускает "BoringTun" как реализацию пользовательского пространства WireGuard, написанную на Rust". phoronix.com . Получено 29 марта 2019 г. .
  23. ^ Йоханссон, Янне (21 июня 2020 г.). «WireGuard импортирован в OpenBSD».
  24. ^ "wg(4) - Страницы руководства NetBSD". 20 августа 2020 г.
  25. ^ ab "Импорт поддержки ядра WireGuard".
  26. ^ «WireGuardNT, высокопроизводительная реализация WireGuard для ядра Windows». 2 августа 2021 г.
  27. ^ «WireGuard: VPN никогда не был таким простым».
  28. ^ "Индекс /Монолитно-исторического/".
  29. ^ «Как усилия одного хакера по защите Интернета стали важнейшей частью операционных систем Mac, Linux и Windows». Business Insider . 16 января 2021 г. Архивировано из оригинала 16 января 2021 г.
  30. ^ "e7096c131e5161fa3b8e52a650d7719d2857adfd - pub/scm/linux/kernel/git/davem/net-next - Git в Google". kernel.googlesource.com .
  31. ^ "LKML: Дэвид Миллер: Re: [PATCH net-next v2] net: защищенный сетевой туннель WireGuard". lkml.org .
  32. ^ "[АНОНС] WireGuard объединился с net-next, на пути к Linux 5.6". 9 января 2020 г. Архивировано из оригинала 9 января 2020 г.
  33. ^ Торвальдс, Линус. "index : kernel/git/torvalds/linux.git". Исходное дерево ядра Linux . Kernel.org . Получено 2 февраля 2020 г. .
  34. ^ "drivers/net: Включить WIREGUARD как модуль". 21 марта 2020 г.
  35. ^ "ANDROID: GKI: включить CONFIG_WIREGUARD".
  36. ^ "merge branch 'bg/wireguard' (d321d0df) · Коммиты · GNOME / network-manager-applet". gitlab.gnome.org . 22 апреля 2020 г. . Получено 30 мая 2020 г. .
  37. ^ «Опубликованы исправления ядра WireGuard для OpenBSD». 12 мая 2020 г.
  38. ^ "добавить wg(4), драйвер ядра для связи WireGuard VPN".
  39. ^ "[АНОНС] WireGuard для Windows 0.3: поддержка ARM, корпоративные функции и многое другое". 23 ноября 2020 г.
  40. ^ ab Paxson, Audian (19 января 2021 г.). «WireGuard для программного обеспечения pfSense». Netgate . Получено 9 июня 2021 г.
  41. ^ Андерсон, Тим (23 марта 2021 г.). «FreeBSD 13.0 будет поставляться без поддержки WireGuard, поскольку разработчики вмешиваются, чтобы исправить «серьёзные проблемы» с первоначальной реализацией». The Register . Situation Publishing . Получено 31 марта 2021 г. .
  42. ^ Томпсон, Джим (18 марта 2021 г.). «WireGuard удален из программного обеспечения pfSense® CE и pfSense® Plus». Блог Netgate . Rubicon Communications . Получено 20 марта 2021 г.
  43. ^ Лонг, Скотт (5 мая 2021 г.). "pfSense: WireGuard возвращается как экспериментальный пакет". Netgate - Безопасные сети начинаются здесь . Получено 9 июня 2021 г.
  44. ^ "wireguard-freebsd - реализация WireGuard для ядра FreeBSD". git.zx2c4.com . Получено 9 июня 2021 г. .
  45. ^ Pingle, Jim (2 июня 2021 г.). "pfSense Plus 21.05-RELEASE Now Available". Netgate - Secure networks start here . Получено 9 июня 2021 г.
  46. ^ "WireGuard". Sovereign Tech Fund . Получено 26 мая 2024 г.
Взято с "https://en.wikipedia.org/w/index.php?title=WireGuard&oldid=1272164250"