STUN- und TURN-Server automatisch testen

Um mittels monit einen STUN- und TURN-Server automatisch auf Funktion und Erreichbarkeit zu testen, habe ich ein kleines Script geschrieben. Darin wird das Tool stunclient aus dem Paket stuntman-client genutzt, welches im Debian-Repository zu finden war. Allerdings ist es inzwischen aus dem Repository von Debian 11 (bullseye) verschwunden und ich konnte bislang keinerlei Gründe dafür finden:

E: Unable to locate package stuntman-client

Um das Script auch weiter verwenden zu können bleibt nur, das Tool stunclient selbst zu bauen. Los gehts!

* * *

stunclient selbst kompilieren

Loge dich dazu auf deinem Debian-Server ein, auf dem du das Monitoring-Script für den STUN- / TURN-Server ausführen möchtest.

Lade dir anschließend das aktuellste Paket von stunclient herunter:

wget https://www.stunprotocol.org/stunserver-1.2.16.tgz

Entpacke das Paket und navigiere in den neu erstellten Ordner:

tar xzvf stunserver-1.2.16.tgz
cd stunserver

Bevor wir das Paket bauen können, müssen auf dem Gerät noch die nötigen Voraussetzungen geschaffen werden. Installiere dazu die Tools make und g++.

apt install make g++

Lade nun die Boost-Library, die wir zwingend benötigen, herunter und entpacke sie:

wget https://boostorg.jfrog.io/artifactory/main/release/1.83.0/source/boost_1_83_0.tar.gz
tar xzvf boost_1_83_0.tar.gz

Öffne die Datei common.inc und entferne in der ersten Zeile die #. Füge dahinter anschließend den vollständigen Pfad zu dem Ordner ein, den wir gerade entpackt haben, z.B. /root/stunserver/boost_1_83_0:

BOOST_INCLUDE := -I/root/stunserver/boost_1_83_0
#OPENSSL_INCLUDE := -I/Users/jselbie/openssl/include

[...]

Speichere die Datei ab und baue mit folgendem Befehl das Tool stunclient:

make

War der Build-Vorgang erfolgreich, sieht das Ende der Ausgaben in etwa so aus:

[...]

make[1]: Verzeichnis „/root/stunserver/server“ wird verlassen
rm -f ./stunserver ./stunclient ./stuntestcode
cp server/stunserver .
cp client/stunclient .
cp testcode/stuntestcode .

Nun findest du die drei Dateien stunclient, stunserver und stuntestcode im gleichen Verzeichnis.

Kopiere dir nun die Datei stunclient an einen Ort deiner Wahl, z.B. nach /usr/bin:

cp stunclient /usr/local/bin

Anschließend kannst du mein fertiges Monitoring-Script verwenden.

* * *

Fertiges Script für das STUN-/TURN-Server-Monitoring

Info
Passe darin noch die Variable TARGET entsprechend deiner Konfiguration an und lösche ggf. einige der Tests oder ändere die Ziel-Ports.

Die Standard-Ports sind 3478 und 5349. Die Ports 80 und 443 habe ich zusätzlich hinzugefügt, da ich auch restriktive Firewalls mit dem TURN durchdringen möchte und er daher auch auf diesen beiden Ports hört.

shellcheck shellcheck 0 errors 0 errors
#!/bin/bash
#                                                                                #
# ███████╗██╗    ██╗███████╗███████╗████████╗ ██████╗  ██████╗  ██████╗ ██████╗  #
# ██╔════╝██║    ██║██╔════╝██╔════╝╚══██╔══╝██╔════╝ ██╔═══██╗██╔═══██╗██╔══██╗ #
# ███████╗██║ █╗ ██║█████╗  █████╗     ██║   ██║  ███╗██║   ██║██║   ██║██║  ██║ #
# ╚════██║██║███╗██║██╔══╝  ██╔══╝     ██║   ██║   ██║██║   ██║██║   ██║██║  ██║ #
# ███████║╚███╔███╔╝███████╗███████╗   ██║   ╚██████╔╝╚██████╔╝╚██████╔╝██████╔╝ #
# ╚══════╝ ╚══╝╚══╝ ╚══════╝╚══════╝   ╚═╝    ╚═════╝  ╚═════╝  ╚═════╝ ╚═════╝  #
#                                                                                #
#                                      IT-Beratung mit Fokus auf Datensicherheit #
#                                                                                #
#                            www.sweetgood.de                                    #
#                                                                                #
# Copyright        : All rights reserved!
# Repository url   : https://andersgood.de/kurz-notiert/stun-und-turn-server-automatisch-testen
# Author           : SWEETGOOD
# Filename         : monit-check-turn-server.sh
# Created at       : 04.12.2023
# Last changed at  : 04.12.2023
# Version          : 1.0
# Description      : Checks the functionality of a STUN/TURN server

# Change your server name/ip here
TARGET="your.domain.or.ip.of.stun.turn.server"
PATHSTUNCLIENT=$(which stunclient)

FAIL=0
SUCCESS=0

if [[ ! $(command -v "${PATHSTUNCLIENT}") ]]; then
        echo "stunclient not found.
Consider installing it through \"apt install stuntman-client\" or build it yourself from https://www.stunprotocol.org"
        echo "error"
        exit
fi

TEST1=$("${PATHSTUNCLIENT}" --mode full --localport 30080 "${TARGET}" 80 | grep -c success)
if [[ "${TEST1}" -eq 3 ]]; then
        ((SUCCESS+=1))
        #echo "80 success"
else
        ((FAIL+=1))
        #echo "80 error"
fi

TEST2=$("${PATHSTUNCLIENT}" --mode full --localport 30443 "${TARGET}" 443 | grep -c success)
if [[ "${TEST2}" -eq 3 ]]; then
        ((SUCCESS+=1))
        #echo "443 success"
else
        ((FAIL+=1))
        #echo "443 error"
fi

TEST3=$("${PATHSTUNCLIENT}" --mode full --localport 33478 "${TARGET}" 3478 | grep -c success)
if [[ "${TEST3}" -eq 3 ]]; then
        ((SUCCESS+=1))
        #echo "3478 success"
else
        ((FAIL+=1))
        #echo "3478 error"
fi

TEST4=$("${PATHSTUNCLIENT}" --mode full --localport 35349 "${TARGET}" 5349 | grep -c success)
if [[ "${TEST4}" -eq 3 ]]; then
        ((SUCCESS+=1))
        #echo "5349 success"
else
        ((FAIL+=1))
        #echo "5349 error"
fi

# FOR DEBUGGING ONLY
#echo "fail: ${FAIL}"
#echo "success: ${SUCCESS}"

if [ "${FAIL}" -eq 0 ]; then
        if [ "${SUCCESS}" -eq 4 ]; then
                echo "success"
        else
                echo "error"
        fi
else
        echo "error"
fi

Viel Spaß mit dem Script!

* * *

Ich möchte meinen STUN-/TURN-Server automatisiert testen, habe dabei aber Schwierigkeiten

Ich unterstütze dich gerne beim Einrichten eines automatisierten Tests für deinen STUN-/TURN-Server.
Schreib mir hierzu einfach über Kontakt, per Telegram oder unten in die Kommentare eine Nachricht.

* * *
* * *
Christian Süßenguth Christian Süßenguth @sweetgood

Hi, ich bin Christian und Inhaber der Firma SWEETGOOD. Mit dem andersGOOD Blog möchte ich auch dich für datensichere IT-Lösungen begeistern. So bringst du dein Unternehmen voran, ohne großen Konzernen deine wertvollen Daten zu liefern. Probiers mal anders!


Kommentarbereich

Die Kommentare sind für dich noch deaktiviert, da du dem Setzen von Cookies bisher nicht zugestimmt hast.
Klicke oben rechts auf "Ja, klar!" und lade die Seite neu, um die Kommentare anzuzeigen.

Seite neu laden

👾 Magst du Kekse?

Ich würde gerne Cookies setzen

Ist das OK für dich?