Passa al contenuto principale

9. DNS Discovery of a Server (Scoperta DNS di un server)

Questa sezione descrive una procedura opzionale che un client STUN può utilizzare per scoprire, utilizzando le procedure del Domain Name System (DNS) [RFC1035], l'indirizzo IP e la porta di un server STUN.

Un utilizzo deve (must) definire quando il client deve utilizzare questa procedura. Ad esempio, un utilizzo potrebbe definire che il nome del server può essere fornito manualmente nel client, oppure potrebbe definire che il client può scoprire il nome attraverso altri mezzi, come un protocollo di configurazione.

Una volta che un client ha determinato il nome da risolvere, esegue una query di record A o AAAA per quel nome. Questa query restituisce uno o più indirizzi IP. Se l'utilizzo STUN definisce una singola porta ben nota, il client dovrebbe (SHOULD) utilizzare quella porta. In caso contrario, il client esegue una query SRV per il nome. La query SRV produrrà un elenco di nomi DNS, insieme alle loro priorità, pesi e porte. Il client esegue quindi una query A o AAAA su ciascuno dei nomi DNS per convertirli in indirizzi IP.

Una volta che il client ha ottenuto un elenco di indirizzi IP e porte, ordina l'elenco secondo le procedure descritte in RFC 3484 [RFC3484]. Il client inizia quindi a contattare i server utilizzando l'elenco ordinato di indirizzi IP e porte, iniziando dall'indirizzo più preferito. Il client continua nell'elenco fino a trovare un server reattivo o esaurisce l'elenco.

Quando i record SRV vengono utilizzati per ottenere l'indirizzo e la porta del server, un client non dovrebbe (SHOULD NOT) utilizzare un server il cui nome DNS non corrisponde al nome che il client ha interrogato. Ad esempio, se il client ha interrogato _stun._udp.example.com e la risposta SRV conteneva un nome DNS di server1.otherdomain.com, il client non dovrebbe (SHOULD NOT) inviare a quel server. Questo serve a impedire a un attaccante che controlla il DNS in un dominio di reindirizzare le richieste STUN a un server in un altro dominio.

Un client può (MAY) memorizzare nella cache i risultati di una ricerca DNS per la durata specificata dal Time to Live (TTL) del record o dei record DNS. Se il client non riceve una risposta da un server ottenuto tramite un record DNS SRV entro un tempo ragionevole (come definito dall'utilizzo), il client dovrebbe (SHOULD) ri-interrogare il DNS. Il client dovrebbe (SHOULD) rispettare i valori TTL DNS.

Se l'utilizzo STUN definisce una porta per un particolare trasporto, e quel trasporto utilizza SRV, allora l'utilizzo deve (MUST) definire un nome simbolico per quel servizio SRV. Il nome simbolico è il nome del servizio preceduto da un underscore, seguito da un punto, il nome del protocollo preceduto da un underscore, seguito da un punto, e poi il nome di dominio. Ad esempio, se l'utilizzo definisce un trasporto basato su UDP per STUN sulla porta 3478, e il nome di dominio è example.com, il nome simbolico sarebbe _stun._udp.example.com.