Wydanie FreeBSD 13.2 z obsługą Netlink i WireGuard

Po 11 miesiącach prac deweloperskich opublikowano wersję FreeBSD 13.2. Obrazy instalacyjne zostały przygotowane dla architektur amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 i riscv64. Dodatkowo przygotowano zestawy dla systemów wirtualizacji (QCOW2, VHD, VMDK, raw) oraz środowisk chmurowych Amazon EC2, Google Compute Engine i Vagrant.

Kluczowe zmiany:

  • Wprowadzono możliwość tworzenia migawków systemów plików UFS i FFS, na których włączono dziennikowanie (soft updates). Dodano również wsparcie dla tła zapisywania zrzutów (uruchamianie dump z flagą „-L”) zawierających zamontowane systemy plików UFS przy włączonym dziennikowaniu. Z możliwości, które są niedostępne podczas używania dziennikowania, pozostaje tło wykonania sprawdzania integralności przy pomocy narzędzia fsck.
  • Do głównego składu przyjęto działający na poziomie jądra sterownik wg z realizacją interfejsu sieciowego dla VPN WireGuard. Aby umożliwić użycie wymaganych przez sterownik algorytmów kryptograficznych, rozszerzono API subsystems kryptograficznych jądra FreeBSD, do którego dodano interfejs umożliwiający korzystanie z niespójnych w FreeBSD algorytmów z biblioteki libsodium poprzez standardowe API kryptograficzne. W trakcie prac deweloperskich przeprowadzono również optymalizację w celu równomiernego rozkładu obciążenia związanego z szyfrowaniem i deszyfrowaniem pakietów na rdzenia CPU, co pozwoliło na zmniejszenie narzutów związanych z przetwarzaniem pakietów WireGuard.

    Poprzednia próba włączenia WireGuard do FreeBSD miała miejsce w 2020 roku, ale zakończyła się skandalem, w wyniku którego już dodany kod został usunięty z powodu kiepskiej jakości, chaotycznej pracy z buforami, użycia wypełniaczy zamiast weryfikacji, niepełnej implementacji protokołu oraz naruszenia licencji GPL. Nowa implementacja została przygotowana wspólnie przez główne zespoły deweloperów FreeBSD i WireGuard z udziałem Jasona Donenfelda, autora VPN WireGuard, oraz Johna Boldwina, znanego dewelopera FreeBSD. Przed przyjęciem nowego kodu, przy wsparciu organizacji FreeBSD Foundation, przeprowadzono pełny przegląd zmian.

  • Wprowadzono wsparcie dla protokołu komunikacyjnego Netlink (RFC 3549), używanego w systemie Linux do organizacji interakcji jądra z procesami w przestrzeni użytkownika. Projekt ogranicza się do wsparcia dla rodziny operacji NETLINK_ROUTE, umożliwiających zarządzanie stanem podsystemu sieciowego w jądrze, co pozwala używać w FreeBSD narzędzia ip z pakietu iproute2 do zarządzania interfejsami sieciowymi, konfigurowania adresów IP, ustawiania trasowania i manipulowania obiektami nexthop, które przechowują dane o stanie używanym do przesyłania pakietów do pożądanej lokalizacji docelowej.
  • Dla wszystkich plików wykonywalnych podstawowego systemu na platformach 64-bitowych domyślnie włączona jest randomizacja układu przestrzeni adresowej (ASLR, Address Space Layout Randomization). Aby selektywnie wyłączyć ASLR, można użyć poleceń „proccontrol -m aslr -s disable” lub „elfctl -e +noaslr”.
  • W ipfw do wyszukiwania adresów MAC wykorzystywane są podstawowe tabele (Radix table), co pozwala na tworzenie tabel z adresami MAC i ich używanie do filtrowania ruchu. Na przykład: 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
  • Dodano i udostępniono do załadunku za pomocą loader.conf moduły jądra dpdk_lpm4 i dpdk_lpm6 z implementacją algorytmu wyszukiwania tras DIR-24-8 dla IPv4/IPv6, który optymalizuje funkcje trasowania dla hostów z bardzo dużymi tabelami trasowania (w testach zaobserwowano przyrost prędkości na poziomie 25%). Do konfiguracji modułów można użyć standardowego narzędzia route (dodano opcję FIB_ALGO).
  • Implementacja systemu plików ZFS została zaktualizowana do wydania OpenZFS 2.1.9. W skrypcie startowym zfskeys zapewniono automatyczne ładowanie kluczy przechowywanych w systemie plików ZFS. Dodano nowy skrypt RC zpoolreguid do przypisania identyfikatora GUID do jednego lub kilku zpool (przykładowo, użyteczne w środowiskach wirtualizacji z współdzielonymi danymi).
  • W hipernadzorze Bhyve i module vmm wprowadzono wsparcie dla przypinania do systemu gościa ponad 15 wirtualnych CPU (regulowane przez sysctl hw.vmm.maxcpu). W narzędziu bhyve zaimplementowano emulację urządzenia virtio-input, przy pomocy którego można wprowadzać zdarzenia wejściowe z klawiatury i myszy do systemu gościa.
  • W KTLS, implementacji protokołu TLS działającego na poziomie jądra FreeBSD, dodano wsparcie dla sprzętowego przyspieszenia TLS 1.3 poprzez przeniesienie niektórych operacji związanych z przetwarzaniem zaszyfrowanych pakietów przychodzących na kartę sieciową. Wcześniej taka możliwość była dostępna dla TLS 1.1 i TLS 1.2.
  • W skrypcie startowym growfs, podczas rozszerzania głównej systemu plików, zapewniono dodanie partycji swap, jeśli taka partycja początkowo nie istniała (na przykład przydatne podczas instalacji na karcie SD gotowego obrazu systemu). Do zarządzania rozmiarem swap w rc.conf dodano nowy parametr growfs_swap_size.
  • W skrypcie startowym hostid zapewniono generowanie losowego UUID w przypadku braku pliku /etc/hostid i niemożności uzyskania UUID z urządzenia. Dodano również plik /etc/machine-id z kompaktową reprezentacją identyfikatora hosta (bez myślników).
  • W rc.conf dodano zmienne defaultrouter_fibN i ipv6_defaultrouter_fibN, dzięki którym można dodać trasy domyślne do tabel FIB różniących się od pierwotnej.
  • Do biblioteki libmd dodano wsparcie dla hashów SHA-512/224.
  • W bibliotece pthread zaimplementowano wsparcie dla semantyki funkcji używanych w Linuxie.
  • W kdump dodano wsparcie dla dekodowania systemowych wywołań Linuxa. W kdump i sysdecode dodano wsparcie dla śledzenia wywołań systemowych w stylu Linux.
  • W narzędziu killall pojawiła się możliwość wysyłania sygnału procesom związanym z określonym terminalem (na przykład „killall -t pts/1”).
  • Dodano narzędzie nproc do wyświetlania liczby dostępnych obecnemu procesowi jednostek obliczeniowych.
  • W narzędziu pciconf dodano wsparcie dla dekodowania parametrów ACS (Access Control Services).
  • Do jądra dodano ustawienie SPLIT_KERNEL_DEBUG, które pozwala na zapisywanie w oddzielnych plikach informacji debugowych dla jądra i jego modułów.
  • W ABI Linux prawie zakończono realizację wsparcia dla mechanizmu vDSO (virtual dynamic shared objects), który zapewnia ograniczony zestaw wywołań systemowych dostępnych w przestrzeni użytkownika bez przełączania kontekstu. ABI Linux na systemach ARM64 osiągnął parytet z implementacją dla architektury AMD64.
  • Rozszerzone wsparcie sprzętowe. Dodano wsparcie monitorowania wydajności (hwpmc) dla procesorów Intel Alder Lake. Zaktualizowano sterownik iwlwifi dla kart bezprzewodowych Intel z obsługą nowych chipów i standardu 802.11ac. Dodano sterownik rtw88 dla kart bezprzewodowych Realtek z interfejsem PCI. Rozbudowano możliwości warstwy linuxkpi do użytku z driverami Linuxa w FreeBSD.
  • Biblioteka OpenSSL zaktualizowana do wersji 1.1.1t, LLVM/Clang do wersji 14.0.5, a serwer i klient SSH zaktualizowane do OpenSSH 9.2p1 (w poprzedniej wersji używano OpenSSH 8.8p1). Zaktualizowano również wersje 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.

Dodatkowo ogłoszono o uznaniu i usunięciu z użycia od gałęzi FreeBSD 14.0 jednorazowych haseł OPIE, sterowników ce i cp, sterowników dla kart z interfejsem ISA, narzędzi mergemaster i minigzip, komponentów ATM w netgraph (NgATM), procesu w tle telnetd oraz klasy VINUM w geom.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster