Dopo due anni e mezzo di sviluppo, il consorzio ISC ha presentato il primo rilascio stabile della nuova e significativa versione del server DNS BIND 9.20, che incorpora le modifiche sviluppate nella versione sperimentale BIND 9.19. Il supporto per la versione 9.20 sarà fornito nell'ambito di un ciclo di supporto esteso fino al primo trimestre del 2028. Il supporto per la versione 9.18 terminerà nel secondo trimestre del 2025. Per lo sviluppo delle funzionalità della prossima versione stabile di BIND, sarà creata una versione sperimentale BIND 9.21.0. Il codice del progetto è scritto in C e distribuito con licenza MPL 2.0.
Variazioni principali:
- Il nucleo dell'applicazione, che collega tutti i componenti, è stato convertito per utilizzare un ciclo di elaborazione eventi in modalità non bloccante, implementato sulla base della libreria libuv, utilizzata in progetti come Node.js, Knot DNS, H2O, Luvit e MoarVM. Nella versione 9.16, il gestore delle connessioni di rete in BIND è stato trasferito su libuv, e ora anche le parti utilizzate per l'interazione tra i componenti interni dell'infrastruttura, così come i gestori ausiliari a lungo termine eseguiti in thread separati (threadpool), utilizzati per la verifica di DNSSEC, il trasferimento delle zone, il mantenimento del catalogo delle zone e l'elaborazione di RPZ (Response Policy Zone). Per l'assemblaggio di BIND è ora richiesto almeno il rilascio di libuv 1.34.0.
- È stato proposto un nuovo backend per il lavoro con il DB — "QP trie", che sostituisce RBTDB (Red-Black Tree Database) ed è utilizzato per impostazione predefinita per la memorizzazione della cache e del database delle zone DNS. Per il funzionamento multithread nel QP trie è stata utilizzata la libreria liburcu con implementazione nello spazio utente di strutture che non utilizzano blocchi, grazie all'uso del meccanismo di sincronizzazione RCU (read-copy-update) e del metodo di rilascio sicuro della memoria QSBR (Quiescent-State-Based Reclamation).
- È stato utilizzato un meccanismo di compressione aggiornato nomi di dominio, che utilizza un metodo di codifica più compatto per nomi con un numero maggiore di etichette.
- Ampliate le funzionalità di DNSSEC: è stato consentito l'uso di "dnssec-policy" per la gestione delle zone firmate (l'opzione auto-dnssec è stata rimossa); con l'uso di "inline-signing" è stato aggiunto supporto per il RFC 8901 (modello multi-firmatario DNSSEC 2); è stato ripristinato il supporto per PKCS#11 basato su OpenSSL 3.0.0 Engine API; nella "dnssec-policy" è stato aggiunto il supporto per HSM (Hardware Security Module).
- È stata aggiunta la supporto per la seconda versione del catalogo delle zone (Catalog Zone, RFC 9432), che semplifica la gestione dei server DNS secondari, consentendo di trasmettere il catalogo delle zone secondarie invece di dover definire singole registrazioni su ciascun server secondario. Dopo aver configurato la trasmissione del catalogo analogamente alla trasmissione delle singole zone, le zone create sul server primario, contrassegnate come facenti parte del catalogo, vengono automaticamente create sul server secondario senza la necessità di modificare i file di configurazione.
- È stata aggiunta la supporto per il meccanismo degli errori estesi (Extended DNS Errors, RFC 8914), che consente di restituire informazioni aggiuntive sulla causa di un errore verificatosi durante l'esecuzione di una richiesta DNS.
- L'implementazione delle tecnologie 'DNS over HTTPS' (DoH, DNS over HTTPS) e DNS over TLS (DoT, DNS over TLS), utilizzate per crittografare le richieste dei clienti ai resolver e lo scambio di dati crittografati tra i server, è stata aggiornata per utilizzare un trasporto unificato.
- È stata aggiunta la possibilità di utilizzare il protocollo PROXYv2 con tutti i trasporti supportati in BIND. Il protocollo PROXY consente di trasmettere informazioni sulla connessione per mantenere i dati sull'indirizzo IP e sul numero di porta originali durante il forwarding delle richieste DNS attraverso altri backend, bilanciatori di carico e proxy.servers.
- È stata aggiunta la supporto per la modalità USDT (User Statically Defined Tracing), che consente di eseguire la tracciatura delle applicazioni utilizzando il comando perf senza generare overhead aggiuntivi quando la tracciatura è disattivata.
- Nelle statistiche raccolte è stata implementata la riflessione delle informazioni sulle operazioni di trasferimento di zone in ingresso non completate.
- È stato effettuato un lavoro per ridurre i ritardi, diminuire il consumo di memoria e alleviare il carico sulla CPU durante la risoluzione, l'operatività del DNS-over-TLS e la generazione di risposte tramite UDP e TCP.



Fonte: opennet.ru



