DNS Diensteeinträge (SRV Records)
DNS Diensteeinträge dienen der Abbildung von Netzwerkdiensten. Hierbei werden die Grundparameter wie Dienst, Verbindungsprotokoll und -port sowie Ziel mitgeteilt. Des weiteren werden noch die Parameter Priorität sowie Gewichtung geliefert. Der Client muss als erstes die Priorität auswerten. Hierbei ist der Eintrag mit dem niedrigsten Wert bevorzugt zu nutzen (ähnlich der Metric bei Routen). Wird mehr als ein Eintrag mit der gleichen Priorität ermittelt, wird die Gewichtung herangezogen. Hierbei entscheidet der Eintrag mit dem höchsten Wert (vergleiche hierzu RFC2782).
Sortierung:
Priorität < = besser
Gewichtung > = besser
Beispiel:
_http._tcp.example.domain 10 IN SRV 3 5 80 webserver1.example.domain
_http._tcp.example.domain 10 IN SRV 2 7 80 webserver2.example.domain
_http._tcp.example.domain 10 IN SRV 2 5 80 webserver3.example.domain
Die Reihenfolge der Server nach Priorität und Gewichtung: webserver2 > webserver3 > webserver1
Kann kein Ziel per DNS aufgelöst werden oder wird ein Diensteeintrag mit einem Zielserver "." zurückgeliefert, bedeutet dies, dass kein entsprechender Dienst bekannt ist oder zur Verfügung steht. Meine Empfehlung als Rückfallmethode kann die Zieldomäne als A oder AAAA Eintrag aufgelöst werden und ein Verbindungsversuch zum Standardport des Protokolls durchgeführt werden.
In der eigenen Domäne sollten im DNS Einträge wie "*._tcp" und "*._udp" mit den Parametern "0 0 0 ." hinterlegt werden. Hierdurch ist eine saubere SRV Auflösung gewährleistet, auch wenn hierzu kein Eintrag existiert.
Die Priorität sowie die Gewichtung dienen einer statischen Verteilung der Netzwerkanfragen zu den Diensten. Soll dies dynamischer oder lokationsbasiert erfolgen, muss dies auf andere Weise realisiert werden.
DNS Round Robin:
Eine dynamischere Lastverteilung als durch die Gewichtung kann z.B. durch DNS Round Robin und/oder durch die Signalisierung des Dienstes auf einen anderen Server bewerkstelligt werden. Die Signalisierung muss dann aber durch den Client entsprechend ausgewertet werden. Es muss auch bei der Entwicklung des Clients beachtet werden, wie dieser in der Zukunft die SRV Eintrage auswertet. Soll DNS RR eingesetzt werden, darf der Client die SRV Einträge nicht sortieren. Dies kann durch setzen der Gewichtung und Priorität auf 0, im DNS, erfolgen.
Eine beispielhafte Auflistung von möglichen DNS SRV Einträge für bekannte Protokolle:
1. Kerberos
Default port: 88
_kerberos._udp.<domain> <ttl> IN SRV <priority> <weight> <port> <target>
_kerberos._tcp.<domain> <ttl> IN SRV <priority> <weight> <port> <target>
_kerberos.<domain> <ttl> IN TXT <Kerberos Domain to map to>
2. LDAP
Default port: 389
_ldap._tcp.<domain> <ttl> IN SRV <priority> <weight> <port> <target>
3. XMPP (Jabber)
Client to server default port: 5222
_xmpp-client._tcp.<domain> <ttl> IN SRV <priority> <weight> <port> <target>
Server to server default port: 5269
_xmpp-server._tcp.<domain> <ttl> IN SRV <priority> <weight> <port> <target>
Weiter Information / Standards:
http://www.ietf.org/rfc/rfc2782.txt
http://www.ietf.org/rfc/rfc6335.txt Section 5.2