9. DNS Discovery of a Server (DNS-Erkennung eines Servers)
Dieser Abschnitt beschreibt ein optionales Verfahren, das ein STUN-Client verwenden kann, um unter Verwendung von Domain Name System (DNS)-Verfahren [RFC1035] die IP-Adresse und den Port eines STUN-Servers zu entdecken.
Eine Verwendung muss (must) definieren, wann der Client dieses Verfahren verwenden sollte. Beispielsweise könnte eine Verwendung definieren, dass der Servername manuell im Client bereitgestellt werden kann, oder sie könnte definieren, dass der Client den Namen über andere Mittel, wie etwa ein Konfigurationsprotokoll, entdecken kann.
Sobald ein Client den aufzulösenden Namen bestimmt hat, führt er eine A- oder AAAA-Datensatzabfrage für diesen Namen durch. Diese Abfrage gibt eine oder mehrere IP-Adressen zurück. Wenn die STUN-Verwendung einen einzelnen bekannten Port definiert, sollte (SHOULD) der Client diesen Port verwenden. Andernfalls führt der Client eine SRV-Abfrage für den Namen durch. Die SRV-Abfrage liefert eine Liste von DNS-Namen zusammen mit ihren Prioritäten, Gewichten und Ports. Der Client führt dann eine A- oder AAAA-Abfrage für jeden der DNS-Namen durch, um sie in IP-Adressen umzuwandeln.
Sobald der Client eine Liste von IP-Adressen und Ports erhalten hat, ordnet er die Liste gemäß den in RFC 3484 [RFC3484] beschriebenen Verfahren. Der Client beginnt dann, Server unter Verwendung der geordneten Liste von IP-Adressen und Ports zu kontaktieren, beginnend mit der am meisten bevorzugten Adresse. Der Client fährt in der Liste fort, bis er einen reaktionsfähigen Server findet oder die Liste erschöpft.
Wenn SRV-Einträge verwendet werden, um die Serveradresse und den Port zu erhalten, sollte (SHOULD NOT) ein Client keinen Server verwenden, dessen DNS-Name nicht mit dem vom Client abgefragten Namen übereinstimmt. Wenn der Client beispielsweise nach _stun._udp.example.com gefragt hat und die SRV-Antwort einen DNS-Namen von server1.otherdomain.com enthielt, sollte (SHOULD NOT) der Client nicht an diesen Server senden. Dies soll verhindern, dass ein Angreifer, der DNS in einer Domäne kontrolliert, STUN-Anfragen an einen Server in einer anderen Domäne umleitet.
Ein Client kann (MAY) die Ergebnisse einer DNS-Suche für die durch die Time to Live (TTL) des DNS-Eintrags bzw. der DNS-Einträge angegebene Dauer zwischenspeichern. Wenn der Client innerhalb einer angemessenen Zeit (wie von der Verwendung definiert) keine Antwort von einem über einen DNS-SRV-Eintrag erhaltenen Server erhält, sollte (SHOULD) der Client das DNS erneut abfragen. Der Client sollte (SHOULD) DNS-TTL-Werte respektieren.
Wenn die STUN-Verwendung einen Port für einen bestimmten Transport definiert und dieser Transport SRV verwendet, dann muss (MUST) die Verwendung einen symbolischen Namen für diesen SRV-Dienst definieren. Der symbolische Name ist der Servicename mit vorangestelltem Unterstrich, gefolgt von einem Punkt, der Protokollname mit vorangestelltem Unterstrich, gefolgt von einem Punkt und dann der Domänenname. Wenn die Verwendung beispielsweise einen UDP-basierten Transport für STUN auf Port 3478 definiert und der Domänenname example.com ist, wäre der symbolische Name _stun._udp.example.com.