Teamspeak 3 TSDNS Server beim Boot starten

Featured image

Vor einiger Zeit habe ich einen Teamspeak 3 Server aufgesetzt, der auf dem Standard Port (9987) listened und über eine Domain wie www.example.com und alle deren Subdomains erreichbar war. Dies war aber unerwünscht. Der TS3 Server sollte lediglich über eine Subdomain wie ts3.example.com erreichbar sein, nicht über andere Subdomains, nicht über die Hauptdomain.

Wenn man sich diesbezüglich nun etwas schlau macht, so findet man massig Forenthreads und Posts, die sich damit beschäftigen, den Teamspeak 3 Server über eine Subdomain erreichbar zu machen ohne den Port angeben zu müssen. Dazu kann man einerseits sogenannte SRV Resource Records anlegen oder aber einen TSDNS Server zusätzlich zum TS3 Server laufen lassen. Eigentlich betraf mein Problem ja die umgekehrte Richtung, aber ich beschloss den TSDNS Server auszuprobieren. Da dieser mit dem Teamspeak 3 Server ausgeliefert wird und ein leider nicht im offiziellen Lieferumfang enthaltenes Startskript dafür schnell gefunden war (hier und hier), konfigurierte ich diesen und probierte es aus. Und siehe da: Anfragen auf www.example.com liefen plötzlich ins Leere, während der TS3 Server unter ts3.example.com zu erreichen war.

So hatte ich mir das vorgestellt. Jetzt musste ich nur noch dafür sorgen, dass der TSDNS Server eben beim Hochfahren des Servers zusammen mit dem TS3 Server gestartet wird. Leider einfacher gesagt als getan! Da ich noch nie selbst ein init.d Skript geschrieben habe, suchte ich also wieder und wurde schnell hier fündig. Nun das Skript unter /etc/init.d/tsdns abgelegt, die Variablen richtig gesetzt und das Skript mit

cd /etc/init.d
sudo chmod +x tsdns
sudo update-rc.d tsdns defaults 79 11

ausführbar gemacht und registriert - fertig. Übrigens kommen die Zahlen S79 und K11 daher, dass im Artikel zum Teamspeak Server im ubuntuusers.de Wiki, an dem ich mich orientierte, der TS3 Server mit S80 und K10 gestartet wird. So stellt man sicher, dass der TSDNS Server immer früher gestartet und später beendet wird als der TS3 Server, damit man diesen unter keinen Umständen über die Hauptdomain erreichen kann. Ein Test mit

sudo shutdown -r now

und es passierte: Nichts. Der TSDNS Server war nicht hochgefahren worden.

Nach vielen Stunden der Fehlersuche fand ich den Fehler, der sich im init.d Skript versteckte. Hier versucht das Skript, welches ja mit root Rechten ausgeführt wird, folgenden Befehl mit dem eigens für den TS3 Server angelegten User teamspeak auszuführen:

su $USER -c "/usr/local/bin/teamspeak3-server_linux-amd64/tsdns/tsdns_startscript.sh start"

Das Problem daran ist, dass in jedem Tutorial zum Aufsetzen eines Teamspeak 3 Servers, das mir bekannt ist, sinnvollerweise der Nutzer teamspeak per adduser mit --disabled-login Option angelegt wird, sodass niemand sich als dieser Nutzer anmelden kann und er keine zugewiesene Standard Shell hat. Der mit su teamspeak -c angegebene Befehl läuft deshalb aber ins Leere und kann nicht ausgeführt werden. Dem su Befehl muss deshalb zusätzlich noch die zur Ausführung des folgenden Befehls zu benutzende Shell mitgegeben werden.

Richtig ist hier also:

su $USER -s /bin/bash -c "/usr/local/bin/teamspeak3-server_linux-amd64/tsdns/tsdns_startscript.sh start"

Speichern,

sudo shutdown -r now

und es läuft endlich. Wunderbar!

Ich hoffe ich konnte dem ein oder anderen damit behilflich sein!

Euer

Hatelix

Veröffentlicht: 05.11.2015
Kategorie: Informatik

links