SRV-Records und TSDNS: Weg mit den Ports

Ich persönlich bin ein großer Fan von Domains und dem DNS-System an sich, da es extreme Vorteile gegenüber rohen IPs bietet. Wann immer möglich, versuche ich DNS-Namen einzusetzen und auch mit CNAME-Einträgen zu arbeiten. Das sind DNS-Einträge, die auf andere DNS-Einträge verweisen, z.B. einen A-Eintrag. Sie sind schön und leicht zu merken. Außerdem sind sie sehr einfach einzurichten, sobald man Inhaber einer Domain ist. Und die Preise für .de-Domains sinken stetig …

Deshalb kann ich es nicht verstehen, wenn ich auf Gameservern IPs zu TeamSpeak sehe: 57.216.25.171:24861. Das kann sich doch niemand merken! Stattdessen wäre voice.mein-projekt.de doch viel besser. Doch wie schaffe ich das ganze, ohne auch noch einen Port mitgeben zu müssen.

Zonenbeispiel

Zur Veranschaulichung des Folgenden hier ein Auszug aus einer der von mir verwalteten DNS-Zones ohne-name.de.

                           IN A     46.38.243.129
*                          IN CNAME ohne-name.de.
_minecraft._tcp            IN SRV   0 5 25565 server
_minecraft._tcp.server     IN SRV   0 5 25565 server
_minecraft._tcp.vanilla    IN SRV   0 5 25566 server
chocolate                  IN CNAME server
server                     IN A     94.23.228.64
voice                      IN CNAME asgard
asgard                     IN A     37.187.101.103

Zeile 1 ist ein altbekannter A-Eintrag, der hier der Domain ohne-name.de die IP 46.38.243.129 zuweist. Das ist unser Webserver. Für alle Subdomains wird in Zeile 2 ein CNAME-Record gesetzt, der auf ohne-name.de. zeigt. Somit lösen alle Subdomains von ohne-name.de standardmäßig auf unseren Webserver auf.

SRV-Einträge

In Zeile 3-5 wird es dann interessant. Hier sieht man SRV-Einträge (Service-Einträge). Diese geben für einen bestimmten Dienst (_minecraft) und Protokoll (_tcp) 4 Werte zurück, die dann beim Client verarbeitet werden. Hier ein Beispiel zur Verdeutlichung von SRV-Einträgen:

; Zone zur Domain test.hurr

; Name des Eintrages               Priorität Gewichtung Port  Server
_minecraft._tcp.test.hurr. IN SRV  0         6          25565 server1
_minecraft._tcp.test.hurr. IN SRV  0         4          25565 server2
_minecraft._tcp.test.hurr. IN SRV  10        0          25565 backup-server

Verbindet man sich mit dem Minecraft-Client jetzt zu test.hurr, fragt der Client beim DNS-Server nach einem Eintrag für _minecraft._tcp.test.hurr. an. Der lokale DNS-Client verarbeitet die Priorität und Gewichtung und gibt am Ende eine IP und einen Port zurück, auf dem der Minecraft-Server dann läuft. Obwohl test.hurr also einen ganz anderen A-Record hat, verbindet man doch erfolgreich zum Minecraft-Server.

TSDNS

Dieses Verfahren wird auf von TeamSpeak 3 seit der Version 3.0.8 unterstützt. Mit einem Eintrag in dieser Form kann man SRV-Records für TS3 anlegen:

_ts3._udp                  IN SRV 0 4 9987 voice.teamspeak.com.

Allerdings möchte man vielleicht nicht immer in der DNS-Zone rumpfuschen, nur weil man gerade einen neuen virtuellen Server zu seinem großen Hostingunternehmen hinzugefügt hat. Dafür hat TeamSpeak TSDNS entwickelt.

Das Protokoll ist simpel: Man schickt einen Hostnamen hin, z.B. voice.skyirc.net:1234, und bekommt eine zugeordnete IP zurück 37.187.101.103:$PORT. $PORT gibt an, dass der ursprüngliche Port verwendet werden soll.

In der Konfiguration stellt man einfach Verbindungen zwischen den Hostnamen und den IPs her. Auszug aus der Config:

*=37.187.101.103:$PORT
voice.ohne-name.de=37.187.101.103:9987
test.voice.skyirc.net=37.187.101.103:1234

Für alle Verbindungen, die nicht anderweitig genannt sind, verbindet man zu 37.187.101.103 mit seinem ursprünglichen Port.

Ausnahmen gibt es hier bei voice.ohne-name.de und test.voice.skyirc.net: Die IP bleibt die gleiche, doch wird man immer auf einen bestimmten Port gelenkt. Egal welchen Port ich dem TeamSpeak Client mit gebe, ich verbinde immer zu 9987 bzw. 1234.

Fazit: Vorteile?

Ziemlich unübersichtliche DNS-Einträge, ein extra Daemon auf meiner TeamSpeak-Maschine. Wozu das ganze?

Ganz einfach. Um es schön und einfach für den Benutzer zu halten. IPs kopieren kann jeder, doch sich merken kaum jemand. Domainnamen sehen schöner aus, wirken professioneller und lassen sich leichter merken. Von den Möglichkeiten für Admins bei Ausfällen und Umzügen fange ich gar nicht erst an.

TSDNS lohnt sich für jeden, der mindestens 2 TeamSpeak-Server hostet und keine Lust hat, sich ständig in das langsame Webinterface seines ISPs einzuloggen, um einen neuen SRV-Eintrag anzulegen. Außerdem kann man so den TSDNS als zentrales Gateway für seine TeamSpeak-Farm setzen und von da nur auf die verschiedenen Server weiterleiten. Auch hier sind die Möglichkeiten endlos, wenn man erstmal anfängt.