DUNDi Netzübersicht

DUNDi Netzübersicht

SHORT ENGLISH VERSION: CLICK HERE

Einleitung

Im Hamnet gibt es seit einiger Zeit ein VoIP Netzwerk, welches mit SIP-fähigen Telefonen funkioniert. Es sind mittlerweile mehr als 10 Server Hamnet-weit aktiv. Damit man nicht nur die Teilnehmer auf seinem lokalen Server erreichen kann, wird DUNDi verwendet. Dieses Protokoll sorgt dafür, dass der lokale Server nachschaut, auf welchem entfernten Server der anzurufende Benutzer eingewählt ist. Das Gespärch wird dann über IAX zwischen den beiden Servern übertragen. Die Einrichtung der DUNDi-Verbindungen geschieht zur Zeit noch manuell durch Absprache zwischen den Betreibern der zu verbindenden Asterisk-Server.

Ziel

Das Ziel dieses Projektes ist es, eine automatisch generierte Übersicht des DUNDi-Netzwerkes im Hamnet zu erstellen, um einen einfachen Überblick über das Netz selbst und die Funktionsfähigkeit der Verbindungen zu erhalten.

Vorgehensweise

Bevor die Daten auf einer Kartenansicht dargestellt werden können, müssen natürlich zunächst jeweils aktuelle Daten beschafft werden. Dazu wurde von Ralf Wilke DH3WR ein Skript geschrieben, welches wie ein Crawler arbeitet. Der Algorithmus ist vereinfacht wie folgt:

  1. Finde in der hamnetdb alle Host, die das Schlüsselwort asterisk_dundi im Kommentartext stehen haben. Dieses Schlüsselwort würden wir gerne als eindeutiges Merkmal für am DUNDi-Netzwerk teilnehmende Hosts verwenden.
  2. Bestimme den FQDN jedes Hosts und sende eine HTTP-Anfrage an die Adresse: http://FQDN/dundi_show_peers.info . Nur wenn es keinen DNS-Eintrag gibt, verwende die IP. (So wollen wir auch virtuelle Webserver-Instanzen mit dem richtigen Request ansprechen). Beispiel: http://db0wa.ampr.org/dundi_show_peers.info.
  3. Erwarte als Antwort auf den HTTP-Request die Ausgaben des Kommandos asterisk -r -x 'dundi show peers' .
  4. Werte die Antwort aus und speichere die auf diesem Host eingetragenen DUNDi-Verbindungen und ihren Status.
  5. Füge alle Hosts, die in dieser Liste auftauchen und noch nicht bekannt sind, zur Host-Liste hinzu.
  6. Verfahre mit den neu gelernten Hosts genau so wie mit denen aus der hamnetdb.
  7. Finde den Standort aller bekannten Hosts aus der hamnetdb.
  8. Erzeuge eine JavaScript-Datei, die die Leaflet-API benutzt, um die Hosts auf der Karte darzustellen.
  9. Füge der Java-Script-Datei die Hosts und die Verbinungen als Line farbig entsprechend ihres Status zu.

Das Skript ist in der Beta-Testing Phase. Einen ersten Eindruck kann man hier gewinnen. Bei einer Client-IP aus dem Hamnet wird das Hamnet-Kachel-Cluster benutzt, sonst die Server von OpenStreetMap.

DUNDi Netzübersicht

Die Symbole wurden von hamnetdb.net benutzt. Entsprechende Rechte liegen bei Florian Radlherr.

Benötigte Aktionen zur Teilnahme

Nach einer Idee von Stefan Dambeck DC7DS wird die Status-Information des Asterisk-Servers über HTTP bekannt gegeben. Dies geschieht durch periodische Ausführung eines Bash-Skriptes, welches die Ausgabe des Astersik-DUNDi-Status in ein Ramdrive schreibt, welches dann in den Webspace eines http-Servers verlinkt ist.

Bash-Skript asterisk-status.sh

#!/bin/bash
# Asterisk Info prefetch by Ralf Wilke DH3WR, based on Stefan Dambeck DC7DS

# Short-Description: async. prefetch info asterisk
# To lower system load lock mechanism to prevent cpu hogging script loops
# using lock file im ramdisk
prefetchlock=/run/shm/asterisk-prefetch.lock

if [ -f "$prefetchlock" ]
then
    echo "prefetch in progress. exiting!"
    echo "execute rm $prefetchlock in case of unexpected behaviour!"
    exit 0
else
    touch $prefetchlock

    # asterisk
    asterisk -r -x 'core show channels' >/run/shm/core_show_channels.info
    asterisk -r -x 'sip show peers' | /bin/grep -v UNKNOWN >/run/shm/sip_show_peers.info
    asterisk -r -x 'dundi show peers' >/run/shm/dundi_show_peers.info

    #remove lockfile to unblock future batchruns
    rm -f $prefetchlock
fi

Dieses Skript wird periodisch in einer Endlos-Schleife aufgerufen.

Bash-Skript Endlosschleife prefetch-loop.sh

#!/bin/bash
# Endless loop to execute prefetch commands every 15 seconds

# set prefetch priority via nice
# prefetch should not impact other services
# -20=highst prio, 19=lowest
niceprio=19

# set script to be executed, path has to be adapted
prefetch_skript=/usr/local/scripts/sip/asterisk-status.sh

while [ "true" ]
do
    nice -n $niceprio $prefetch_skript
        sleep 15
done

Man erzeugt also diese beiden Dateien, speichert sie an einem Wunsch-Ort ab und macht sie ausführbar.

Neu: Download ist möglich:

sudo wget http://db0sda.ampr.org/dundicrawler/software/asterisk-status.sh
sudo wget http://db0sda.ampr.org/dundicrawler/software/prefetch-loop.sh

chmod 744 asterisk-status.sh
chmod 744 prefetch-loop.sh

Dann muss die Endlosschleife gestartet werden:

sudo ./prefetch-loop.sh &

Dies kann auch beim Start automatisiert werden. Eine weitere Lösung ist die über einen Cronjob, der aber beim Ausführen meist immer eine Logzeile erzeugt, die nicht notwendig ist. Vielleicht baut man sich das direkt in die /etc/init.d/astersik ein. Wir werden mal sehen, ob wir hier eine Version veröffentlichen.

Alternative zur prefetch-loop-Lösung

Michael DJ5KP macht uns darauf aufmerksam, dass man statt der Endlos-Schleife auch einen Cron-Job benutzen kann. Dazu ist folgender Eintrag in die /etc/crontab einzufügen:

# Minuetliches Bereitstellen der Asterisk Statistik
* * * * * root nice -n 19 /root/asterisk-status.sh > /dev/null 2>&1

Der Pfad zum Skript ist natrülich ggf. anzupassen.

Verfügbarmachen der Information über den Webserver

Damit der Crawler die Infos auch abrufen kann, muss man die erzeugten Dateien in den Webspace verlinken. Zum Beispiel so:

ln -s /run/shm/dundi_show_peers.info /var/www/dundi_show_peers.info
ln -s /run/shm/sip_show_peers.info /var/www/sip_show_peers.info
ln -s /run/shm/core_show_channels.info /var/www/core_show_channels.info

Natürlich muss man den Pfad /var/www/ evtl. an seinen Gegebenheiten anpassen.

Weitere wünschenswerte Info in standartisierter Form

Um Meta-Daten über den Asterisk-Server sammeln zu können, würden wir uns wünschen, dass jeder eine Text-Datei auf seinen Webspace unter der URL
http://FQDN/dundi.info
zur Verfügung stellt. Diese Datei soll aussehen wie folgt:

#Rufzeichen;IP des Asterisk-Servers;MAC des Asterisk-Servers;Names des Betreibers;Rufzeichen des Betreibers;Email des Betreibers
DB0WA;44.225.164.162;70:71:BC:A2:CA:EE;Ralf Wilke;DH3WR;Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!

Ziel wäre es, beim Crawler auch eine Liste der Ansprechpartner zu erstellen, um die Kontakt-Aufnahme der Sysops untereinander zu vereinfachen.

Geplante Erweiterungen in der Zukunft

  • Mehr Statusausgaben zu den Hosts und den DUNDi-Verbindungen (IP, DUNDi-Time, MAC beim Host, etc.)
  • Testing und Fehler abfangen
  • Anzeige der Legende in der Karte Fertig
  • Anzeige des Zeitpunkts der letzten Aktualisierung
  • Kachel-Quelle für die Karte entweder Hamnet-Kachel-Cluster oder Internet, je nachdem, mit welche IP die Anfrage kommt. Fertig

Download der Software

Nachdem die Veröffentlichung dieses Betrags viel Resonanz hervorgerunfen hat, bieten wir hier das Skript zum Download an. Eins direkt vorweg: Die verwendete Datenstruktur kann sicher optimiert werden. Wenn sich jemand mit Perl besser auskennt, gerne...

dundicrawler-0.19.zip

 

Wir freuen uns auf Kommentare zu diesem Projekt.

28.12.2015 Ralf Wilke DH3WR


Short English Manual to Setup your Astersik-Server to show correctly on the Map

1. Make directory /usr/local/scripts/sip (or any other location of your choice)

sudo mkdir /usr/local/scripts
sudo mkdir /usr/local/scripts/sip

2. Locate the two scripts in this directory or download them here:

cd /usr/local/scripts/sip
sudo wget http://db0sda.ampr.org/dundicrawler/software/asterisk-status.sh
sudo wget http://db0sda.ampr.org/dundicrawler/software/prefetch-loop.sh

3. Make them executable

sudo chmod 744 /usr/local/scripts/sip/asterisk-status.sh
sudo
chmod 744 /usr/local/scripts/sip/prefetch-loop.sh

4. Call the endless loop

sudo /usr/local/scripts/sip/prefetch-loop.sh &

5. Check what is your home directory of your webserver. A good guess is /var/www/. Let's take this as an example in the following lines. You can see this in the files in /etc/apache2/site-availabe/ on debian-based systems.

6. Make symbolic links inside of your webserver's root directory to the status files which are generated by the astersik-status.sh script.

sudo ln -s /run/shm/dundi_show_peers.info /var/www/dundi_show_peers.info
sudo ln -s /run/shm/sip_show_peers.info /var/www/sip_show_peers.info
sudo ln -s /run/shm/core_show_channels.info /var/www/core_show_channels.info

7. Check if it is working. You should see a text table with your DUNDi peers.

cat /run/shm/dundi_show_peers.info

8. Check if the file is avabilabe via your webserver. Take a browser and open http://your-hamnet-ip/dundi_show_peers.info

9. Provide contact information about your DUNDi peer, so that others can contact you easily. Make a file named dundi.info in your root webspace and put the following content into it. This is an example, please update it with you own data.

You can download an example file here dundi.info.

#Callsign;IP of Asterisk Server;MAC of Asterisk Server;Name of resonsible person;Callsign of resonsible person;Email of resonsible person
DB0WA;44.225.164.162;70:71:BC:A2:CA:EE;Ralf Wilke;DH3WR;Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!

 

Aktuelle Seite: Home Projekte Hamnet Infos für Betreiber DUNDi Netzübersicht