Оригинальный автор(ы) | Джейсон А. Доненфельд |
---|---|
Разработчик(и) | Джейсон А. Доненфельд |
Первоначальный выпуск | 2015 ( 2015 ) | [1]
Стабильный релиз | 1.0.20220627 [2] / 27 июня 2022 г. ( 27 июня 2022 ) |
Репозиторий |
|
Написано в | 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]
Накладные расходы WireGuard распределяются следующим образом: [14]
Предполагая, что базовая сеть, транспортирующая пакеты 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 включают в себя:
Ранние снимки кодовой базы существуют с 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]