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. ΠŸΡ€ΠΈ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ BLAKE2 ΠΈ SipHash. Π—Π° счСт Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ TAI64N ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» отбрасываСт ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с мСньшим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ timestamp, Ρ‚Π΅ΠΌ самым прСдотвращая DoS- ΠΈ replay-Π°Ρ‚Π°ΠΊΠΈ.

ΠŸΡ€ΠΈ этом 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 для Π±ΠΎΠ»Π΅Π΅ «экзотичСских систСм»: DPDK, FPGA, Π° Ρ‚Π°ΠΊΠΆΠ΅ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… занятных Π²Π΅Ρ‰Π΅ΠΉ. ВсС ΠΎΠ½ΠΈ пСрСчислСны Π² to-do-спискС Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

P.S. Π•Ρ‰Ρ‘ нСсколько статСй ΠΈΠ· нашСго ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠ³Π°:

ОсновноС Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ нашСй Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ β€” прСдоставлСниС ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… сСрвисов:

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ инфраструктура (IaaS) | PCI DSS хостинг | Облако Π€Π—-152 | SAP-хостинг | Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ Π‘Π₯Π” | Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ±Π»Π°ΠΊΠ΅ | ΠžΠ±Π»Π°Ρ‡Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com