- PVSM.RU - https://www.pvsm.ru -
В конце июля разработчики VPN-туннеля WireGuard предложили набор патчей [1], которые сделают их ПО для организации VPN-туннелей частью ядра Linux. Однако точная дата реализации «задумки» пока остается неизвестной. Под катом поговорим об этом инструменте подробнее.
[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 самостоятельно решает все остальные задачи: нет необходимости беспокоиться маршрутизации, контроле состояния и др. Дополнительные усилия на настройку понадобится приложить только в том случае, если хочется задействовать симметричное шифрование.
/ фото 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
Нажмите здесь для печати.