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
- Priorität
Die Priorität gibt an, in welcher Reihenfolge die Einträge gelesen werden sollen. Geringere Werte sind höher priorisiert. Die Dienste mit hohen Prioritätswerden dienen im Falle eines Ausfalls als Ersatz. - Gewichtung
Die Gewichtung dient zur Lastverteilung. Man gibt hier das Verhältnis an, in dem Benutzer zu dem Dienst verwiesen werden sollen. Im Beispiel wäre das 6:4, also 60% für den ersten Eintrag. - Portnummer
- Server
Im Serverfeld wird festgelegt, auf welchem Server der Dienst zur Verfügung steht. Hier muss ein DNS-Eintrag eingesetzt werden, der allerdings selbst kein Alias (z.B. CNAME) sein darf.
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.