Реліз FreeBSD 13.2 з підтримкою Netlink та WireGuard

Після 11 місяців розробки опубліковано реліз FreeBSD 13.2. Настановні образи сформовані для архітектур amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 та riscv64. Додатково підготовлені збірки для систем віртуалізації (QCOW2, VHD, VMDK, raw) та хмарних оточень Amazon EC2, Google Compute Engine та Vagrant.

Ключові зміни:

  • Реалізовано можливість створення снапшотів файлових систем UFS та FFS, на яких включено журналування (soft updates). Також додано підтримку фонового збереження дампів (запуск dump з прапором «-L») із вмістом примонтованих файлових систем UFS при включеному журналі. З можливостей, які недоступні при використанні журналу, залишається фонове виконання перевірки цілісності за допомогою утиліти fsck.
  • В основний склад прийнятий драйвер wg, що працює на рівні ядра, з реалізацією мережного інтерфейсу для VPN WireGuard. Для використання необхідних драйверу криптографічних алгоритмів було зроблено розширення API криптопідсистеми ядра FreeBSD, до якого була додана обв'язка, що дозволяє використовувати через стандартний крипто-API алгоритми, що не підтримуються у FreeBSD, з бібліотеки libsodium. У процесі розробки також було проведено оптимізацію для рівномірного балансування прив'язки задач шифрування та розшифровування пакетів до ядра CPU, що дозволило знизити накладні витрати при обробці пакетів WireGuard.

    Попередня спроба включення WireGuard до складу FreeBSD була зроблена в 2020 році, але завершилася скандалом, в результаті якого вже доданий код був видалений через низьку якість, безладну роботу з буферами, використання заглушок замість перевірок, неповної реалізації протоколу і порушення ліцензії GPL. Нова реалізація спільно підготовлена ​​основними командами розробників FreeBSD і WireGuard за участю Джейсона Доненфілда (Jason A. Donenfeld), автора VPN WireGuard, і Джона Болдуїна (John H. Baldwin), відомого розробника FreeBSD. Перед прийняттям нового коду за підтримки FreeBSD Foundation було проведено повне рецензування змін.

  • Реалізовано підтримку комунікаційного протоколу Netlink (RFC 3549), що використовується в Linux для організації взаємодії ядра з процесами в просторі користувача. Проект обмежується підтримкою сімейства операцій NETLINK_ROUTE для управління станом мережевої підсистеми в ядрі, що дозволяє використовувати у FreeBSD Linux-утиліту ip з пакету iproute2 для управління мережевими інтерфейсами, установки IP-адрес, налаштування маршрутизації та маніпуляції об'єктами nexthop, що зберігають дані про стан передачі пакета в бажану точку призначення.
  • Для всіх файлів базової системи на 64-розрядних платформах включена за умовчанням рандомізація адресного простору (ASLR, Address Space Layout Randomization). Для вибіркового відключення ASLR можна використовувати команди "proccontrol -m aslr -s disable" або "elfctl -e + noaslr".
  • В ipfw для пошуку MAC-адрес задіяні базисні таблиці (Radix table), що дозволяє створювати таблиці з MAC-адресами та використовувати їх для фільтрації трафіку. Наприклад: ipfw table 1 create type mac ipfw table 1 add 11:22:33:44:55:66/48 ipfw add skipto tablearg src-mac 'table(1)' ipfw add deny src-mac 'table(1, 100 )' ipfw add deny lookup dst-mac 1
  • Додані та доступні для завантаження через loader.conf модулі ядра dpdk_lpm4 та dpdk_lpm6 з реалізацією алгоритму пошуку маршрутів DIR-24-8 для IPv4/IPv6, який дозволяє оптимізувати функції маршрутизації для хостів з дуже великими таблицями маршрутизації (у тестах спостерігається приріст швидкості %). Для налаштування модулів може використовуватися штатна утиліта route (додана опція FIB_ALGO).
  • Реалізацію файлової системи ZFS оновлено до випуску OpenZFS 2.1.9. У стартовому скрипті zfskeys забезпечено автоматичне завантаження ключів, які зберігаються у ФС ZFS. Додано новий RC-скрипт zpoolreguid для призначення ідентифікатора GUID до одного або кількох zpool (наприклад, корисно для оточення віртуалізації із загальними даними).
  • У гіпервізорі Bhyve та модулі vmm реалізована підтримка прикріплення до гостьової системи понад 15 віртуальних CPU (регулюється через sysctl hw.vmm.maxcpu). В утиліті bhyve реалізована емуляція пристрою virtio-input, за допомогою якого можна підставляти події введення з клавіатури та миші у гостьову систему.
  • У KTLS, реалізацію протоколу TLS, що працює на рівні ядра FreeBSD, додано підтримку апаратного прискорення TLS 1.3 через винесення на плечі мережевої карти деяких операцій, пов'язаних з обробкою зашифрованих вхідних пакетів. Раніше подібна можливість була доступна для TLS 1.1 та TLS 1.2.
  • У стартовому скрипті growfs при розширенні кореневої ФС забезпечено додавання розділу підкачки, якщо такий розділ спочатку був відсутній (наприклад, корисно при встановленні на карту SD готового системного образу). Для керування розміром підкачування в rc.conf додано новий параметр growfs_swap_size.
  • У стартовому скрипті hostid забезпечено генерацію випадкового UUID у разі відсутності файлу /etc/hostid та неможливості отримання UUID від апаратного забезпечення. Також додано файл /etc/machine-id з компактним поданням ідентифікатора хоста (без дефісів).
  • У rc.conf додані змінні defaultrouter_fibN та ipv6_defaultrouter_fibN, через які можна додати маршрути за замовчуванням у FIB-таблиці, відмінні від первинної.
  • До бібліотеки libmd додано підтримку хешів SHA-512/224.
  • У бібліотеці pthread реалізовано підтримку семантики функцій, які у Linux.
  • У kdump додано підтримку декодування системних викликів Linux. У kdump та sysdecode додано підтримку трасування системних викликів у стилі Linux.
  • В утиліті killall з'явилася можливість надсилання сигналу процесам, прив'язаним до певного терміналу (наприклад, killall -t pts/1).
  • Додано утиліту nproc для виведення числа доступних для поточного процесу обчислювальних блоків.
  • Утиліту pciconf додано підтримку декодування параметрів ACS (Access Control Services).
  • У ядро ​​додано налаштування SPLIT_KERNEL_DEBUG, що дозволяє зберігати в окремі файли налагоджувальну інформацію для ядра та модулів ядра.
  • В ABI linux майже завершено реалізацію підтримки механізму vDSO (virtual dynamic shared objects), що надає обмежений набір системних викликів, доступний у просторі користувача без перемикання контексту. ABI linux на системах ARM64 доведено до паритету з реалізацією для архітектури AMD64.
  • Поліпшено підтримку обладнання. Додано підтримку моніторингу продуктивності (hwpmc) для CPU Intel Alder Lake. Оновлено драйвер iwlwifi для бездротових карт Intel з підтримкою нових чіпів та стандарту 802.11ac. Додано драйвер rtw88 для бездротових карт Realtek з інтерфейсом PCI. Розширено можливості прошарку linuxkpi для використання у FreeBSD драйверів Linux.
  • Бібліотеку OpenSSL оновлено до версії 1.1.1t, LLVM/Сlang до версії 14.0.5, а SSH-сервер та клієнт оновлено до OpenSSH 9.2p1 (у минулій версії використовувався OpenSSH 8.8p1). Також оновлено версії bc 6.2.4, expat 2.5.0, file 5.43, less 608, libarchive 3.6.2, sendmail 8.17.1, sqlite 3.40.1, unbound 1.17.1, zlib 1.2.13.

Додатково оголошено про переведення в розряд застарілих та видалення починаючи з гілки FreeBSD 14.0 одноразових паролів OPIE, драйверів ce та cp, драйверів для карт з інтерфейсом ISA, утиліт mergemaster та minigzip, компонентів ATM у netgraph (NgATM), фонового процесу geom.

Джерело: opennet.ru

Додати коментар або відгук