
Notfunk-Telefonanlage
Installation

Voraussetzung für die Installation der Telefonanlage ist ein Rechner, wie zum Beispiel ein Intel NUC mit einem installierten Betriebssystem, sowie einer funktionierenden Docker Installation. Diese Installationsanleitung basiert auf einem System mit frisch installiertem Ubuntu 22.04 Server.
Für die Installation ist eine Verbindung zum Hamnet oder zum Internet notwendig, damit die notwendigen Docker Container heruntergeladen werden können. Je nach Geschwindigkeit eurer Hamnet Anbindung, kann es sinnvoll sein, diese während der ersten Installation abzuschalten, damit der Download der Daten schneller über das Internet läuft.
1. Schritt: Installation von Docker

1. Schritt: Installation von Docker
Die Installation von Docker unter Ubuntu folgt der Anleitung, welche auch direkt auf der Docker Seite nachgelesen werden kann.
1.1 alte Docker Versionen entfernen
Im ersten Schritt müssen eventuell vorhandene alte Docker Versionen vom System entfernt werden, so dass die aktuelle Version installiert werden kann.
$ sudo apt remove docker docker-engine docker.io containerd runc
Eine Fehlermeldung, dass die besagten Pakete nicht gefunden wurden ist in Ordnung, da dann die Pakete nicht installiert sind.
1.2 Docker Repository einbinden
Für die Installation von Docker verwenden wir das offizielle Repository. Hierdurch werden zu einem späteren Zeitpunkt auch automatisch Updates installiert. Damit, wir das Repository verwenden können, müssen grundlegende Programme auf dem System vorhanden sein. Diese werden mit folgenden Befehl installiert.
$ sudo apt install ca-certificates curl gnupg lsb-release nano
Damit die Pakete aus dem Deocker Repository verifiziert werden können, muss im nächsten Schritt der Schlüssel des Repositories lokal gespeichert werden.
$ sudo mkdir -p /etc/apt/keyrings $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Nun kann das Repository eingebunden und die Datenbank der vorhandenen Pakete aktualisiert werden.
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ sudo apt update
1.3 Docker installieren
Nachdem alle Vorbereitungen getroffen wurden, können die notwendigen Pakete für Docker installiert werden.
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
1.4 Berechtigungen setzen
Damit der aktuell angemeldete Benutzer den Docker Daemon administrieren kann, fehlen ihm noch bestimmte Berechtigungen. Diese erhält er, in dem er der Gruppe der Docker Nutzer hinzugefügt wird. Dies erledigt der folgende Befehl:
$ sudo usermod -aG docker $USER
1.5 Docker Konfiguration anpassen
Da im Hamnet keine Verschlüsselung erfolgen darf, muss dem Docker System noch mitgeteilt werden, dass die Kommunikation zu unseren System auch unverschlüsselt erfolgen darf. Hierzu muss eine Einstellung in der Konfiguration von Docker gesetzt werden. Danach muss der Docker Daemon neu gestartet werden.
$ sudo mkdir /etc/docker $ echo -e "{\n \"insecure-registries\": [\"registry.emcom.io:81\"]\n}" | sudo tee /etc/docker/daemon.json > /dev/null $ sudo service docker restart
Nach einem erneuten Einloggen, kann der aktuelle Benutzer nun den Docker Daemon verwalten und die Vorbereitungen für die Telefonanlage sind abgeschlossen.
1.6 DNS Einstellungen anpassen
Für den ordnungsgemässen Betrieb muss das System in der Lage sein, Docker-Container-Images herunterzuladen und sich am Telefonie-Core anzumelden.
Da unter normalen Umständen nicht sichergestellt ist, dass ein DNS-Name zu jeden Zeitpunkt sowohl im Hamnet als auch im Internet auflösbar ist, stehen dafür eigene DNS-Resolver im Hamnet bereit.
Diese können wie folgt auf der Telefonanlage konfiguriert werden:
$ echo -e "[Resolve]\nDNS=44.148.228.53 9.9.9.9 8.8.8.8\nDomains=~emcom.io" | sudo tee /etc/systemd/resolved.conf $ sudo reboot
2. Schritt: Erzeugen der Konfiguration

2. Schritt: Erzeugen der Konfiguration
Nachdem im vorherigen Schritt alle Voraussetzungen geschaffen wurden, damit die Telefonanlage installiert werden kann, erstellen wir in diesem Schritt die notwendigen Konfigurationsdateien und starten die Anlage das erste mal.
2.1 Verzeichnisse vorbereiten
Um die Telefonanlage zu betreiben, bedarf es eines Ordners in dem die Konfigurationsdateien und eventuelle Daten der Anlage gespeichert werden.
$ sudo mkdir -p /opt/docker/nfpbx
2.2 Konfiguration erstellen
Um die Erstellung der Konfiguration für die Telefonanlagen möglichst einfach zu gestalten, haben wir einen Generator (Anmeldung via SSO erforderlich) entwickelt, welcher alle notwendigen Dateien generiert. Nach der Anmeldung und der Besätigung generiert der Konfigurator zwei unterschiedliche Dateien, welche wir in den oben erstellten Ordner speichern müssen. Am einfachsten ist es hierbei, die beiden Links am Ende des Konfigurators mit der rechten Maustaste zu markieren und dann zu kopieren um sie in die Befehle unten einzusetzen.
$ sudo wget -O /opt/docker/nfpbx/docker-compose.yaml LINK_ZUR_ERZEUGTEN_DOCKER_COMPOSE_YAML $ sudo wget -O /opt/docker/nfpbx/.env LINK_ZUM_ERZEUGTEN_ENV_FILE
2.3 Konfiguration anpassen
Die nun erzeugten Dateien können nahezu 1:1 übernommen werden um die Telefonanlage zu betreiben. Beim Starten der Telefonanlage wird im Normalfall (LOCAL_V4=auto) die IP-Adresse des Hosts verwendet, über die auch das default Gateway erreichbar ist.
Dies sollte für die meisten Szenarien auch korrekt sein.
Für den Fall, dass die PBX auf einer anderen IP-Adresse lauschen soll, ist er erforderlich, den Parameter LOCAL_V4 in der Datei /opt/docker/nfpbx/.env entsprechend anzupassen. Hierzu die Datei in einem Editor öffnen, zum Beispiel mit nano, und dann in der 5. Zeile den Eintrag 'auto' gegen die korrekte IP des Rechners austauschen und mit STRG+X die Datei wieder verlassen und dabei speichern.
$ sudo nano /opt/docker/nfpbx/.env
2.4 Telefonanlage starten
Nun kann die Telefonanlage gestartet werden. Der erste Start kann einige Minuten dauern, da das System sich die notwendigen Daten aus dem Hamnet oder dem Internet zieht und dann die Anlage startet. Der Download ist nur bei der ersten Installation und bei Updates notwendig.
$ cd /opt/docker/nfpbx $ docker compose pull $ docker compose up -d
2.5 Prüfen der Installation
Nachdem alle Schritte durchgeführt werden, sollte die Telefonanlage nun laufen. Dies kann mit dem folgenden Befehl geprüft werden.
$ docker inspect -f '{{.State.Status}}' pbx
Siehe hierzu auch den Eintrag im Bereich Wichtige Befehle.
3. Schritt: Einbindung der Telefonanlage in AREDN (Optional)

3. Schritt: Einbindung der Telefonanlage in AREDN (Optional)
Um die Telefonanlage in Kombination mit einem AREDN-Knoten für den Betrieb einzurichten sind die nachfolgenden Schritte notwendig. Für die Einrichtung empfiehlt sich neben dem AREDN-Knoten und der Telefonanlage ein weiterer Rechner um via Browser auf den AREDN-Knoten zugreifen zu können.
3.1 Einrichtung der Telefonanlage als DHCP-Client
Die Telefonanlage soll ihre IP-Adresse via DHCP vom AREDN-Knoten beziehen. Falls dies nicht bereits der Fall ist, lässt sich eine Netzwerkkarte wie folgt für DHCP einrichten.
Anlegen einer Datei '/etc/netplan/99_config.yaml' mit folgendem Inhalt für bspw. die Netzwerkkarte 'enp3s0':
$ sudo nano /etc/netplan/99_config.yaml
Inhalt:
network: version: 2 renderer: networkd ethernets: enp3s0: dhcp4: true
Im Anschluss muss die Konfiguration noch aktiviert werden:
$ sudo netplan apply
3.2 Hostname auf 'pbx' setzen
Damit die Telefonanlage sich auch als 'pbx' beim DHCP-Server meldet muss der Hostname auf 'pbx' gesetzt werden:
$ sudo hostnamectl set-hostname pbx $ sudo reboot
3.3 Verbinden der Telefonanlage mit dem AREDN-Knoten
Falls nicht bereits der Fall, kann die Telefonanlage nun mit einem Ethernet-Kabel mit dem AREDN-Knoten verbunden werden. Nach einigen Sekunden sollte der Netzwerkkarte nun eine IP-Adresse vom AREDN-Knoten zugeteilt worden sein.
Dies lässt sich wie folgt überprüfen:
$ ip address show enp3s0 enp3s0:mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:80:c8:3b:e6:9e brd ff:ff:ff:ff:ff:ff inet 10.55.4.36/27 brd 10.55.4.63 scope global dynamic noprefixroute enx0080c83be69e valid_lft 3379sec preferred_lft 3379sec inet6 fe80::280:c8ff:fe3b:e69e/64 scope link noprefixroute valid_lft forever preferred_lft forever
Hier sieht man, dass die Netzwerkkarte enp3s0 mit der IP-Adresse 10.55.4.36 aktiviert wurde.
3.4 Fixieren der IP-Adresse und des DNS-Names
Mit einem Browser kann via http://localnode.local.mesh/ auf das Webinterface des AREDN-Knoten zugegriffen werden. Dabei muss der dafür verwendete Rechner natürlich ebenfalls mit dem AREDN-Netzwerk verbunden sein.
Über einen Klick auf 'Setup + Login' gelangt man nach erfolgreicher Anmeldung in den Administrationsbereich des AREDN-Knoten. Unter 'Port Forwarding, DHCP, and Services' finden sich die Einstellungen für den DHCP-Server.
Wenn die DHCP-Einrichtung der Telefonanlage erfolgreich war, taucht links unter 'Current DHCP Leases' ein Eintrag 'pbx' auf. Mit einen Klick auf den zugehörigen 'Add' Button kann die Kombination aus MAC- und IP-Adresse sowie des Hostnamens gespeichert werden.

3.5 Konfiguration der Telefonanlage
Die vom AREDN-Knoten via DHCP verteilte IP-Adresse muss nun in der Datei '/opt/docker/nfpbx/.env' unter LOCAL_V4 eingetragen werden.
$ sudo nano /opt/docker/nfpbx/.env
3.6 vorhandene NTP-Services deaktivieren (Optional)
Das Telefonanlagen-Setup beinhaltet u.a. einen Zeitserver als Zeitquelle für die Telefone. Für die ordnungsgemäße Funktion darf kein anderer Server den Port 123/udp verwenden.
Das kann wie folgt geprüft werden:
$ sudo ss -tulpen|grep 123 udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:* users:(("chronyd",pid=279853,fd=7)) ino:2910527 sk:4001 cgroup:/system.slice/chrony.service <->
In diesem Beispiel sieht man, dass der Service chrony den Port 123/udp verwendet.
Das lässt sich wie folgt ändern:
$ sudo systemctl stop chrony.service $ sudo systemctl disable chrony.service
4. Schritt: Konfiguration eines Snom-Telefons

4. Schritt: Konfiguration eines Snom-Telefons
Damit die Telefone automatisch mit passenden Benutzerinformationen sowie Telefonbuch versorgt werden können, muss im Telefon die Adresse eines Provisionierungsservers hinterlegt werden. Da die Einrichtung entsprechender DHCP-Parameter auf den AREDN Nodes aktuell umständlich und damit fehleranfällig ist, erfolgt die initiale Einrichtung (einmalig) manuell. Wenn es sich um ein bereits verwendetes Telefon handelt, empfiehlt es sich das Telefon als erstes auf Werkseinstellungen zurückzusetzen:
Telefon durch Eingabe von '**##' rebooten -> Beim Starten des Telefons '#' gedrückt halten bis das Rescue Menü erscheint -> '1' drücken
Unter service.snom.com finden sich weiterführende Informationen zu dem Thema.
Als nächstes wird die IP-Adresse des Telefons benötigt, um dann via Webbrowser die Adresse des Provisionierungsserver setzen können:
Menü -> Informationnen -> Systeminformation -> IP Adr.
Über die dort angezeigte IP-Adresse kann mit einem Webbrowser auf das Konfigurationsfrontend des Telefons zugegriffen werden. (siehe Bild 1)
Im Menü "Erweitert" findet sich der Reiter "Update" (siehe Bild 2). Dort ist bei Setting-URL die IP-Adresse oder der DNS-Name der PBX (mit http:// am Anfang) einzutragen. Also bspw. http://pbx.local.mesh/snom. Wichtig: Ohne 'http://' versucht das Telefon das Provisioning via TFTP zu erreichen, was nicht funktioniert!
Mit einem Klick auf "Übernehmen" wird der Parameter gespeichert. Wenn das Telefon nun neu gestartet wird, wird es versuchen von der hinterlegten Adresse seine Einstellungen zu beziehen.
Diese Einstellung ist nur einmalig bei jedem Telefon vorzunehmen. Danach werden die Telefone automatisch von der Telefonanlage provisioniert.
Nach der erfolgreichen Provisionierung lauten die Zugangsdaten für den Zugriff auf das Snom Webinterface wie folgt:
Benutzer: snom
Passwort: notfunk
Administratorpasswort: notfunkadmin
Thomas (DF2TH) hat ein Video mit den notwendigen Schritten gedreht und auf YouTube zur Verfügung gestellt: Snom 370 resetten und zur Notfunk PBX hinzufügen
5. Schritt: Einrichten der ersten Nebenstelle

5. Schritt: Einrichten der ersten Nebenstelle
Wenn die Telefonanlage und alle notwendigen Dienste eingerichtet sind und laufen, können vorbereitete Telefone am Mesh Netzwerk angeschlossen werden. Neu angeschlossene Telefone werden automatisch mit fortlaufenden Durchwahlen - von 10 an - eingerichtet und können so auch bereits benutzt werden.
Sobald diese automatische Einrichtung erfolgt ist, kann bei Bedarf der Name oder die Durchwahl der Nebenstelle angepasst werden.
Über http://pbx.mesh.local:3333/ kann dafür auf das Konfigurationsinterface der Telefonanlage zugegriffen werden. Die für den Zugriff erforderlichen Anmeldedaten finden sich in der Datei '/opt/docker/nfpbx/.env' unter BE_USER und BE_PASS.
Nach der Anmeldung befindet man sich im Dashboard mit einer Übersicht von aktuell angemeldeten Telefone sowie laufenden Gesprächen. Durch Auswahl einer Nebenstelle links im Menü können Parameter wie der Name, die Durchwahl oder das Passwort der Nebenstelle angepasst werden. Diese Daten können auch verwendet werden um Telefone anderer Hersteller oder Softphones an die Telefonanlage anzubinden.
Zur Zeit werden die SNOM Telefone alle 30 Sek. aktualisiert, d.h. dass es bspw. nach dem Anpassen eines Namens bis zu 30. Sek. dauern kann, bis die Anzeige auf dem betroffenen Telefon oder das Telefonbuch von anderen Telefonen aktualisiert werden.