TSDNS kann und sollte wenn möglich mit SRV Resource Records abgelöst werden. Damit folgt man einem Standard und hat keinen zusätzlichen Daemon, den man verwalten und warten muss. 

Teamspeak Verbindung aufbauen, ohne Port angeben zu müssen

TSDNS oder eben besser die SRV Resource Records (kurz SRV RR) werden dafür genutzt, einen Teamspeak3-Server ohne Port im Verbindungsfeld zu erreichen. Anstatt im Verbindungsfeld auf 123.1.1.1:9987 oder meinedomain.de:9987 zu connecten, kann einfach nur noch meinedomain.de, ts3.meinedomain.de, oder ichbinsolustig.meinedomain.de angegeben werden.

Verbinden ganz ohne Port-Angabe.

In einem halbaktuellen Thread werden die Vorteile von SRV Records aufgezählt. Das Vorgehen mit TSDNS, einen eigenen Server-Deamon laufen zu lassen um das Port-Mapping durchzuführen ist eigentlich veraltet. SRV-Records sind ein Internet-Standard und wird auch bei z.B. SIP (Skype, etc) sowie tausenden anderen Tools benutzt.

Nachfolgend richten wir unsere Domain schroeffu.ch so ein, dass ts3.schroeffu.ch in Wirklichkeit auf den Teamspeak unter 80.241.221.66:9944 verbindet.

SRV Record in BIND einreichten

Um über ts3.schroeffu.ch den Teamspeak zu erreichen brauchen wir mindestens 2 DNS-Einträge:

  1. A-Record um ts3.schroeffu.ch auf die IP des Teamspeak zu zeigen
  2. SRV-Record um ts3.schroeffu.ch auf Port 9944 zu zeigen.

Um es kurz zu machen, das ist die Lösung für dieses Fallbeispiel in einem BIND Zone File:

Ein A-Record lässt ts3.schroeffu.ch auf die IP des TS3-Servers zeigen, der SRV Record mappt Port 9944 auf ts3.schroeffu.ch

Erklärung: _ts3 ist der Service bzw. Produktname, _udp das Protokoll. Hinter IN SRV folgt mit 0 die Priorität – nur die niedrigste Zahl bekommt die Verbindungen (Failover) – und mit 5 die Gewichtung. Letzteres kann als Lastverteilung genutzt werden ist aber für uns unwichtig, ich gehe nicht davon aus, dass hier jemand TS3 Hochverfügbar auf mehreren Servern zeitgleich betreibt 😀
Ganz hinten folgt 9944 bzw. eben die Port Nummer und natürlich die Ziel-Adresse, worüber der TS3 erreichbar ist, in meinem Fall ts3.schroeffu.ch.

Wichtig bei Subdomains: Hinter _ts3._udp muss bei einer Subdomain, wie wir sie benutzen, diese dran gehängt werden. Es muss also sein: _ts3._udp.ts3.schroeffu.ch. Wenn keine Subdomain verwendet wird, reicht die Angabe _ts3._udp aus.

Bei BIND Zone-Änderungen nicht vergessen die Serial um eine Zahl erhöhen vor dem Restart, damit die Änderung eingelesen wird.

SRV Record bei Namecheap einrichten

Höchstwahrscheinlich benutzen viele TS3 Admins eine Weboberfläche ihres Anbieters um DNS-Einträge zu verwalten. Beispielsweise bei Namecheap – ein kostenloser DNS-Anbieter den ich inzwischen auch oft benutze – erwartet uns ein eigenes Eingabefeld für SRV Records:

Das Webfrontend von Namecheap bietet eigene Felder für SRV Records.

Die befüllte Version könnte so aussehen:

Ausgefüllt ergibt sich derselbe Syntax wie schon im BIND-Beispiel.

Das im Bild angezeigte _udp ist falsch, es muss sein (…)_udp.ts3.schroeffu.ch wenn man über die Subdomain verbinden möchte. Das ist bei Namecheap lediglich ein Anzeigeproblem, das Feld löscht alles hinter _udp weg aber das System hat den Eintrag dennoch korrekt geschluckt.

SRV Records prüfen mit dig

Ob so ein SRV RR funktioniert kann mit dig geprüft werden, dig ist bei fast allen Linux-Distrubutionen vorinstalliert. Google bietet ein Online-Dig an, das diesen Zweck ebenso erfüllt.

dig@google: _ts3._udp.ts3.schroeffu.ch

Via Google DIG können wir bequem im Browser prüfen, ob unser SRV Records korrekt eingerichtet ist.

dig@Linux:

Wer ein Linux sein Eigen nennt, kann mit einem einzigen Befehl (orange unterstrichen) im Terminal nachschauen, ob es geklappt hat.

That’s it.

Nachtrag: Zugriff ohne Subdomain via SRV Records

Unter dem Titel «Nachteil von SRV Resource Records» habe ich fälschlicherweise angenommen, man könnte gar nicht ohne Angabe der Subdomain die Verbindung aufbauen, wenn der TS auf einem anderen Server liegt als Wunschdomain.de. Das ist natürlich Mist :‘)

Um in Teamspeak beispielsweise mit schroeffu.ch auf den TS zu verbinden, der wiederum mit einer anderen IP unter ts3.schroeffu.ch erreichbar ist, reicht ein SRV Record welcher auf ts3.schroeffu.ch mappt – und diese Subdomain zeigt auf die korrekte IP, dank des Eingangs angelegten A-Records:

_ts3._udp IN SRV 0 5 9944 ts3.schroeffu.ch.
bzw.
_ts3._udp.schroeffu.ch. IN SRV 0 5 9944 ts3.schroeffu.ch.

  • Jens

    Die Aussage, dass kein Port angebbar ist und dass es nicht möglich sei, für schroeffu.ch trotz abweichender IP den TS anzugeben ist so nicht ganz korrekt. Im SRV-Record steckt der Port. In deinem Beispiel ist der mit 9944 angegeben. Und es hindert Dich niemand daran, einen SRV-Record für _ts3._udp.schroeffu.ch anzulegen, der auf deinen TS zeigt und damit Deinen TS unter schroeffu.ch erreichbar macht 😉

    • Schroeffu

      Ooh du hast so recht 🙂 ! Ich hatte irgendwie eine Gedankenblockade, denn das klappt ja tatsächlich:

      _ts3._udp IN SRV 0 5 9944 ts3.schroeffu.ch.
      bzw.
      _ts3._udp.schroeffu.ch. IN SRV 0 5 9944 ts3.schroeffu.ch.

      Genial :‘) Danke
      Wird in ein paar Stunden gänzlich korrigiert (bin gerade nur mitten in der Nacht Wach weil der Kleine heult)