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.


Schroeffu

Der Autor ist Schweizer, verheiratet, seit November 2015 zu seiner liebevollen Frau nach Braunschweig, Deutschland, ausgewandert. Als Vater von inzwischen zwei Kindern kommt das Bloggen hoffentlich nicht zu kurz.

7 Kommentare

Jens · 9. Mai 2017 um 02:16

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 · 9. Mai 2017 um 04:12

    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)

Leandro · 6. Januar 2020 um 09:13

Hi,

danke für den Beitrag,

bei mir funktioniert es irgendwie trotzdem nicht, stelle mich wohl zu dumm an, könnte mir evtl jemand helfen?

LG

    Schroeffu · 6. Januar 2020 um 19:36

    Hi Leandro, wie lautet denn deine TS3 Domain? Ich könnte dir vermutlich helfen, vorerst ein Check aus der Entfernung wie deinen SRV Eintrag lautet. Gruss Schroeffu

Fabian · 18. Februar 2020 um 13:19

Hallo Schroeffu,

dein Beitrag war bis jetzt der hilfreichste den ich gefunden habe.
Dennoch habe ich Probleme mit meinem SRV Record. Ich nutze ebenfalls Namecheap,
meine Domain lautet dnrktz167.dev. Ich habe einen A Record angelegt mit ts3 sowie den SRV Record. Könntest du mir vielleicht helfen?

Hier ein Screenshot des A Records und des SRV Records

http://prntscr.com/r41fmz

MfG

    Fabian · 18. Februar 2020 um 17:28

    Mein SRV Record funktioniert nun und ist auch auflösbar. Allerdings habe ich jetzt das Problem dass wenn ich versuche über dnrktz167.dev auf den TS3 Server zu connecten dies in 4/10 Fällen klappt.
    Weißt du zufällig warum die Erfolgschance so gering ist? Muss ich den SRV Eintrag auch noch in irgendeiner Config vom TS Server eintragen oder könnte es vielleicht an meinem DNS Provider liegen? Interferieren vielleicht meine anderen Records mit dem SRV Record und verhindern so dass die Verbindung durchgehen klappt. Nutze ich die Ip kann ich immer ohne Probleme verbinden, das Problem besteht nur wenn meine Domain benutze.

      Schroeffu · 20. Februar 2020 um 15:46

      Kann es sein dass aktuell gerade der SRV Record für die Top Level Domain dnrktz167.dev NOK ist, hingegen für ts3.dnrktz167.dev OK? Ich prüfe hier mit „dig“ direkt gegen die 5 Namecheap NS.

      Ich kann ts3.dnrktz167.dev den SRV Eintrag sehen:

      root# dig @freedns5.registrar-servers.com. _ts3._udp.ts3.dnrktz167.dev. SRV

      ;; ANSWER SECTION:
      _ts3._udp.ts3.dnrktz167.dev. 1800 IN SRV 0 5 9987 ts3.dnrktz167.dev.
      ;; ADDITIONAL SECTION:
      ts3.dnrktz167.dev. 1799 IN A 116.202.128.94

      Hingegen für dnrktz167.dev sehe ich keinen SRV Eintrag:

      root# dig @freedns3.registrar-servers.com. _ts3._udp.dnrktz167.dev. SRV

      (kein SRV Eintrag gefunden)

      In meinem Fall als Beispiel check „schroeffu.ch“ SRV Eintrag:

      root# dig @freedns3.registrar-servers.com. _ts3._udp.schroeffu.ch SRV

      ;; ANSWER SECTION:
      _ts3._udp.schroeffu.ch. 1800 IN SRV 0 5 9944 ts3.schroeffu.ch.

      Alternativ kann man auch das Google Dig nutzen um die Records zu prüfen: https://toolbox.googleapps.com/apps/dig/#SRV/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.