WireGuard «прыйдзе» ў ядро ​​Linux – чаму?

У канцы ліпеня распрацоўшчыкі VPN-тунэля WireGuard прапанавалі набор патчаў, якія зробяць іх ПА для арганізацыі VPN-тунэляў часткай ядра Linux. Аднак дакладная дата рэалізацыі "задумкі" пакуль застаецца невядомай. Пад катом пагаворым аб гэтай прыладзе падрабязней.

WireGuard «прыйдзе» ў ядро ​​Linux – чаму?
/ фота Tambako The Jaguar CC

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

WireGuard – VPN-тунэль новага пакалення, створаны Джэйсанам Даненфельдам (Jason A. Donenfeld), кіраўніком кампаніі Edge Security. Праект распрацоўваўся як спрошчаная і шустрая альтэрнатыва OpenVPN і IPsec. Першая версія прадукта ўтрымоўвала ўсяго 4 тыс. радкоў кода. Для параўнання, у OpenVPN каля 120 тыс. радкоў, а ў IPSec – 420 тыс. радкоў.

Па слоў распрацоўнікаў, WireGuard нескладана наладзіць, а бяспека пратаколу дасягаецца за кошт правераных крыптаграфічных алгарытмаў. Пры змене сеткі: Wi-Fi, LTE або Ethernet трэба кожны раз перападключацца да VPN-сервера. Серверы WireGuard ж не раздзіраюць злучэнне, нават калі карыстач атрымаў новы IP-адрас.

Нягледзячы на ​​тое што WireGuard першапачаткова заменчаны пад Linux-ядро, распрацоўнікі паклапаціліся і аб партатыўнай версіі інструмента для Android-прылад. Прыкладанне пакуль недапрацавана, аднак паспрабаваць яго ў справе можна ўжо зараз. Для гэтага трэба стаць адным з тэстараў.

У цэлым WireGuard карыстаецца даволі вялікай папулярнасцю і нават быў рэалізаваны некалькімі VPN-правайдэрамі, напрыклад Mullvad і AzireVPNВ. У сетцы апублікавана вялікая колькасць кіраўніцтваў па наладзе гэтага рашэння. Напрыклад, ёсць гайды, якія ствараюць карыстальнікі, а ёсць гайды, падрыхтаваныя аўтарамі праекта.

Тэхнічныя падрабязнасці

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

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

WireGuard «прыйдзе» ў ядро ​​Linux – чаму?
/ фота Anders Hojbjerg CC

Для ўсталёўкі спатрэбіцца дыстрыбутыў з ядром 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 не выкарыстоўвае інтэрфейс для працы з крыптаправайдэрам CryptoAPI. Замест яго выкарыстоўваецца струменевы шыфр. ChaCha20, крыптаграфічная імітаўстаўка Poly1305 і ўласныя крыптаграфічныя хэш-функцыі.

Сакрэтны ключ генеруецца з ужываннем пратакола Дыфі — Хелмана на базе эліптычнай крывой Curve25519. Пры хэшаванні задзейнічаюцца хэш-функцыі ПЛІНКА2 и SipHash. За кошт фармату пазнак часу TAI64N пратакол адкідае пакеты з меншым значэннем timestamp, тым самым прадухіляючы DoS- и replay-напады.

Пры гэтым WireGuard задзейнічае функцыю ioctl для кантролю ўводу/высновы (раней выкарыстоўваўся сеткавая спасылка), што робіць код чысцей і прасцей. Пераканацца ў гэтым можна, зазірнуўшы ў код канфігурацыі.

Планы распрацоўшчыкаў

Пакуль што WireGuard – гэта out-of-tree модуль ядра. Але аўтар праекта Джэйсан Даненфельд кажа, што ўжо надышоў час для паўнавартаснай рэалізацыі ў ядры Linux. Бо ён прасцей і надзейней іншых рашэнняў. Джэйсана ў гэтым плане падтрымлівае нават сам Лінус Торвальдс - ён назваў код WireGuard "творам мастацтва".

Але аб дакладных датах укаранення WireGuard у ядро ​​пакуль ніхто не кажа. І наўрад ці гэта здарыцца з выхадам жнівеньскага Linux kernel 4.18. Аднак ёсць верагоднасць, што гэта адбудзецца ў найбліжэйшай будучыні: у версіі 4.19 ці 5.0.

Калі WireGuard будзе дададзены ў ядро, распрацоўшчыкі хочуць дапрацаваць прыкладанне для Android-прылад і пачаць пісаць прыкладанне пад iOS. Акрамя таго, плануецца завяршыць рэалізацыі на Go і Rust і партаваць іх на macOS, Windows і BSD. Таксама плануецца рэалізацыя WireGuard для больш "экзатычных сістэм": ДПДК, FPGA, а таксама мноства іншых забаўных рэчаў. Усе яны пералічаны ў to-do-спісе аўтараў праекту.

PS Яшчэ некалькі артыкулаў з нашага карпаратыўнага блога:

Асноўны напрамак нашай дзейнасці - прадастаўленне хмарных сэрвісаў:

Віртуальная інфраструктура (IaaS) | PCI DSS хостынг | Воблака ФЗ-152 | SAP-хостынг | Віртуальная СХД | Шыфраванне дадзеных у воблаку | воблачнае сховішча

Крыніца: habr.com

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