Artikelbild

TeamSpeak: Namen statt Nummern

Anküpfend an meinen Post, in dem ich die Frage aufgestellt habe, warum man eigentlich noch so viele IP-Adressen für TeamSpeak-Server oder ähnliches sieht, kommt hier ein einigermaßen ausführliches Tutorial zum TSDNS. Ich reiße dabei auch noch einmal das Thema SRV-Record im DNS an.

Wieso und weshalb das Ganze habe ich ausfühlich beschrieben, nur waren die Beispiele etwas meh.

A-Records: Die einfachste Variante

Voraussetzung dafür, dass diese Variante ganz ohne Zahlen auskommt, ist, dass der TeamSpeak-Server auf Port 9987 läuft.

Solange das aber gegeben ist, funktioniert die Einrichtung sehr schnell. Wie genau das bei jedem jetzt aussieht, kann ich leider nicht sagen. Die Web-Konsolen sehen da sehr unterschiedlich aus und nennen den A-Record auch teilweise nicht beim richtigen Namen. Wir brauchen aber eine Möglichkeit, DNS-Namen direkt auf IP-Adressen aufzulösen. In unserem Beispiel also so:

voice.ohne-name.de => 5.9.150.77

Bei 1&1 im Domain Center sieht das Ganze zum Beispiel so aus.

1&1 Domain Center, DNS-Records
1&1 Domain Center, DNS-Records

Sobald das gespeichert und einige Zeit gewartet wurde, kann man seinen TeamSpeak-Server dann auch über die angegebene Domain bzw. Subdomain aufrufen. Im Beispiel über „voice.ohne-name.de“.

SRV-Records: Dienste im DNS (sehr technisch)

SRV Resource Records im DNS sorgen dafür, dass man über einen Domain-Namen mehrere Dienste ansprechen kann. Ein solcher Record sieht wie folgt aus:

; Domainname             TTL   Record-Typ Priorität Gewicht Port Host
_ts3._udp.ohne-name.de.  86400 IN SRV     0         5       9987 voice.skyirc.net

Auseinandergedröselt macht das mehr Sinn. TTL und den Record-Typ lassen wir weg, die sind in DNS-Records immer da.

Mehr soll dazu auch nicht gesagt werden, weil das schon ziemlich ans Eingemachte geht. Interessanter ist da nämlicher der …

TSDNS - TeamSpeaks eigener "DNS"-Server

Der TSDNS bedient sich eines sehr einfachen Protokolls. Er läuft auf Port 41144, nimmt Anfragen entgegen, die ausschließlich das enthalten, was man im Client als Server eingibt (also z.B. ohne-name.de) und antwortet dann mit IP und Port des TeamSpeak-Servers. Also z.B.:

Client -> TSDNS

Hallo TSDNS! Mein Benutzer will sich zu „ohne-name.de“ verbinden. Wie sind IP und Port dazu?

TSDNS -> Client

Hallo Client. IP und Port, zu denen du dich verbinden sollst, sind: „5.9.150.77:9987“

Das Nützliche daran ist, dass der TSDNS schon in jeder TeamSpeak-Server Installation drin ist. Einfach mal in den Unterordner tsdns gucken. Anzupassen ist nur die tsdns_settings.ini, zum Beispiel so (# heißt Kommentar):

# UFEN -> SkySpeak
voice.ohne-name.de=5.9.150.77:9987
ohne-name.de=5.9.150.77:9987
skid-church.org=5.9.150.77:9987
skid.church=5.9.150.77:9987

# Fallback
*=5.9.150.77:$PORT

Den Server muss man dann nur noch starten, meinetwegen so:

cd /home/teamspeak/server/tsdns/ 
screen -dmS tsdns ./tsdnsserver_linux_amd64

Wenn man Updates an der .ini gemacht hat, reicht folgender Befehl, um diese zu übernehmen:

./tsdnsserver_linux_amd64 --update

Sobald man sich also zu „ohne-name.de“ verbinden will, antwortet der TSDNS „5.9.150.77:9987“, und der Client gehorcht und verbindet. Dabei ist es egal, ob man einen Port im Client eingegeben hat. Das ist dem TSDNS egal, denn wir übergehen das einfach. Damit hat man auch hier das Problem beseitigt, dass man sich IP und Port merken muss.

Auf den Eintrag ganz unten wird zurückgefallen (deshalb Fallback), wenn der TSDNS die Anfrage nicht kennt. Wenn man ihn also nach „voice.skyirc.net“ fragt, antwortet er „5.9.150.77“ und als Port das, was man im Client eingegeben hat.

Priorisierung - wie entscheidet der Client

Aber wie entscheidet der Client jetzt, welche von den vielen Informationen er jetzt benutzen soll, um eine IP für seinen Domain-Namen zu bekommen. Da gibt es eine ganz einfach Reihenfolge:

  1. _ts3 SRV-Record
  2. _tsdns SRV-Record
  3. TSDNS
  4. DNS

Zuerst guckt der Client, ob es einen DNS-Record namens „_ts3._udp.ohne-name.de“ gibt. Wenn ja, wird der benutzt.

Wenn nicht, guckt der Client, ob im DNS ein TSDNS-Server eingetragen ist. Also: „_tsdns._tcp.ohne-name.de“.

Wenn nicht, benutzt der Client den TSDNS, den er auf Port 41144 findet.

Wenn da keiner ist, benutzt der Client die IP aus dem DNS - entweder einen A-Record (nur IP) oder CNAME (Alias). Wenn es auch da keinen gibt: Ende.

Fazit

Wie schon im letzten Post beschrieben, finde ich den geringen Mehraufwand mehr als gerechtfertigt. Erst recht, wenn man wie viele Clans auf der Suche nach aktiven Mitspielern ist. Viel zu oft kommt sonst die Frage „Die IP war doch irgendwie 5.7.123.irgendwas, oder? Und wie war der Port?“. „ohne-name.de“ hingegen kann man sich gut merken.

Alles hier zielt jetzt natürlich alles auf jemanden ab, der seinen Server selber hostet. Bei TeamSpeak-Hostern wird das alles etwas anders aussehen. Die SRV-Records funktionieren aber genau so, nur der TSDNS könnte schwierig werden. Da ich mich mit TeamSpeak-Hostern aber genau gar nicht auskenne, kann ich dazu nichts sagen.

Also Leute, Domains für 6€ im Jahr kaufen und eure Spieler glücklicher machen. Bei den Preisen für Battlefield Server gibt man gut und gerne schon 200€ im Jahr dafür aus, da machen 6€ den Kohl auch nicht mehr fett. Und wenigstens eine kleine Website dann auch noch.