Bei der Entwicklung der Askozia-Telefonanlage standen wir vor der Aufgabe, die Telefone automatisch einzurichten und auf unsere eigene Weise zu lösen.
Autoprovisioning Plug & Play (PnP), diese Technologie wird von vielen Herstellern unterstützt - Yealink, Snom, Fanvil.
Die Hauptvorteile der automatischen Telefoneinstellungen:
- Erleichtert die Ersteinrichtung - Sie müssen nicht zur Weboberfläche jedes Geräts gehen. Es reicht aus, die Entsprechung der MAC-Adresse des Geräts und des Kontos auf dem Auto-Tuning-Server anzugeben.
- Vereinfacht die Unterstützung - es wird wirklich einfacher, wenn Sie Geräteeinstellungen ändern müssen. Wir steuern die Einstellungen erneut auf dem Server
- Es ist möglich, die Einstellung auf den Starcode-Satz „* 911 * <SIP_ACC>“ zu reduzieren - in einigen Fällen ist diese Funktion einfach nicht preislich. Nicht jeder Büroangestellte kann ein IP-Telefon konfigurieren, aber das Wählen einer Kombination von Nummern ist eine einfache Aufgabe.
Beschreiben wir, wie Autoprovisioning Plug & Play funktioniert.
Am Ende des Artikels ein Link zum Quellcode eines kleinen PHP-Skripts, das die Funktionalität des PnP-Servers implementiert.
Fallstudie
Wir hatten einen interessanten Fall, als wir einem unserer Kunden die Telefonie vorstellten. Das Hauptproblem war, dass der Kunde in einer anderen Stadt war. Gleichzeitig bestand eine der Anforderungen darin, dass die Telefonie sofort funktionieren sollte, nachdem das Paket mit den Telefonen ausgepackt und an das Netzwerk angeschlossen wurde.
Das Problem wurde relativ einfach gelöst. Der Kunde hat eine Reihe von IP-Adressen für uns reserviert. Wir stellten die Ausrüstung in unserem Büro auf, packten sie in eine Schachtel und schickten sie per Kurier.
Bei Verwendung der automatischen Gerätekonfiguration würde die Aufgabe viel einfacher.
Vereinfachtes PnP-Schema
Das zu Beginn der Arbeit eingestellte Telefon sendet eine Broadcast-
SIP- SUBSCRIBE- Anforderung an die Multicast-IP-Adresse
224.0.1.75 .
Lesen Sie mehr über 224.0.1.75224.0.1.75 - Dies ist eine Multicast-IP (für Multicasting), die für SIP-Server "reserviert" ist.
Siehe
Networksorcery.com/Enp/protocol/sip.htm224.0.1.75 SIP, Session Initiation Protocol (alle Server).
Als Antwort erwartet er eine
NOTIFY- Antwort mit Konfigurationsanweisungen.

Beispiel ABONNIEREN2019/09/02 09:26:41.543856 172.16.32.148:5059 -> 224.0.1.75:5060 SUBSCRIBE sip:MAC0015657322ff@224.0.1.75 SIP/2.0 Via: SIP/2.0/UDP 172.16.32.148:5059;branch=z9hG4bK42032775 From: <sip:MAC0015657322ff@224.0.1.75>;tag=42032772 To: <sip:MAC0015657322ff@224.0.1.75> Call-ID: 42032772@172.16.32.148 CSeq: 1 SUBSCRIBE Contact: <sip:MAC0015657322ff@172.16.32.148:5059> Max-Forwards: 70 User-Agent: Yealink SIP-T21P 34.72.14.6 Expires: 0 Event: ua-profile;profile-type="device";vendor="Yealink";model="T21D";version="34.72.14.6" Accept: application/url Content-Length: 0
Die wichtigsten und interessantesten Schlagzeilen
- Von - Die Mohnadresse des Geräts lautet 0015657322ff
- Ereignis - beschreibt umfassend das Gerät, den Hersteller, das Modell und die Firmware-Version
- Kontakt - Geräteadresse
- Anruf-ID - Dieser Header ist interessant bei der Konfiguration von DECT-Geräten über Yealink. Er überträgt die Leitungskennung (Röhrenseriennummer) und das Trennzeichen " _ ".
Sobald der PnP-Server eine solche Anfrage erhalten hat, sollte er antworten
NOTIFY Beispiel 2019/09/02 09:26:41.550125 172.16.32.153:57593 -> 172.16.32.148:5059 NOTIFY sip:172.16.32.148:5059 SIP/2.0 Via: SIP/2.0/UDP 172.16.32.148:5059;branch=z9hG4bK42032775 Max-Forwards: 20 Contact: <sip:172.16.32.148:5059;transport=UDP;handler=dum> From: <sip:MAC0015657322ff@224.0.1.75>;tag=42032772 To: <sip:MAC0015657322ff@224.0.1.75> Call-ID: 42032772@172.16.32.148 CSeq: 3 NOTIFY Content-Type: application/url Subscription-State: terminated;reason=timeout Event: ua-profile;profile-type="device";vendor="MIKO";model="MikoServerPnP";version="1.8" Content-Length: 40 http://172.16.32.153:84/0015657322ff.cfg
In einer NOTIFY-Nachricht befinden sich die wertvollsten Informationen im Nachrichtentext. In der Regel müssen Sie im Body einen Link übergeben, um die Konfigurationsdatei zu erhalten:
http://172.16.32.153:84/0015657322ff.cfg
Wenn mehrere PnP-Server im Netzwerk ausgeführt werden, wird es von demjenigen konfiguriert, der als erster auf das Gerät reagiert.
Das Telefon versucht nach Erhalt von NOTIFY, die Anforderung an die angegebene Adresse zu erfüllen.
Beispiel für eine Serveranforderung und -antwort # curl -i http://172.16.32.153:84/0015657322ff.cfg HTTP/1.0 200 OK Content-type: text/plain Date: Mon, 02 Sep 2019 06:52:23 GMT Connection: close Accept-Ranges: bytes Last-Modified: Mon, 02 Sep 2019 06:25:02 GMT Content-length: 769 #!version:1.0.0.1 account.1.enable = 1 account.1.label = PnP (203) ...
Eine Beispielimplementierung des Servers finden Sie unter github
https://github.com/boffart/MikoServerPnPDamit dieser PnP-Server funktioniert, müssen Sie:
- PHP 7.1.9
- PHP-Steckdosen
- BusyBox v1.26.2
- Broadcast-Anforderungen müssen im Netzwerk zulässig sein
PnP-Serverfunktionen
- Hört Anfragen an, die an die Adresse ' 224.0.1.75:5060 ' gesendet wurden.
- Wenn es startet, startet es den Webserver ( Busybox httpd )
- Ermöglicht das Erstellen einer vereinfachten Telefonkonfiguration
- Ermöglicht das Senden an Yealink NOTIFY zum Neustart
Durch die Verwendung eines PnP-Servers können Sie "Einmalige Links" verwenden.
Angenommen, wir geben die Datei über den Link an:
http://172.16.32.153:84/0015657322ff.cfg
Der übliche direkte Link zur Datei. Offensichtlich ist dies NICHT sicher. Wenn Sie die MAC-Adresse des Telefons und die Serveradresse kennen, können Sie versuchen, eine Konfiguration mit Anmeldungen und Kennwörtern zu erhalten.
Bei der Arbeit mit einem PnP-Server kann für jede SUBSCRIBE-Anforderung ein eindeutiger Link angegeben werden:
http://172.16.32.153:84/?mac=0015657322ff&hash=0a67f5290
Ein Beispiel für eine Formel zur Berechnung eines Hash:
hash = md5(MAC + DATE + PID)
PID ist die Prozess-ID des PnP-Servers. Nur
root kann es erkennen.
Einen solchen
Hash zu wählen
ist praktisch unmöglich.
Wenn ein Einspruch über einen ungültigen Link erfolgt, verbieten wir den Schädling.
Yealink NOTIFY neu starten bedeutet ohne Autorisierung
Ja, ja,
ohne Genehmigung .
Ich konnte das Gerät aus der aktuellen Version der Firmware von dieser Möglichkeit nicht schließen.
Führen Sie einfach den Befehl aus
php -f MikoServerPnP.php socket_client_notify <IP_PBX> <PORT_SIP_PBX> <IP_PHONE> <PORT_PHONE>
Und das Telefon wird neu gestartet. Wenn Sie einen solchen Befehl in cron hängen, können Sie einen schrecklichen Effekt erzielen. Dies ist natürlich möglich, wenn wir die IP-Adresse und den SIP-Port des Telefons kennen.
Eine Beispiel-PHP-Funktion zum Senden von NOTIFY public static function socket_client_notify($ip_pbx, $port_pbx, $ip_phone, $port_phone):void { $phone_user = 'autoprovision_user'; $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); $msg = "NOTIFY sip:{$phone_user}@{$ip_phone}:{$port_phone};ob SIP/2.0\r\n". "Via: SIP/2.0/UDP {$ip_pbx}:{$port_pbx};branch=z9hG4bK12fd4e5c;rport\r\n". "Max-Forwards: 70\r\n". "From: \"asterisk\" <sip:asterisk@{$ip_pbx}>;tag=as54cd2be9\r\n". "To: <sip:{$phone_user}@{$ip_phone}:{$port_phone};ob>\r\n". "Contact: <sip:asterisk@{$ip_pbx}:{$port_pbx}>\r\n". "Call-ID: 4afab6ce2bff0be11a4af41064340242@{$ip_pbx}:{$port_pbx}\r\n". "CSeq: 102 NOTIFY\r\n". "User-Agent: mikopbx\r\n". "Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE\r\n". "Supported: replaces, timer\r\n". "Subscription-State: terminated\r\n". "Event: check-sync;reboot=true\r\n". "Content-Length: 0\r\n\n"; $len = strlen($msg); socket_sendto($sock, $msg, $len, 0, $ip_phone, $port_phone); socket_close($sock); }
PnP-Serverkonfiguration
Befindet sich in
settings / settings.json { "url": "http://<pbx_host>:<http_port>/", "http_port": 84, "pbx_host": "172.16.32.153", "pbx_sip_port": "5060", "vm_extension": "*001", "feature_transfer": "**" }
MAC-Whitelist
Kann in
settings / mac_white.conf beschrieben werden . Separator - Zeilenvorschub.
MAC Blacklist
Kann in
settings / mac_black.conf beschrieben werden . Separator - Zeilenvorschub.
Telefonkonfigurationsdateien
Muss im
Konfigurationsverzeichnis abgelegt werden .
Mit dem PnP-Server können Sie die einfachsten Konfigurationen für Yeakink und Snom erstellen:
php -f MikoServerPnP.php mk_config SIP_ACCAUNT SECRET MAC
Nützliche Materialien