ProHoster > WireGuard "прийде" в ядро Linux - чому?
WireGuard "прийде" в ядро Linux - чому?
Наприкінці липня розробники VPN-тунелю WireGuard запропонували набір патчів, які зроблять їх програмне забезпечення для організації VPN-тунелів частиною ядра Linux. Проте точна дата реалізації «задумки» поки що залишається невідомою. Під катом поговоримо про цей інструмент докладніше.
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-пристроїв. Додаток поки що недоопрацьований, проте спробувати його у справі можна вже зараз. Для цього потрібно стати одним із тестерів.
В офіційної документації (Стор.18) зазначено, що пропускна спроможність у WireGuard вчетверо вище, ніж у OpenVPN: 1011 Мбіт/с проти 258 Мбіт/с відповідно. WireGuard випереджає і стандартне рішення для Linux IPsec у того 881 Мбіт/с. Перевершує він його і за простотою налаштування.
Після обміну ключами (VPN-підключення ініціалізується майже як у SSH) і встановлення з'єднання WireGuard самостійно вирішує всі інші завдання: немає необхідності турбуватися маршрутизації, контролю стану та ін.
Як відзначають редактори xakep.ru, самостійне складання з вихідних текстів також нескладне. Достатньо підняти інтерфейс і згенерувати відкритий та закритий ключі:
$ sudo ip link add dev wg0 type wireguard
$ wg genkey | tee privatekey | wg pubkey > publickey
WireGuard не використовує інтерфейс для роботи з криптопровайдером CryptoAPI. Замість нього використовується потоковий шифр. ChaCha20, криптографічна імітівставка Poly1305 та власні криптографічні хеш-функції.
При цьому WireGuard задіює функцію ioctl для контролю введення/виводу (раніше використовувався netlink), що робить код чистіше та простіше. Переконатися в цьому можна, зазирнувши у код конфігурації.
Плани розробників
Поки що 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 Ще кілька статей з нашого корпоративного блогу: