Wersja FreeBSD 13.2 z obsługą Netlink i WireGuard

Po 11 miesiącach prac wydano FreeBSD 13.2. Obrazy instalacyjne są generowane dla architektur amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 i riscv64. Dodatkowo przygotowano złożenia dla systemów wirtualizacyjnych (QCOW2, VHD, VMDK, raw) oraz środowisk chmurowych Amazon EC2, Google Compute Engine i Vagrant.

Kluczowe zmiany:

  • Zaimplementowano możliwość tworzenia migawek systemów plików UFS i FFS z włączoną funkcją logowania (miękkie aktualizacje). Dodano także obsługę zapisywania w tle zrzutów (uruchamiania zrzutu z flagą „-L”) z zawartością zamontowanych systemów plików UFS, gdy włączone jest kronikowanie. Jedną z funkcji, która nie jest dostępna podczas korzystania z rejestrowania, jest wykonywanie kontroli integralności w tle za pomocą narzędzia fsck.
  • Podstawowy skład zawiera sterownik wg działający na poziomie jądra z implementacją interfejsu sieciowego dla VPN WireGuard. Aby wykorzystać wymagane przez sterownik algorytmy kryptograficzne, rozszerzono API podsystemu kryptograficznego jądra FreeBSD, do którego dodano uprząż umożliwiającą wykorzystanie algorytmów z biblioteki libsodium, które nie są obsługiwane we FreeBSD poprzez standardowy crypto-API . Podczas procesu opracowywania przeprowadzono również optymalizację, aby równomiernie zrównoważyć powiązanie zadań szyfrowania i deszyfrowania pakietów z rdzeniami procesora, co zmniejszyło obciążenie podczas przetwarzania pakietów WireGuard.

    Ostatnia próba włączenia WireGuarda do FreeBSD miała miejsce w 2020 roku, ale zakończyła się skandalem, w wyniku którego dodany już kod został usunięty ze względu na niską jakość, nieostrożną pracę z buforami, użycie stubów zamiast czeków, niekompletną implementację protokołu i naruszenie licencji GPL. Nowa implementacja została wspólnie przygotowana przez główne zespoły programistów FreeBSD i WireGuard, przy udziale Jasona A. Donenfelda, autora VPN WireGuard i Johna H. Baldwina, znanego programisty FreeBSD. Pełny przegląd zmian został przeprowadzony przy wsparciu Fundacji FreeBSD przed zaakceptowaniem nowego kodu.

  • Zaimplementowano obsługę protokołu komunikacyjnego Netlink (RFC 3549), używanego w systemie Linux do organizowania interakcji jądra z procesami w przestrzeni użytkownika. Projekt ogranicza się do wsparcia rodziny operacji NETLINK_ROUTE do zarządzania stanem podsystemu sieciowego w jądrze, co pozwala FreeBSD na wykorzystanie narzędzia Linux ip z pakietu iproute2 do zarządzania interfejsami sieciowymi, ustawiania adresów IP, konfigurowania routingu i manipulowania nexthopem obiekty przechowujące dane o stanie używane do przesyłania pakietu do żądanego miejsca docelowego.
  • Wszystkie pliki wykonywalne systemu podstawowego na platformach 64-bitowych mają domyślnie włączoną funkcję losowania układu przestrzeni adresowej (ASLR). Aby selektywnie wyłączyć ASLR, możesz użyć poleceń „proccontrol -m aslr -s wyłącz” lub „elfctl -e +noaslr”.
  • W ipfw tablice radix służą do wyszukiwania adresów MAC, co pozwala na tworzenie tabel z adresami MAC i używanie ich do filtrowania ruchu. Na przykład: ipfw tabela 1 utwórz typ mac ipfw tabela 1 dodaj 11:22:33:44:55:66/48 ipfw dodaj skipto tablearg src-mac 'table(1)' ipfw add deny src-mac 'table(1, 100 )' ipfw dodaj wyszukiwanie odmowy dst-mac 1
  • Dodano moduły jądra dpdk_lpm4 i dpdk_lpm6, które można wczytać poprzez plikloader.conf z implementacją algorytmu wyszukiwania tras DIR-24-8 dla IPv4/IPv6, który pozwala zoptymalizować funkcje routingu dla hostów z bardzo dużymi tablicami routingu ( w testach obserwuje się wzrost prędkości o 25%). Do konfiguracji modułów można wykorzystać standardowe narzędzie routingu (dodano opcję FIB_ALGO).
  • Implementacja systemu plików ZFS została zaktualizowana do wersji OpenZFS 2.1.9. Skrypt startowy zfskeys zapewnia automatyczne ładowanie kluczy przechowywanych w systemie plików ZFS. Dodano nowy skrypt RC zpoolreguid do przypisywania identyfikatora GUID do jednego lub większej liczby zpool (np. przydatne w środowiskach wirtualizacji współdzielonych danych).
  • Hiperwizor Bhyve i moduł vmm obsługują podłączenie ponad 15 wirtualnych procesorów do systemu gościa (regulowane przez sysctl hw.vmm.maxcpu). Narzędzie bhyve implementuje emulację urządzenia wejściowego virtio, za pomocą którego można zastąpić zdarzenia wejściowe klawiatury i myszy w systemie gościa.
  • W KTLS, implementacji protokołu TLS działającej na poziomie jądra FreeBSD, dodano obsługę sprzętowej akceleracji TLS 1.3 poprzez przeniesienie na kartę sieciową niektórych operacji związanych z przetwarzaniem zaszyfrowanych pakietów przychodzących. Wcześniej podobna funkcja była dostępna dla protokołów TLS 1.1 i TLS 1.2.
  • W skrypcie startowym Growfs podczas rozbudowy głównego systemu plików istnieje możliwość dodania partycji wymiany, jeśli początkowo takiej partycji brakowało (przydaje się to np. przy instalacji gotowego obrazu systemu na karcie SD). Aby kontrolować rozmiar wymiany, do pliku rc.conf dodano nowy parametr Growfs_swap_size.
  • Skrypt startowy hostid zapewnia wygenerowanie losowego identyfikatora UUID, jeśli brakuje pliku /etc/hostid i nie można uzyskać identyfikatora UUID ze sprzętu. Dodano także plik /etc/machine-id ze zwartą reprezentacją identyfikatora hosta (bez łączników).
  • Do pliku rc.conf dodano zmienne defaultrouter_fibN oraz ipv6_defaultrouter_fibN, dzięki którym można dodawać trasy domyślne do tablic FIB innych niż podstawowa.
  • Do biblioteki libmd dodano obsługę skrótów SHA-512/224.
  • Biblioteka pthread zapewnia obsługę semantyki funkcji używanych w systemie Linux.
  • Dodano obsługę dekodowania wywołań systemowych Linuksa do kdump. Dodano obsługę śledzenia wywołań systemowych w stylu Linuksa do kdump i sysdecode.
  • Narzędzie killall ma teraz możliwość wysyłania sygnału do procesów powiązanych z określonym terminalem (na przykład „killall -t pts/1”).
  • Dodano narzędzie nproc do wyświetlania liczby bloków obliczeniowych dostępnych dla bieżącego procesu.
  • Do narzędzia pciconf dodano obsługę dekodowania parametrów ACS (usług kontroli dostępu).
  • Do jądra dodano ustawienie SPLIT_KERNEL_DEBUG, które umożliwia zapisywanie informacji debugowania dla jądra i modułów jądra w oddzielnych plikach.
  • Linux ABI jest prawie w komplecie ze wsparciem dla mechanizmu vDSO (wirtualne dynamiczne obiekty udostępnione), który zapewnia ograniczony zestaw wywołań systemowych dostępnych w przestrzeni użytkownika bez przełączania kontekstu. Linux ABI w systemach ARM64 został dostosowany do implementacji architektury AMD64.
  • Ulepszona obsługa sprzętu. Dodano obsługę monitorowania wydajności (hwpmc) dla procesorów Intel Alder Lake. Sterownik iwlwifi dla kart bezprzewodowych Intel został zaktualizowany o obsługę nowych układów i standardu 802.11ac. Dodano sterownik rtw88 dla kart bezprzewodowych Realtek z interfejsem PCI. Możliwości warstwy linuxkpi zostały rozszerzone do użytku ze sterownikami systemu Linux we FreeBSD.
  • Biblioteka OpenSSL została zaktualizowana do wersji 1.1.1t, LLVM/Сlang do wersji 14.0.5, a serwer i klient SSH zostały zaktualizowane do OpenSSH 9.2p1 (poprzednia wersja korzystała z OpenSSH 8.8p1). Zaktualizowane są także wersje bc 6.2.4, expat 2.5.0, plik 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, że począwszy od gałęzi FreeBSD 14.0, jednorazowych haseł OPIE, sterowników ce i cp, sterowników kart ISA, narzędzi mergemaster i minigzip, komponentów ATM w netgraph (NgATM), procesu telnetd w tle oraz Klasa VINUM w geom.

Źródło: opennet.ru

Dodaj komentarz