1. Introduzione e Contesto (Introduction and Background)
Il protocollo DNS [RFC1035] definisce il codice di risposta 3 come "Errore di Nome" (Name Error), o "NXDOMAIN" [RFC2308], il che significa che il nome di dominio richiesto non esiste nel DNS.
The DNS protocol [RFC1035] defines response code 3 as "Name Error", or "NXDOMAIN" [RFC2308], which means that the queried domain name does not exist in the DNS.
Da tempo immemorabile, c'è stata qualche controversia sul fatto che una risposta NXDOMAIN significhi che il nome stesso non esiste e che neanche tutto ciò che si trova sotto di esso esista. Questa sezione descrive lo status quo.
Since time immemorial, there has been some controversy as to whether a NXDOMAIN response means that the name itself does not exist and everything underneath it does not exist either. This section describes the status quo.
L'RFC 1034 [RFC1034], Sezione 4.3.3, dice:
RFC 1034 [RFC1034], Section 4.3.3, says:
Se la risposta è un errore (o un errore di implementazione del risolutore o una risposta NXDOMAIN dal server dei nomi), allora l'errore viene segnalato al client.
If the response is an error (either a resolver implementation error or a NXDOMAIN response from the name server), then the error is reported to the client.
Questo non è esplicitamente dichiarato nell'algoritmo di risoluzione iterativa (Sezione 5.3.3 della [RFC1034]):
This is not explicitly stated in the iterative resolution algorithm (Section 5.3.3 of [RFC1034]):
- Se la risposta è autorevole e ha il codice "Name Error", allora il nome richiesto non esiste nel DNS. Segnala un errore "nome host sconosciuto" al client.
- If the response is authoritative and has the code "Name Error", then the name queried does not exist in the DNS. Signal an "unknown host name" error to the client.
Tuttavia, la presenza di un "non terminale vuoto" (ENT, vedi [RFC7719]) -- un nodo nell'albero DNS che non ha record di risorse ma ha nodi sotto di esso -- implica che NXDOMAIN significhi "nulla sotto". Se foo.example è un ENT, esiste. Pertanto, una risposta per foo.example non sarebbe NXDOMAIN (sarebbe NODATA: codice di risposta 0 e una sezione di risposta vuota). Se foo.example non esistesse, neanche bar.foo.example potrebbe esistere.
However, the presence of an "empty non-terminal" (ENT, see [RFC7719]) -- a node in the DNS tree that has no resource records but has nodes underneath it -- implies that NXDOMAIN means "nothing underneath". If foo.example is an ENT, it exists. Therefore, a response for foo.example would not be NXDOMAIN (it would be NODATA: response code 0 and an empty answer section). If foo.example did not exist, bar.foo.example could not exist either.
La specifica DNSSEC [RFC4035] è più esplicita nella Sezione 3.1.3.2:
The DNSSEC specification [RFC4035] is more explicit in Section 3.1.3.2:
Il server dei nomi DEVE restituire l'RR NSEC canonico per il nome del proprietario (apice della zona) della sezione contenente il QNAME per provare che il QNAME non esiste.
The name server MUST return the canonical NSEC RR for the owner name (zone apex) of the section containing the QNAME to prove that the QNAME does not exist.
E la Sezione 5.4 della [RFC4035] dice:
And Section 5.4 of [RFC4035] says:
Se il risolutore determina che la sezione di errore del nome è valida, questo prova che il QNAME non esiste e che non è stato possibile costruire alcuna catena di convalida.
If the resolver determines that the name error section is valid, this proves that the QNAME does not exist and that no validation chain could be constructed.
Una prova di inesistenza, come un record NSEC o NSEC3, copre l'intero albero sotto il nome.
A proof of nonexistence, such as an NSEC or NSEC3 record, covers the entire tree below the name.
1.1. Terminologia (Terminology)
Le parole chiave "DEVE" (MUST), "NON DEVE" (MUST NOT), "RICHIESTO" (REQUIRED), "DORVÀ" (SHALL), "NON DOVRÀ" (SHALL NOT), "DOVREBBE" (SHOULD), "NON DOVREBBE" (SHOULD NOT), "RACCOMANDATO" (RECOMMENDED), "PUÒ" (MAY) e "OPZIONALE" (OPTIONAL) in questo documento devono essere interpretate come descritto nella [RFC2119].
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
"NXDOMAIN cut" si riferisce alla tecnica (descritta nella Sezione 2) in cui un risolutore che riceve una risposta NXDOMAIN per un nome di dominio assume che non esista alcun nome sotto quel nome.
"NXDOMAIN cut" refers to the technique (described in Section 2) where a resolver that receives a NXDOMAIN response for a domain name assumes that no name underneath that name exists.
"QNAME" è definito nella [RFC1034] ed è usato in questo documento per riferirsi al nome di dominio nella query.
"QNAME" is defined in [RFC1034] and is used in this document to refer to the domain name in the query.