Π’ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ FreeBSD Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° новая рСализация VPN WireGuard

Π’ Π΄Π΅Ρ€Π΅Π²ΠΎ исходных тСкстов FreeBSD приняты измСнСния с Π½ΠΎΠ²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ VPN WireGuard, основанной Π½Π° ΠΊΠΎΠ΄Π΅ модуля ядра, совмСстно ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ основными ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² FreeBSD ΠΈ WireGuard ΠΏΡ€ΠΈ участии ДТСйсона Π”ΠΎΠ½Π΅Π½Ρ„ΠΈΠ»Π΄Π° (Jason A. Donenfeld), Π°Π²Ρ‚ΠΎΡ€Π° VPN WireGuard, ΠΈ Π”ΠΆΠΎΠ½Π° Π‘ΠΎΠ»Π΄ΡƒΠΈΠ½Π° (John H. Baldwin), извСстного Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° GDB ΠΈ FreeBSD, Π² Π½Π°Ρ‡Π°Π»Π΅ 2000-Ρ… Π³ΠΎΠ΄ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π²ΡˆΠ΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ SMP ΠΈ NUMA Π² ядрС FreeBSD. ПослС принятия Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π² состав FreeBSD (sys/dev/wg), Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ сопровоТдСниС ΠΎΡ‚Π½Ρ‹Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅ΡΡ‚ΠΈΡΡŒ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ FreeBSD.

ΠŸΠ΅Ρ€Π΅Π΄ принятиСм ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ FreeBSD Foundation Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ Ρ€Π΅Ρ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π² Ρ…ΠΎΠ΄Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ взаимодСйствиС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ подсистСмами ядра ΠΈ ΠΎΡ†Π΅Π½Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ задСйствования прСдоставляСмых ядром криптографичСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ².

Для использования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ криптографичСских Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ API криптоподсистСмы ядра FreeBSD, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° обвязка, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· стандартный ΠΊΡ€ΠΈΠΏΡ‚ΠΎ-API Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π²ΠΎ FreeBSD Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ libsodium. Из Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², встроСнных Π² Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ оставлСн лишь ΠΊΠΎΠ΄ для вычислСния Ρ…ΡΡˆΠ΅ΠΉ Blake2, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ прСдоставляСмая Π²ΠΎ FreeBSD рСализация Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° завязана Π½Π° фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ…ΡΡˆΠ°.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² процСссС рСцСнзирования Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° оптимизация ΠΊΠΎΠ΄Π°, позволившая ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ распрСдСлСния Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° многоядСрных CPU (обСспСчСна равномСрная балансировка привязки Π·Π°Π΄Π°Ρ‡ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΊ ядрам CPU). Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Ρ‹ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° для Linux. Π’ ΠΊΠΎΠ΄Π΅ Ρ‚Π°ΠΊΠΆΠ΅ обСспСчСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ossl для ускорСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ WireGuard Π²ΠΎ FreeBSD Π² Π½ΠΎΠ²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ задСйствована ΡˆΡ‚Π°Ρ‚Π½Π°Ρ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° wg, Π° Π½Π΅ модифицированная вСрсия ifconfig, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ настройку Π² Linux ΠΈ FreeBSD. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° wg ΠΊΠ°ΠΊ ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² состав исходных тСкстов FreeBSD, Ρ‡Ρ‚ΠΎ стало Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ благодаря измСнСнию Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ Π½Π° ΠΊΠΎΠ΄ wg (ΠΊΠΎΠ΄ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ доступСн ΠΏΠΎΠ΄ лицСнзиями MIT ΠΈ GPL). ΠŸΡ€ΠΎΡˆΠ»Π°Ρ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ WireGuard Π² состав FreeBSD Π±Ρ‹Π»Π° прСдпринята Π² 2020 Π³ΠΎΠ΄Ρƒ, Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ скандалом, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±Ρ‹Π» ΡƒΠ΄Π°Π»Ρ‘Π½ ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ качСства, Π±Π΅Π·Π°Π»Π°Π±Π΅Ρ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΡƒΡ„Π΅Ρ€Π°ΠΌΠΈ, использования Π·Π°Π³Π»ΡƒΡˆΠ΅ΠΊ вмСсто ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ GPL.

Напомним, Ρ‡Ρ‚ΠΎ VPN WireGuard Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° основС соврСмСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, обСспСчиваСт ΠΎΡ‡Π΅Π½ΡŒ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, прост Π² использовании, Π»ΠΈΡˆΡ‘Π½ услоТнСний ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π°Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» сСбя Π² рядС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΉ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… большиС ΠΎΠ±ΡŠΡ‘ΠΌΡ‹ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ развиваСтся с 2015 Π³ΠΎΠ΄Π°, ΠΏΡ€ΠΎΡˆΡ‘Π» Π°ΡƒΠ΄ΠΈΡ‚ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ примСняСмых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ. Π’ WireGuard примСняСтся концСпция ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, которая ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ привязку ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ сСтСвому интСрфСйсу Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ для связывания ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

ОбмСн ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ для установки соСдинСния производится ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с SSH. Для согласования ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ соСдинСния Π±Π΅Π· запуска ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄Π΅ΠΌΠΎΠ½Π° Π² пространствС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ примСняСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Noise_IK ΠΈΠ· Noise Protocol Framework, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ authorized_keys Π² SSH. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ UDP. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ смСна IP-адрСса VPN-сСрвСра (Ρ€ΠΎΡƒΠΌΠΈΠ½Π³) Π±Π΅Π· Ρ€Π°Π·Ρ€Ρ‹Π²Π° соСдинСния с автоматичСской пСрСнастройкой ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΡˆΠΈΡ„Ρ€ ChaCha20 ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сообщСний (MAC) Poly1305, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ ДэниСлом Π‘Π΅Ρ€Π½ΡˆΡ‚Π΅ΠΉΠ½ΠΎΠΌ (Daniel J. Bernstein), Π’Π°Π½Π΅ΠΉ Π›Π°Π½Π³Π΅ (Tanja Lange) ΠΈ ΠŸΠΈΡ‚Π΅Ρ€ΠΎΠΌ Π¨Π²Π°Π±Π΅ (Peter Schwabe). ChaCha20 ΠΈ Poly1305 ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ быстрыС ΠΈ бСзопасныС Π°Π½Π°Π»ΠΎΠ³ΠΈ AES-256-CTR ΠΈ HMAC, программная рСализация ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ фиксированного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π±Π΅Π· задСйствования ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ. Для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ совмСстного сСкрСтного ΠΊΠ»ΡŽΡ‡Π° примСняСтся ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π”ΠΈΡ„Ρ„ΠΈ-Π₯Π΅Π»Π»ΠΌΠ°Π½Π° Π½Π° эллиптичСских ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Curve25519, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ДэниСлом Π‘Π΅Ρ€Π½ΡˆΡ‚Π΅ΠΉΠ½ΠΎΠΌ. Для Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ BLAKE2s (RFC7693).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru