- PVSM.RU - https://www.pvsm.ru -

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

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

WireGuard «придет» в ядро Linux — почему? - 1 [2]
/ фото Tambako The Jaguar [3] CC [4]

Кратко о проекте

WireGuard — VPN-туннель нового поколения, созданный Джейсоном Доненфельдом (Jason A. Donenfeld), главой компании Edge Security. Проект разрабатывался как упрощенная [5] и шустрая альтернатива OpenVPN и IPsec. Первая версия продукта содержала всего 4 тыс. строк кода. Для сравнения, в OpenVPN порядка 120 тыс. строк, а в IPSec — 420 тыс.

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

Несмотря на то что WireGuard изначально заточен под Linux-ядро, разработчики позаботились [5] и о портативной версии инструмента для Android-устройств. Приложение пока недоработано, однако попробовать его в деле можно уже сейчас. Для этого нужно стать одним из тестеров [9].

В целом WireGuard пользуется довольно большой популярностью и даже был реализован [10] несколькими VPN-провайдерами, например Mullvad и AzireVPNВ. В сети опубликовано большое количество [11] руководств по настройке [12] этого решения. Например, есть гайды [12], которые создают пользователи, а есть гайды, подготовленные авторами проекта [13].

Технические подробности

В официальной документации [14] (стр.18) отмечено, что пропускная способность у WireGuard в четыре раза выше, чем у OpenVPN: 1011 Мбит/с против 258 Мбит/с соответственно. WireGuard опережает и стандартное решение для Linux IPsec ― у того 881 Мбит/с. Превосходит он его и по простоте настройки.

После обмена ключами (VPN-подключение инициализируется почти как в SSH) и установления соединения WireGuard самостоятельно решает все остальные задачи: нет необходимости беспокоиться маршрутизации, контроле состояния и др. Дополнительные усилия на настройку понадобится приложить только в том случае, если хочется задействовать симметричное шифрование.

WireGuard «придет» в ядро Linux — почему? - 2
/ фото Anders Hojbjerg [15] CC [16]

Для установки понадобится дистрибутив с ядром 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 не использует [17] интерфейс для работы с криптопровайдером CryptoAPI [18]. Вместо него, используется поточный шифр ChaCha20 [19], криптографическая имитовставка [20] Poly1305 и собственные криптографические хеш-функции.

Секретный ключ генерируется с применением протокола Диффи — Хеллмана [21] на базе эллиптической кривой Curve25519 [22]. При хешировании задействуются хеш-функции [23] BLAKE2 [24] и SipHash [25]. За счет формата меток времени TAI64N [26] протокол отбрасывает пакеты с меньшим значением timestamp, тем самым предотвращая DoS- [27] и replay-атаки [28].

При этом WireGuard задействует функцию ioctl для контроля ввода/вывода (раньше использовался Netlink [29]), что делает код чище и проще. Убедиться в этом можно, заглянув в код конфигурации [30].

Планы разработчиков

Пока что WireGuard — это out-of-tree модуль ядра. Но автор проекта Джейсон Доненфельд говорит [6], что уже настало время для полноценной реализации в ядре Linux. Так как он проще и надежнее других решений. Джейсона в этом плане поддерживает [31] даже сам Линус Торвальдс — он назвал код WireGuard «произведением искусства».

Но о точных датах внедрения WireGuard в ядро пока никто не говорит. И едва ли [32] это случится с выходом августовского Linux kernel 4.18. Однако есть вероятность, что это произойдет в самом ближайшем будущем: в версии 4.19 или 5.0.

Когда WireGuard будет добавлен в ядро, разработчики хотят [33] доработать приложение для Android-устройств и начать писать приложение под iOS. Кроме того, планируется завершить реализации на Go и Rust и портировать их на macOS, Windows и BSD. Также планируется реализация WireGuard для более «экзотических систем»: DPDK [34], FPGA [35], а также множество других занятных вещей. Все они перечислены в to-do-списке [33] авторов проекта.

P.S. Ещё несколько статей из нашего корпоративного блога:

P.P.S. Другие наши материалы из блога на Хабре:

Автор: it_man

Источник [40]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/288788

Ссылки в тексте:

[1] набор патчей: https://git.kernel.org/pub/scm/linux/kernel/git/zx2c4/linux.git/commit/?h=jd/wireguard&id=f19531431a28c98c47462a81c8c203e9d88e493b

[2] Image: https://habr.com/company/it-grad/blog/419769/

[3] Tambako The Jaguar: https://www.flickr.com/photos/tambako/27912453388/

[4] CC: https://creativecommons.org/licenses/by-nd/2.0/

[5] упрощенная: https://www.xda-developers.com/wireguard-vpn-project-support-android-roms/

[6] словам: https://marc.info/?l=linux-netdev&m=153306429108040&w=2

[7] за счет проверенных криптографических алгоритмов: https://www.wireguard.com/formal-verification/

[8] При смене сети: https://techcrunch.com/2018/07/28/how-i-made-my-own-wireguard-vpn-server/

[9] стать одним из тестеров: https://play.google.com/apps/testing/com.wireguard.android

[10] реализован: https://en.wikipedia.org/wiki/WireGuard

[11] большое количество: https://news.ycombinator.com/item?id=17689188

[12] руководств по настройке: https://www.stavros.io/posts/how-to-configure-wireguard/

[13] подготовленные авторами проекта: https://www.wireguard.com/quickstart/

[14] официальной документации: https://www.wireguard.com/papers/wireguard.pdf

[15] Anders Hojbjerg: https://www.flickr.com/photos/113412901@N02/11755015714/

[16] CC: https://creativecommons.org/licenses/by/2.0/

[17] не использует: https://lwn.net/Articles/693015/

[18] CryptoAPI: https://ru.wikipedia.org/wiki/CryptoAPI

[19] ChaCha20: https://ru.wikipedia.org/wiki/Salsa20#ChaCha

[20] имитовставка: https://ru.wikipedia.org/wiki/%D0%98%D0%BC%D0%B8%D1%82%D0%BE%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0

[21] протокола Диффи — Хеллмана: https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_%D0%94%D0%B8%D1%84%D1%84%D0%B8_%E2%80%94_%D0%A5%D0%B5%D0%BB%D0%BB%D0%BC%D0%B0%D0%BD%D0%B0

[22] Curve25519: https://en.wikipedia.org/wiki/Curve25519

[23] хеш-функции: https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%85%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F

[24] BLAKE2: https://blake2.net/

[25] SipHash: https://131002.net/siphash/

[26] TAI64N: https://www.wireguard.com/protocol/

[27] предотвращая DoS-: https://www.wireguard.com/protocol/#dos-mitigation

[28] replay-атаки: https://ru.wikipedia.org/wiki/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B2%D0%BE%D1%81%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F

[29] Netlink: https://en.wikipedia.org/wiki/Netlink

[30] код конфигурации: https://git.zx2c4.com/WireGuard/tree/src/config.c?id=f5464cd9cbbd5e3f6229b7cdf7cc8ea0a7e59186

[31] поддерживает: http://lists.openwall.net/netdev/2018/08/02/124

[32] едва ли: https://habr.com/company/it-grad/blog/417155/

[33] хотят: https://www.wireguard.com/todo/

[34] DPDK: https://en.wikipedia.org/wiki/Data_Plane_Development_Kit

[35] FPGA: https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%BC_%D0%B2%D0%B5%D0%BD%D1%82%D0%B8%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0

[36] Облачные технологии в финансовой сфере: опыт российских компаний: https://iaas-blog.it-grad.ru/kejsy/oblachnye-texnologii-v-finansovoj-sfere-opyt-rossijskix-kompanij/

[37] Тестирование дисковой системы в облаке: https://iaas-blog.it-grad.ru/proizvoditelnost/testirovanie-diskovoj-sistemy-v-oblake/

[38] Что скрывается за термином vCloud Director – взгляд изнутри: https://iaas-blog.it-grad.ru/funkcionalnost/chto_skryvaetsa_za_terminom_vcloud_director_vzglyad_isnutri/

[39] Релиз Linux kernel 4.17: что о нем нужно знать: https://habr.com/company/it-grad/blog/413931/

[40] Источник: https://habr.com/post/419769/?utm_campaign=419769