У ядро ​​Linux 5.6 уключылі VPN WireGuard

Сёння Лінус перанёс да сябе галінку net-next з VPN-інтэрфейсамі. WireGuard. Пра гэтую падзею паведамілі у спісе рассылання WireGuard.

У ядро ​​Linux 5.6 уключылі VPN WireGuard

У дадзены момант працягваецца збор кода для новага ядра Linux 5.6. WireGuard – хуткі VPN новага пакалення, у якім рэалізавана сучасная крыптаграфія. Ён першапачаткова распрацоўваўся як прасцейшая і зручная альтэрнатыва існуючым VPN. Аўтар - канадскі спецыяліст па інфармацыйнай бяспецы Джэйсан Даненфілд (Jason A. Donenfeld). У жніўні 2018 года WireGuard ганараваўся пахвалы ад Лінуса Торвальдса. Прыкладна ў той час пачалася праца па ўключэнні VPN у ядро ​​Linux. Працэс крыху зацягнуўся.

«Бачу, што Джэйсан зрабіў пул-рэквест для ўключэння WireGuard у ядро, - пісаў Лінус 2 жніўня 2018 года. - Магу я проста яшчэ раз заявіць аб сваім каханні да гэтага VPN і спадзявацца на хуткае зліццё? Можа, код і не ідэальны, але я прагледзеў яго, і ў параўнанні з жахамі OpenVPN і IPSec, гэты сапраўдны твор мастацтва».

Нягледзячы на ​​пажаданне Лінуса, зліццё зацягнулася на паўтара гады. Асноўная праблема апынулася ў прывязцы да ўласных рэалізацый крыптаграфічных функцый, якія прымяняліся для павышэння прадукцыйнасці. Пасля працяглых перамоваў у верасні 2019 года было прынята кампраміснае рашэнне перавесці патчы на ​​наяўныя ў ядры функцыі Crypto API, да якіх у распрацоўнікаў WireGuard ёсць прэтэнзіі ў вобласці прадукцыйнасці і агульнай бяспекі. Але вырашылі натыўныя крыптафункцыі WireGuard вылучыць у асобны нізкаўзроўневыя Zinc API і з часам партаваць іх у ядро. У лістападзе распрацоўшчыкі ядра стрымалі абяцанне і пагадзіліся перанесці ў асноўнае ядро ​​частка кода з Zinc. Напрыклад, у Crypto API ўключаны падрыхтаваныя ў WireGuard хуткія рэалізацыі алгарытмаў ChaCha20 і Poly1305.

У рэшце рэшт, 9 снежня 2019 года Дэвід Мілер (David S. Miller), які адказвае за сеткавую падсістэму ядра Linux, прыняў у склад галінкі net-next патчы з рэалізацыяй VPN-інтэрфейсу ад праекта WireGuard.

А сёння 29 студзеня 2020 года змены сышлі да Лінуса для ўключэння ў ядро.

У ядро ​​Linux 5.6 уключылі VPN WireGuard

Заяўленыя перавагі WireGuard над іншымі VPN рашэннямі:

  • Просты ў выкарыстанні.
  • Выкарыстоўвае сучасную крыптаграфію: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF і г.д.
  • Кампактны чытэльны код, прасцей даследаваць на ўразлівасці.
  • Высокая прадукцыйнасць.
  • Выразная і прапрацаваная спецыфікацыя.

Уся асноўная логіка WireGuard займае менш за 4000 радкоў кода, тады як OpenVPN і IPSec гэта сотні тысяч радкоў.

«У WireGuard прымяняецца канцэпцыя маршрутызацыі па ключах шыфравання, якая мае на ўвазе прывязку да кожнага сеткавага інтэрфейсу закрытага ключа і прымяненне для звязвання адкрытых ключоў. Абмен адчыненымі ключамі для ўсталёўкі злучэння вырабляецца па аналогіі з SSH. Для ўзгаднення ключоў і злучэнні без запуску асобнага дэмана ў прасторы карыстача ўжываецца механізм Noise_IK з Noise Protocol Framework, падобны на падтрыманне authorized_keys у SSH. Перадача даных ажыццяўляецца праз інкапсуляцыю ў пакеты UDP. Падтрымліваецца змена IP-адрасы VPN-сервера (роўмінг) без разрыву злучэння з аўтаматычнай пераналадкай кліента, піша Opennet.

Для шыфравання выкарыстоўваецца струменевы шыфр ChaCha20 і алгарытм аўтэнтыфікацыі паведамленняў (MAC) Poly1305, распрацаваныя Дэніэлам Бернштэйнам (Даніэль Дж. Бернштэйн), Таняй Ланге (Tanja Lange) і Пітэрам Швабэ (Peter Schwabe). ChaCha20 і Poly1305 пазіцыянуюцца як больш хуткія і бяспечныя аналагі AES-256-CTR і HMAC, праграмная рэалізацыя якіх дазваляе дабіцца фіксаванага часу выканання без задзейнічання спецыяльнай апаратнай падтрымкі. Для генерацыі сумеснага сакрэтнага ключа прымяняецца пратакол Дыфі-Хеллмана на эліптычных крывых у рэалізацыі Curve25519, таксама прапанаванай Дэніэлам Бернштэйнам. Для хэшавання выкарыстоўваюцца алгарытм BLAKE2s (RFC7693).

Вынікі тэстаў прадукцыйнасці з афіцыйнага сайта:

Прапускная здольнасць (мегабіт/з)
У ядро ​​Linux 5.6 уключылі VPN WireGuard

Пінг (мс)
У ядро ​​Linux 5.6 уключылі VPN WireGuard

Тэставая канфігурацыя:

  • Intel Core i7-3820QM і Intel Core i7-5200U
  • Гігабітныя карты Intel 82579LM і Intel I218LM
  • Linux 4.6.1
  • Канфігурацыя WireGuard: 256-бітны ChaCha20 з Poly1305 для MAC
  • Першая канфігурацыя IPsec: 256-бітны ChaCha20 з Poly1305 для MAC
  • Другая канфігурацыя IPsec: AES-256-GCM-128 (з AES-NI)
  • Канфігурацыя OpenVPN: эквівалентны шыфрабор 256-бітнага AES з HMAC-SHA2-256, рэжым UDP
  • Прадукцыйнасць замяралася з дапамогай iperf3, паказаны сярэдні вынік за 30 хвілін.

Тэарэтычна, пасля інтэграцыі ў сеткавы стэк WireGuard павінен працаваць яшчэ хутчэй. Але ў рэальнасці гэта не абавязкова будзе так з-за пераходу на ўбудаваныя ў ядро ​​крыптаграфічныя функцыі Crypto API. Магчыма, не ўсе з іх яшчэ аптымізаваны да ўзроўню хуткадзейнасці натыўнага WireGuard.

«З майго пункту гледжання, WireGuard увогуле ідэальны для карыстальніка. Усе нізкаўзроўневыя рашэнні прыняты ў спецыфікацыі, таму працэс падрыхтоўкі тыповай VPN інфраструктуры займае ўсяго некалькі хвілін. Наблытаць у канфігурацыі практычна немагчыма, - распавядаў на Хабры ў 2018 годзе. - Працэс усталёўкі дэталёва апісаны на афіцыйным сайце, асобна хочацца адзначыць выдатную падтрымку OpenWRT. Такі прастаты выкарыстання і кампактнасці кодавай базы ўдалося дасягнуць за кошт адмовы ад дыстрыбуцыі ключоў. Тут няма складанай сістэмы сертыфікатаў і ўсяго гэтага карпаратыўнага жаху, кароткія ключы шыфравання распаўсюджваюцца прыкладна як SSH-ключы».

Праект WireGuard развіваецца з 2015 года, ён прайшоў аўдыт і фармальную верыфікацыю. Падтрымка WireGuard інтэграваная ў NetworkManager і systemd, а патчы для ядра ўваходзяць у базавы склад дыстрыбутываў Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph і ALT.

Крыніца: habr.com

Дадаць каментар