WireGuard

WireGuardкоммуникационный протокол и бесплатное программное обеспечение с открытым исходным кодом, который реализует зашифрованные виртуальные частные сети (VPN). Он был разработан для простого использования технологии VPN, высокой производительности и низкой поверхности атаки[3]. WireGuard нацелен на лучшую производительность и большую мощность, чем IPsec и OpenVPN, два других распространенных протокола туннелирования[4]. Протокол WireGuard передаёт трафик по протоколу UDP[5].

WireGuard
Логотип программы WireGuard
Тип виртуальная частная сеть
Автор Джейсон А. Доненфельд
Разработчик Джейсон А. Доненфельд
Написана на C (Linux, модули ядра FreeBSD, NetBSD, драйверы ядра OpenBSD),
Go (реализация пользовательского интерфейса)
Операционные системы Android
iOS
Linux
FreeBSD
NetBSD
OpenBSD
macOS
Windows 7+
и другие
Первый выпуск 2015[1]
Последняя версия
Репозиторий git.zx2c4.com/wireguard-…
Лицензия cвободное и открытое программное обеспечение
Сайт wireguard.com
Логотип Викисклада Медиафайлы на Викискладе

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

Протокол

править

WireGuard использует[7]:

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

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

править

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

Нетворкинг

править

WireGuard использует только UDP[7][11], из-за чего он не работает в сетях, которые блокируют UDP-трафик. Это отличает WireGuard от его альтернатив, таких как OpenVPN, из-за множества недостатков маршрутизации TCP-over-TCP[11][12].

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

WireGuard поддерживает несколько топологий:

  • Точка-точка (сеть)
  • Звезда (сервер/клиент)
    • Конечную точку клиента не нужно определять до того, как клиент начнет отправлять данные
    • Конечные точки клиента могут быть статически предопределены
  • Mesh (сеть)

Поскольку WireGuard поддерживает сеть точка-точка, можно делать и другие топологии, но не в том же туннеле.

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

править

WireGuard предназначен для расширения сторонними программами и скриптами. Расширенные функции WireGuard включают в себя: более удобные интерфейсы управления (включая более простую настройку ключей), ведение журнала, динамические обновления брандмауэра и интеграцию с LDAP.

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

Доступность

править

Реализации

править

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

  • Первоначальная реализация Доненфельда, написанная на C и Go[15].
  • BoringTun от Cloudflare — реализация пользовательского пространства, написанная на Rust[16][17].
  • Реализация Мэтта Данвуди для OpenBSD, написанная на C[18].
  • Реализация wg(4) Рёты Одзаки для NetBSD, написаная на C[19].
  • Реализация FreeBSD, написанная на C. Имеет тот же путь данных, что и реализация OpenBSD[20].
  • wireguard-nt – драйвер для Windows, созданный разработчиками Wireguard Дж. Доненфилдом (англ. Jason A. Donenfeld) и С. Розманом (англ. Simon Rozman) и анонсированный Доненфилдом 2 августа 2021 года[21].
  • OPNsense через стандартный пакет os-WireGuard[22].
  • pfSense через экспериментальный дополнительный пакет для pfSense Plus 21.05, pfSense CE 2.5.2 и более поздних версий.

Поддержка Linux

править

Программы пользовательского пространства, поддерживающие WireGuard, включают:

История

править

Ранние срезы кодовой базы существуют с 30 июня 2016 года[44]. Четырьмя первыми пользователями WireGuard были VPN-сервисы Mullvad[45], AzireVPN[46], IVPN[англ.][47] и cryptostorm[48]. WireGuard получил пожертвования от Mullvad, Private Internet Access, IVPN, NLnet Foundation[англ.][49] и OVPN[50].

По состоянию на июнь 2018 года разработчики WireGuard советуют рассматривать код и протокол как экспериментальные и предупреждают, что они еще не достигли стабильного выпуска, совместимого с отслеживанием CVE любых уязвимостей безопасности, которые могут быть обнаружены[51][52].

9 декабря 2019 года Дэвид Миллер, основной сопровождающий сетевого стека Linux, принял патчи WireGuard в дерево, сопровождающее net-next, для включения в грядущее ядро[53][54][55].

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

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

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

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

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

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

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

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

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

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

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

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

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

WireGuard стремится обеспечить простую и эффективную реализацию виртуальной частной сети. Обзор, проведенный Ars Technica в 2018 году, показал , что популярные технологии VPN, такие как OpenVPN и IPsec, часто сложны в настройке, легко отключаются (при отсутствии дальнейшей настройки), требуют значительного времени для согласования повторных подключений, могут использовать устаревшие шифры и имеют относительно большие кодовые базы более 400 000 и 600 000 строк кода соответственно, что затрудняет отладку[69]. Дизайн WireGuard направлен на уменьшение этих проблем, чтобы сделать туннель более безопасным и простым в управлении по умолчанию. Используя версии криптографических пакетов, он фокусируется на шифрах, которые считаются одними из самых безопасных текущих методов шифрования, и на момент обзора Ars Technica его кодовая база насчитывала около 4000 строк кода ядра, что составляет около 1% OpenVPN или IPsec, тем самым, упрощая аудит информационной безопасности.

WireGuard получил высокую оценку создателя ядра Linux Линуса Торвальдса, который заявил, что это «произведение искусства» в отличие от OpenVPN и IPsec[70]. VPN на базе WireGuard можно также настроить и на Ubuntu 20.04, и устанавливать его проще, чем OpenVPN. Для этого можно использовать готовый скрипт установки WireGuard и превратить VPS в VPN-сервер, после чего вы получите файл конфигурации клиента .conf.

Ars Technica сообщила, что при тестировании стабильные туннели были легко созданы с помощью WireGuard по сравнению с альтернативами, и отметила, что после использования WireGuard будет «трудно вернуться» к длительным задержкам повторного подключения по сравнению с мгновенным повторным подключением WireGuard[69].

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

Примечания

править
  1. https://www.businessinsider.com/wireguard-jason-a-donenfeld-profile-secure-vpn-linux-mac-windows-2021-1
  2. wireguard-linux-compat
  3. 1 2 Jason A. Donenfeld. WireGuard: fast, modern, secure VPN tunnel (англ.). www.wireguard.com. Дата обращения: 4 июня 2022. Архивировано 28 апреля 2018 года.
  4. Bart Preneel, Frederik Vercauteren. Applied Cryptography and Network Security: 16th International Conference, ACNS 2018, Leuven, Belgium, July 2-4, 2018, Proceedings. — Springer, 2018-06-11. — 715 с. — ISBN 978-3-319-93387-0. Архивировано 13 декабря 2023 года.
  5. Jason A. Donenfeld. Known Limitations - WireGuard (англ.). www.wireguard.com. Дата обращения: 4 июня 2022. Архивировано 31 мая 2022 года.
  6. 1 2 Jim Salter. WireGuard VPN makes it to 1.0.0—and into the next Linux kernel (амер. англ.). Ars Technica (30 марта 2020). Дата обращения: 4 июня 2022. Архивировано 31 марта 2020 года.
  7. 1 2 Jason A. Donenfeld. WireGuard: fast, modern, secure VPN tunnel (англ.). WireGuard. Дата обращения: 14 июня 2022. Архивировано 28 апреля 2018 года.
  8. Jason A. Donenfeld. Known Limitations - WireGuard (англ.). WireGuard. Дата обращения: 14 июня 2022. Архивировано 31 мая 2022 года.
  9. Benjamin Lipp, Bruno Blanchet, Karthikeyan Bhargavan. A Mechanised Cryptographic Proof of the WireGuard Virtual Private Network Protocol (англ.). — Inria Paris, 2019-04. Архивировано 29 апреля 2020 года.
  10. Jason Donenfeld. WireGuard: Next Generation Kernel Network Tunnel. wireguard.com (2 мая 2021). Дата обращения: 14 июня 2022. Архивировано 4 марта 2018 года.
  11. 1 2 Jason A. Donenfeld. Known Limitations - WireGuard (англ.). www.wireguard.com. Дата обращения: 14 июня 2022. Архивировано 31 мая 2022 года.
  12. Why TCP Over TCP Is A Bad Idea. sites.inka.de. Дата обращения: 14 июня 2022. Архивировано 6 марта 2015 года.
  13. Jason A. Donenfeld. WireGuard: Next Generation Kernel Network Tunnel. wireguard.com (4 марта 2018). Архивировано 4 марта 2018 года.
  14. Wireguard VPN Protocol - Privacy HQ. privacyhq.com. Дата обращения: 14 июня 2022. Архивировано 25 мая 2022 года.
  15. Jason A. Donenfeld. WireGuard: fast, modern, secure VPN tunnel (англ.). www.wireguard.com. Дата обращения: 14 июня 2022. Архивировано 28 апреля 2018 года.
  16. BoringTun, a userspace WireGuard implementation in Rust (англ.). The Cloudflare Blog (27 марта 2019). Дата обращения: 14 июня 2022. Архивировано 27 марта 2019 года.
  17. CloudFlare Launches "BoringTun" As Rust-Written WireGuard User-Space Implementation (англ.). www.phoronix.com. Дата обращения: 14 июня 2022. Архивировано 21 сентября 2009 года.
  18. WireGuard imported into OpenBSD. undeadly.org. Дата обращения: 14 июня 2022. Архивировано 29 мая 2022 года.
  19. wg(4) - NetBSD Manual Pages. man.netbsd.org. Дата обращения: 14 июня 2022. Архивировано 28 октября 2021 года.
  20. 1 2 Import kernel WireGuard support. svnweb.freebsd.org. Дата обращения: 14 июня 2022. Архивировано 30 апреля 2022 года.
  21. Jason A. Donenfeld. WireGuardNT, a high-performance WireGuard implementation for the Windows kernel (Mon Aug 2 17:27:37 UTC 2021). Дата обращения: 14 июня 2022. Архивировано 23 апреля 2022 года.
  22. Search — OPNsense documentation. docs.opnsense.org. Дата обращения: 14 июня 2022. Архивировано 28 апреля 2021 года.
  23. WireGuard in NetworkManager – Thomas Haller's Blog (амер. англ.). Дата обращения: 14 июня 2022. Архивировано 16 марта 2019 года.
  24. Lennart Poettering. systemd v237 (Sun Jan 28 16:08:51 UTC 2018). Дата обращения: 14 июня 2022. Архивировано 19 января 2021 года.
  25. Intel ConnMan 1.38 Released With WireGuard Support (англ.). www.phoronix.com. Дата обращения: 14 июня 2022. Архивировано 21 сентября 2009 года.
  26. Mozilla VPN: Защитите всё своё устройство. Mozilla. Дата обращения: 14 июня 2022. Архивировано 15 июня 2022 года.
  27. Augustas Radziukas. Development Update 07.02–07.16 (англ.). Medium (22 января 2021). Дата обращения: 14 июня 2022. Архивировано 2 ноября 2021 года.
  28. What is NordLynx? | NordVPN support. support.nordvpn.com. Дата обращения: 14 июня 2022.
  29. Why we chose WireGuard® for Veeam PN v2 (англ.). Veeam Software Official Blog (15 мая 2019). Дата обращения: 14 июня 2022. Архивировано 17 мая 2022 года.
  30. pivpn/pivpn (англ.). GitHub. Дата обращения: 14 июня 2022. Архивировано 14 июня 2022 года.
  31. What is WireGuard VPN Protocol And How to Use It With VPN Unlimited. www.vpnunlimited.com. Дата обращения: 14 июня 2022. Архивировано 25 мая 2022 года.
  32. WireGuard® on PIA is out of beta and available to use on Windows, Mac, Linux, Android, and iOS (амер. англ.). PIA VPN Blog (10 апреля 2020). Дата обращения: 14 июня 2022.
  33. GitHub - eventure/hide.client.linux: Hide.me CLI VPN client for Linux (англ.). GitHub. Дата обращения: 14 июня 2022. Архивировано 15 сентября 2022 года.
  34. Fast and clutter-free WireGuard protocol is now live on Surfshark (амер. англ.). Surfshark (19 октября 2020). Дата обращения: 14 июня 2022. Архивировано 15 июня 2022 года.
  35. Ferdinand Thommes. Single Source Protection » Linux Magazine (амер. англ.). Linux Magazine. Дата обращения: 14 июня 2022. Архивировано 21 мая 2022 года.
  36. Announcing the Unbreakable Enterprise Kernel Release 6 Update 1 for Oracle Linux. Oracle Linux Blog (12 ноября 2020). Дата обращения: 14 июня 2022. Архивировано 19 апреля 2021 года.
  37. What is WireGuard? (англ.). OVPN.com. Дата обращения: 14 июня 2022. Архивировано 14 июня 2022 года.
  38. oVPN New Updates - WireGuard + OpenVPN 2.5 Coming soon! YouTube. Дата обращения: 14 июня 2022. Архивировано 14 июня 2022 года.
  39. Wireguard VPN | TorGuard. torguard.net. Дата обращения: 14 июня 2022. Архивировано 12 июня 2022 года.
  40. VyprVPN WireGuard VPN Protocol is here to protect you! (амер. англ.). www.androidpimp.com (14 мая 2020). Дата обращения: 14 июня 2022. Архивировано 18 мая 2022 года.
  41. Introducing WireGuard (англ.). Windscribbles (16 июля 2020). Дата обращения: 14 июня 2022.
  42. Trust.Zone Starts Supporting WireGuard Protocol - Trust.Zone. trust.zone. Дата обращения: 14 июня 2022. Архивировано 19 мая 2022 года.
  43. ProtonVPN Adopts WireGuard Protocol (англ.). PCMAG. Дата обращения: 14 июня 2022. Архивировано 15 июня 2022 года.
  44. Index of /monolithic-historical/. download.wireguard.com. Дата обращения: 14 июня 2022. Архивировано 31 января 2020 года.
  45. Rob Mardisalu. Mullvad Review. thebestvpn.com (28 мая 2019). Архивировано 24 июня 2019 года.
  46. John Mason. AzireVPN Review. thebestvpn.com. Архивировано 8 мая 2019 года.
  47. Introducing WireGuard, fully automated. (амер. англ.). www.ivpn.net (11 декабря 2018). Дата обращения: 14 июня 2022. Архивировано 12 июня 2022 года.
  48. WireGuard support added! | cryptostorm blog. cryptostorm.is. Дата обращения: 14 июня 2022. Архивировано 9 декабря 2019 года.
  49. Jason A. Donenfeld. Donations - WireGuard (англ.). wireguard.com. Дата обращения: 14 июня 2022. Архивировано 28 апреля 2018 года.
  50. OVPN donates to support WireGuard® (англ.). OVPN.com. Дата обращения: 14 июня 2022. Архивировано 14 июня 2022 года.
  51. Jason A. Donenfeld. WireGuard: fast, modern, secure VPN tunnel (англ.). www.wireguard.com. Дата обращения: 14 июня 2022. Архивировано 25 июня 2018 года.
  52. Installation - WireGuard. web.archive.org. Дата обращения: 14 июня 2022. Архивировано 26 июня 2018 года.
  53. e7096c131e5161fa3b8e52a650d7719d2857adfd - pub/scm/linux/kernel/git/davem/net-next - Git at Google. kernel.googlesource.com. Дата обращения: 14 июня 2022. Архивировано 16 мая 2020 года.
  54. LKML: David Miller: Re: PATCH net-next v2 net: WireGuard secure network tunnel. lkml.org. Дата обращения: 14 июня 2022. Архивировано 9 декабря 2019 года.
  55. ANNOUNCE WireGuard merged to net-next, on its way to Linux 5.6. web.archive.org. Дата обращения: 14 июня 2022. Архивировано 9 января 2020 года.
  56. Linus Torvalds. index : kernel/git/torvalds/linux.git. Linux kernel source tree. Дата обращения: 14 июня 2022. Архивировано 16 мая 2020 года.
  57. drivers/net: Enable WIREGUARD as module (9d60411c) · Commits · Debian kernel team / linux · GitLab (англ.). GitLab. Дата обращения: 14 июня 2022. Архивировано 21 марта 2020 года.
  58. Diff - 99761f1eac33d14a4b1613ae4b7076f41cb2df94^! - kernel/common - Git at Google. android.googlesource.com. Дата обращения: 14 июня 2022. Архивировано 29 июня 2022 года.
  59. editor: merge branch 'bg/wireguard' (d321d0df) · Commits · GNOME / network-manager-applet (англ.). GitLab. Дата обращения: 14 июня 2022. Архивировано 14 июня 2022 года.
  60. Jason A. Donenfeld. WireGuard for OpenBSD Kernel Patches Posted (Tue May 12 08:32:46 CEST 2020). Дата обращения: 14 июня 2022. Архивировано 15 сентября 2022 года.
  61. 'CVS: cvs.openbsd.org: src' - MARC. marc.info. Дата обращения: 14 июня 2022. Архивировано 22 июня 2020 года.
  62. Jason A. Donenfeld. ANNOUNCE WireGuard for Windows 0.3: ARM support, enterprise features, & more (Mon Nov 23 15:24:57 CET 2020). Дата обращения: 14 июня 2022. Архивировано 10 апреля 2021 года.
  63. 1 2 WireGuard for pfSense Software (амер. англ.). www.netgate.com. Дата обращения: 14 июня 2022. Архивировано 24 мая 2022 года.
  64. Tim Anderson. FreeBSD 13.0 to ship without WireGuard support as dev steps in to fix 'grave issues' with initial implementation (англ.). www.theregister.com. Дата обращения: 14 июня 2022. Архивировано 14 июня 2022 года.
  65. WireGuard Removed from pfSense® CE and pfSense® Plus Software (амер. англ.). www.netgate.com. Дата обращения: 14 июня 2022. Архивировано 14 июня 2022 года.
  66. pfSense: WireGuard returns as an Experimental Package (амер. англ.). www.netgate.com. Дата обращения: 14 июня 2022. Архивировано 14 июня 2022 года.
  67. wireguard-freebsd - WireGuard implementation for the FreeBSD kernel. git.zx2c4.com. Дата обращения: 14 июня 2022. Архивировано 24 октября 2022 года.
  68. pfSense Plus 21.05-RELEASE Now Available (амер. англ.). www.netgate.com. Дата обращения: 14 июня 2022. Архивировано 14 июня 2022 года.
  69. 1 2 Jim Salter. WireGuard VPN review: A new type of VPN offers serious advantages (амер. англ.). Ars Technica (26 августа 2018). Дата обращения: 14 июня 2022. Архивировано 14 июня 2022 года.
  70. VPNs will change forever with the arrival of WireGuard into Linux (англ.). ZDNet. Дата обращения: 14 июня 2022. Архивировано 8 июля 2022 года.
  71. US Senator Recommends Open-Source WireGuard To NIST For Government VPN (англ.). www.phoronix.com. Дата обращения: 14 июня 2022. Архивировано 5 августа 2018 года.