Einleitung
Eines Tages genehmigte die Geschäftsleitung ein Experiment zur Einführung von IP-Telefonie in unserem Unternehmen. Da meine Erfahrung auf diesem Gebiet minimal war, weckte die Aufgabe mein großes Interesse und ich tauchte ein in das Studium verschiedener Aspekte des Themas. Nach dem Studium beschloss ich, mein erworbenes Wissen zu teilen — in der Hoffnung, dass es für jemanden nützlich sein wird. Also…
Stammdaten
Für die IP-Telefonanlage wurde Asterisk ausgewählt und implementiert. Der Telefonpark besteht aus Geräten von Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400 und Dlink DPH-150S(E)/F3, Yealink T19 und T21. Diese Vielfalt ist darauf zurückzuführen, dass im Rahmen des Experiments beschlossen wurde, alles ein wenig auszuprobieren, um sich eine eigene Meinung über das Verhältnis von Preis/Leistung/Komfort zu bilden.
Aufgabe
Den Prozess der Einrichtung neuer Geräte so einfach und einheitlich wie möglich zu gestalten. Alle Telefone müssen zeitlich synchronisiert sein und ein Telefonbuch haben, das von Server geladen wird und den Zugriff auf die Einstellungen für den Administrator ermöglicht.
Die Lösung dieser Aufgabe ist einfach — die automatische Konfiguration der Telefone, bekannt als Provisioning, umzusetzen. Tatsächlich wird es um meine Umsetzung dieser großartigen Funktion gehen.
Einrichtung von tftpd, dhcpd
Für die Bereitstellung der Einstellungen an die Telefone habe ich tftp als universelle Option gewählt, die von allen Plattformen unterstützt wird und einfach einzurichten und zu verwalten ist.
Eine spezifische Konfiguration für tftp war nicht erforderlich. Ich habe den standardmäßigen tftpd installiert und alle benötigten Dateien in seinem Stammverzeichnis abgelegt.
Die Konfigurationsdateien habe ich in Verzeichnissen entsprechend dem Hersteller des Telefons abgelegt. Allerdings wollte das Gerät von Cisco nicht in seinen Ordner zugreifen, sodass ich es im Stammverzeichnis aufbewahren musste.
Um den Telefonen den Standort des tftp-Servers anzugeben, habe ich option-66 verwendet. Zudem habe ich sie in separate Klassen nach Hersteller unterteilt. Jede Klasse erhielt ein eigenes Segment von Adressen und einen individuellen Ordner für die Konfigurationsdateien. Übrigens musste ich die Geräte von D-Link anhand ihrer MAC-Adressen ermitteln, da sie keine Herstellerinformationen in der dhcp-Anfrage bereitstellen.
Ausschnitt aus dhcpd.conf
# Указываем необходимые опции
option option-66 code 66 = text;
class "panasonic" {
match if substring (option vendor-class-identifier,0,9) = "Panasonic";
option option-66 "10.1.1.50/panasonic/";
}
class "cisco" {
match if substring (option vendor-class-identifier,0,36) = "Cisco Systems, Inc. IP Phone CP-7906";
option option-66 "10.1.1.50/cisco/";
}
class "grandstream" {
match if substring (option vendor-class-identifier,0,11) = "Grandstream";
option option-66 "10.1.1.50/grandstream/";
}
class "dlink" {
match if (binary-to-ascii (16,8,":",substring(hardware,1,4)) = "c8:d3:a3:8d") or
(binary-to-ascii (16,8,":",substring(hardware,1,4)) = "90:94:e4:72");
option option-66 "10.1.1.50/dlink/";
}
class "yealink" {
match if substring (option vendor-class-identifier,0,7) = "Yealink";
option option-66 "10.1.1.50/yealink/";
}
Die Telefone mussten zwangsweise aus dem allgemeinen Pool ausgeschlossen werden. Ansonsten wollten sie nicht in ihren "Froschteich" zurückkehren.
Beispiel für die Einstellungen des Subnetzes
Subnet 10.1.1.0 Netzmaske 255.255.255.0 {
Option Router 10.1.1.1;
Pool {
verweigern Mitglieder von "cisco";
verweigern Mitglieder von "panasonic";
verweigern Mitglieder von "dlink";
Bereich 10.1.1.230 10.1.1.240;
}
Pool {
erlauben Mitglieder von "cisco";
Bereich 10.1.1.65 10.1.1.69;
}
Pool {
erlauben Mitglieder von "panasonic";
Bereich 10.1.1.60 10.1.1.64;
}
Pool {
erlauben Mitglieder von "dlink";
Bereich 10.1.1.55 10.1.1.59;
}
}
Nach dem Neustart aller beteiligten Dienste haben die Telefone sicher die Einstellungen vom vorgesehenen TFTP-Server abgerufen. Es blieb nur noch, sie dort abzulegen.
Cisco 7906
Diese Geräte habe ich in derOriginalverpackung erhalten. Ich musste sie umflashen, um sie mit Asterisk kompatibel zu machen. Aber das ist eine eigene Geschichte. In diesem speziellen Fall habe ich gemäß der Anleitung im Wurzelverzeichnis des TFTP-Servers die Datei SEPAABBCCDDEEFF.cnf.xml erstellt. Wo AABBCCDDEEFF — die MAC-Adresse des Geräts ist.
Es wurde bereits mehrmals über die Konfiguration von Cisco-Telefonen geschrieben, daher lasse ich einfach die funktionierende Datei mit den Einstellungen hier.
Einstellungen für Cisco
true
SIP
root
ADMIN_PWD
D-M-Y
Zentralpazifische Zeit
10.1.1.4
Unicast
10.1.1.50
2000
5060
5061
10.1.1.50
Deaktivieren
120
true
x-cisco-serviceuri-cfwdall
x-cisco-serviceuri-pickup
x-cisco-serviceuri-opickup
x-cisco-serviceuri-gpickup
x-cisco-serviceuri-meetme
x-cisco-serviceuri-abbrdial
false
2
true
true
2
2
0
true
false
6
10
180
3600
5
120
120
5
500
4000
70
true
Keine
1
false
true
false
false
none
101
3
avt
3
false
false
Cisco Phone
2
false
15000
10
true
false
16384
32766
9
10.1.1.50
5060
2
3
false
3
4
5
true
true
false
true
Benutzer #103
103
103
SIP_PWD
$num
5060
184
0
dialplan.xml
*0#
true
2
false
false
1
0
1
0
0
0
1
0
1,7
09:00
12:00
01:00
1
2
10.1.1.50
0
100
50
0
0
5
1
10.1.1.50
0
0
0
0
0
0
1
1
1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37
Russisch_Russische_Föderation
ru_RU
utf-8
1
0
http://10.1.1.50/provisioning/cisco-services.xml
http://10.1.1.50/provisioning/cisco-services.xml
96
0
96
2
0
0
3804
<!-- 10.1.1.50 -->
false
1
D-Link DPH-150S/F3
Wenn Sie gerade erst ein Telefon dieser Serie erwerben möchten, achten Sie darauf, dass die automatische Konfiguration nur bei den Geräten 150S/F3 unterstützt wird. Bei dem Gerät 150S/F2, das mir in die Hände fiel, konnte ich diese Funktionalität nicht feststellen.
Die Konfigurationsdatei kann sowohl im XML-Format als auch in einfachem Textformat vorliegen. Für XML gibt es eine Vorgabe: Das Tag muss am Zeilenanfang stehen, andernfalls ignoriert der Parser es, und der Wert des entsprechenden Parameters bleibt unverändert.
Für die Einrichtung des Telefons werden zwei Dateien verwendet. f0D00580000.cfg — zur Speicherung der Einstellungen aller Telefone und 00112233aabb.cfg (MAC-Adresse in Kleinbuchstaben) für individuelle Einstellungen. Individuelle Einstellungen haben natürlich einen höheren Prioritätsgrad.
Der vollständige Satz an Einstellungen umfasst über tausend Zeilen. Um den Artikel nicht zu überfrachten, beschreibe ich nur das minimal notwendige Set an Einstellungen.
Pflichtfelder sind der Wurzelknoten VOIP_CONFIG_FILE und der darin enthaltene Knoten version. Die Einstellungen werden nur angewendet, wenn die Version der Datei höher ist als die der aktuellen Einstellungen im Gerät. Dieser Wert kann über das Web-Interface des Telefons im Abschnitt Wartung (Systemverwaltung) abgerufen werden. Für Telefone mit Werkseinstellungen beträgt dieser in beiden Fällen 2.0002. Darüber hinaus muss die Version der individuellen Datei höher sein als die der allgemeinen Datei.
Zuerst führe ich die Datei mit der allgemeinen Konfiguration für alle Telefone an. Im Wesentlichen speichert sie alle Einstellungen, die individuelle Datei ist nur für die Rufnummer und den Bildschirmtext verantwortlich.
In den beiden unten aufgeführten Blocken werden die Parameter der Zeitzone und der Zeitsynchronisation, der Ausgangsport für RTP sowie die Netzbrücke zwischen den WAN- und LAN-Anschlüssen des Geräts festgelegt.
Fragment№1
DHCP 2 1 1 0 VOIP 10000 200 10.1.1.4 1 0 60 12 1500 1 1
Die Bezeichnungen der Konfigurationsparameter sind eigentlich ziemlich „aussagekräftig“, sodass sie nicht ausführlich beschrieben werden müssen.
SIP für eine Leitung
5060 SIP1 10.1.1.50 5060 3600 1 10.1.1.50 1 0 G711A,G711U,G722
Einstellungen für die Fernsteuerung
23 80 0 443 1 0 Item1 10.1.1.152 10.1.1.160 Account1 admin ADMIN_PWD 10 Account2 guest GUEST_PWD 5
Telefoneinstellungen
123 0 112 Firma 5 1 30 0 1 0,,1 0 0 1 XML-PBook1 Telefonbuch http://10.1.1.50/provisioning/dlink-phonebook.xml : 0 0 freund,heim,arbeit,geschäft,kommilitone,kollege
Alle anderen Einstellungen bleiben „standardmäßig“. Jetzt wird jedes Dlink-Telefon, das mit dem Netzwerk verbunden ist, sofort eine gemeinsame Set von Parametern übernehmen. Um individuelle Einstellungen für das Gerät festzulegen, ist eine separate Datei erforderlich. In dieser müssen nur die erforderlichen Einstellungen für den einzelnen Abonnenten angegeben werden.
Abonnenteneinstellungen
2.0006 SIP1 Benutzer #117 117 5060 117 SIP_PWD 3600 1 5060 117 SIP_PWD
Panasonic UT-KX123B
Diese Geräte erhalten ihre Einstellungen nach einem etwas anderen Schema. Die Konfiguration wird in Textdateien gespeichert. Die maximale Größe der Konfigurationsdatei beträgt 120 KB. Unabhängig von der Anzahl der Dateien sollte deren Gesamtgröße 120 KB nicht überschreiten.
Die Konfigurationsdatei besteht aus einer Reihe von Zeilen, auf die die nachstehenden Bedingungen angewendet werden:
- Immer an erster Stelle steht eine Kommentarzeile, die die folgende Zeichensequenz (44 Byte) enthält:
# Panasonic SIP Phone Standard Format File #
Die hexadezimale Darstellung dieser Sequenz ist:
23 20 50 61 6E 61 73 6F 6E 69 63 20 53 49 50 20 50 68 6F 6E 65 20 53 74 61 6E 64 61 72 64 20 46 6F 72 6D 61 74 20 46 69 6C 65 20 23
Um eine unabsichtliche Änderung der festgelegten Zeichensequenz zu verhindern, wird empfohlen, die Konfigurationsdatei mit der Zeile zu beginnen:
# Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE! - Die Konfigurationsdateien müssen mit einer leeren Zeile enden.
- Jede Zeile muss mit der Sequenz "" enden.
- Die maximale Zeilenlänge beträgt 537 Byte, einschließlich der Sequenz "".
- Die folgenden Zeilen werden ignoriert:
- Zeilen, die das Limit von 537 Byte überschreiten;
- leere Zeilen;
- Kommentarzeilen, die mit dem Zeichen "#" beginnen;
- Die Zeile jedes Parameters wird in der Form XXX=«yyy» (XXX: Name des Parameters, yyy: sein Wert) geschrieben. Der Wert muss in Anführungszeichen eingeschlossen sein.
- Das Aufteilen der Parameterzeile in mehrere Zeilen ist nicht zulässig. Dies führt zu einem Verarbeitungsfehler der Konfigurationsdatei und in der Folge zu einem Fehler bei der Initialisierung.
- Einige Parameterwerte müssen separat für jede Leitung angegeben werden. Ein Parameter mit dem Suffix "_1" im Namen ist für Leitung 1; "_2" für Leitung 2 usw.
- Die maximale Länge des Parameternamens beträgt 32 Zeichen.
- Die maximale Länge des Parameterwerts beträgt 500 Zeichen, mit Ausnahme der Anführungszeichen.
- Leerzeichen in der Zeile sind nicht zulässig, es sei denn, der Wert enthält ein Leerzeichen.
- Einige Parameterwerte können 'leer' angegeben werden, um einen leeren Parameterwert festzulegen.
- Die Parameter werden ohne feste Reihenfolge angegeben.
- Wenn derselbe Parameter in der Konfigurationsdatei mehrmals aufgeführt ist, wird der zuerst angegebene Wert verwendet.
Eine so strenge Reihe von Anforderungen an die Konfigurationsdatei hat mich ehrlich gesagt enttäuscht. Meiner Meinung nach ist die Implementierung der Interaktion mit Server der Verwaltung bei Panasonic-Telefonen äußerst unpraktisch. In diesem Punkt ist das Telefon den anderen deutlich unterlegen.
Bei der ersten Einschaltung des Geräts (oder nach einem Zurücksetzen auf die Werkseinstellungen) versucht es, die sogenannte Produktdatei (in diesem Fall KX-UT123RU.cfg) zu laden, die die Pfade zu den anderen Konfigurationsdateien enthalten sollte.
Produktdatei# Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!
CFG_STANDARD_FILE_PATH="tftp://10.1.1.50/panasonic/{mac}.cfg"
CFG_PRODUCT_FILE_PATH="tftp://10.1.1.50/panasonic/KX-UT123RU.cfg"
CFG_MASTER_FILE_PATH="tftp://10.1.1.50/panasonic/master.cfg"
Danach zeigt das Telefon eine Nachricht über den erfolgreichen Abschluss der Vorbereitung an und wartet darauf, dass es neu gestartet wird. Nach dem Neustart beginnt es mit der Bearbeitung der vorgesehenen Konfigurationsdateien.
In der Datei master.cfg wird empfohlen, allgemeine Einstellungen für alle Telefone anzugeben. Wie im Fall von Dlink werde ich nur einige Parameter angeben. Die Namen der anderen Parameter und deren Werte finden Sie in der Dokumentation auf der Website des Herstellers.
master.cfg############################################################
# System Settings #
############################################################
## Login Account Settings
ADMIN_ID="admin"
ADMIN_PASS="ADMIN_PWD"
USER_ID="user"
USER_PASS="USER_PWD"
## System Time Settings
NTP_ADDR="10.1.1.4"
TIME_ZONE="660"
DST_ENABLE="N"
DST_OFFSET="60"
DST_START_MONTH="3"
DST_START_ORDINAL_DAY="2"
DST_START_DAY_OF_WEEK="0"
DST_START_TIME="120"
DST_STOP_MONTH="10"
DST_STOP_ORDINAL_DAY="2"
DST_STOP_DAY_OF_WEEK="0"
DST_STOP_TIME="120"
LOCAL_TIME_ZONE_POSIX=""
## Syslog Settings
SYSLOG_ADDR="10.1.1.50"
SYSLOG_PORT="514"
SYSLOG_EVENT_SIP="6"
SYSLOG_EVENT_CFG="6"
SYSLOG_EVENT_VOIP="6"
SYSLOG_EVENT_TEL="6"
## Provisioning Settings
OPTION66_ENABLE="Y"
OPTION66_REBOOT="N"
PROVISION_ENABLE="Y"
CFG_STANDARD_FILE_PATH="tftp://10.1.1.50/panasonic/{mac}.cfg"
CFG_PRODUCT_FILE_PATH="tftp://10.1.1.50/panasonic/KX-UT123RU.cfg"
CFG_MASTER_FILE_PATH="tftp://10.1.1.50/panasonic/master.cfg"
############################################################
# Network Settings #
############################################################
## IP Settings
CONNECTION_TYPE="1"
HOST_NAME="UT123"
DHCP_DNS_ENABLE="Y"
STATIC_IP_ADDRESS=""
STATIC_SUBNET=""
STATIC_GATEWAY=""
USER_DNS1_ADDR=""
USER_DNS2_ADDR=""
## DNS Settings
DNS_QRY_PRLL="Y"
DNS_PRIORITY="N"
DNS1_ADDR="10.1.1.1"
DNS2_ADDR=""
## HTTP Settings
HTTPD_PORTOPEN_AUTO="Y"
HTTP_VER="1"
HTTP_USER_AGENT="Panasonic_{MODEL}/{fwver} ({mac})"
HTTP_SSL_VERIFY="0"
CFG_ROOT_CERTIFICATE_PATH=""
## XML Application Settings
XML_HTTPD_PORT="6666"
XMLAPP_ENABLE="Y"
XMLAPP_USERID=""
XMLAPP_USERPASS=""
XMLAPP_START_URL=""
XMLAPP_INITIAL_URL=" "
XMLAPP_INCOMING_URL=""
XMLAPP_TALKING_URL=""
XMLAPP_MAKECALL_URL=""
XMLAPP_CALLLOG_URL=""
XMLAPP_IDLING_URL=""
XMLAPP_LDAP_URL="»
XMLAPP_LDAP_USERID=""
XMLAPP_LDAP_USERPASS=""
In der individuellen Konfigurationsdatei des Geräts bleiben traditionell nur die Benutzereinstellungen.
aabbccddeeff.cfgDISPLAY_NAME_1=„Benutzer #168“
PHONE_NUMBER_1=„168“
SIP_URI_1=„168“
LINE_ENABLE_1=„Aktiviert“
PROFILE_ENABLE_1=„Aktiviert“
SIP_AUTHID_1=„168“
SIP_PASS_1=„SIP_PWD“
Grandstream GXP-1400
Die Parameter dieser Telefone werden in einer XML-Datei mit dem Namen cfg{mac}.xml gespeichert oder in einer normalen Textdatei mit dem Namen cfg{mac}. Dieses Telefon fordert nur die individuelle Konfigurationsdatei an, daher ist es nicht möglich, die Einstellungen zu optimieren, indem man sie in eine gemeinsame Datei auslagert. Eine weitere Besonderheit bei der Konfiguration von Grandstream-Geräten ist die Benennung der Parameter. Alle sind nummeriert und werden als P### bezeichnet. Beispiel:
P1650 – verantwortlich für das Web-Interface zur Verwaltung des Telefons (0 – HTTPS, 1 – HTTP)
P47 – Adresse des SIP-Servers für die Verbindung.
Wenn die Konfiguration in einer Textdatei gespeichert ist, erfordert sie keine Gruppierung und kann in beliebiger Reihenfolge kommen. Zeilen, die mit # beginnen, werden als Kommentare betrachtet.
Falls die Einstellungen im XML-Format vorliegen, müssen sie in den Knoten eingebettet sein, der wiederum in eingebettet sein muss. Alle Parameter werden in Form entsprechender Tags mit dem Parameterwert innerhalb geschrieben.
Beispielkonfiguration
1
109
109
109
SIP_PWD
Benutzer# 109
10.1.1.50
2
10.1.1.50
0
ADMIN_PWD
USER_PWD
ru
0
10.1.1.50/grandstream
1
TZc-11
10.1.1.4
1
http://10.1.1.50/provisioning/grandstream
30
Yealink T19 und T21
Die Geräte dieser Modelle unterstützen individuelle Konfigurationsdateien für Geräte sowie allgemeine für Modelle. In meinem Fall musste ich die allgemeinen Parameter in den Dateien y000000000031.cfg und y000000000034.cfg unterbringen. Individuelle Konfigurationsdateien sind nach der MAC-Adresse benannt: 00112233aabb.cfg.
Die Einstellungen für Yealink-Geräte werden im Textformat gespeichert. Das einzige zwingende Erfordernis ist, dass die erste Zeile die Version der Datei im Format #!version:1.0.0.1 enthält.
Alle Parameter werden im Format Parameter = Wert geschrieben. Kommentare müssen mit dem Zeichen "#" beginnen. Die Namen der Parameter und deren Werte sind in der Dokumentation auf der Website des Herstellers zu finden.
allgemeine Einstellungen#!version:1.0.0.1
#Configure the WAN port type; 0-DHCP (default), 1-PPPoE, 2-Static IP Address;
network.internet_port.type = 0
#Configure the PC port type; 0-Router, 1-Bridge (default);
network.bridge_mode = 1
#Configure the access type of the web server; 0-Disabled, 1-HTTP & HTTPS(default), 2-HTTP Only, 3-HTTPS Only;
network.web_server_type = 3
#Configure the maximum local RTP port. It ranges from 0 to 65535, the default value is 11800.
network.port.max_rtpport = 10100
#Configure the minimum local RTP port. It ranges from 0 to 65535, the default value is 11780.
network.port.min_rtpport = 10000
security.user_name.admin = root
security.user_password = root:ADMIN_PWD
security.user_name.user = user
security.user_password = user:USER_PWD
#Specify the web language, the valid values are: English, Chinese_S, Turkish, Portuguese, Spanish, Italian, French, Russian, Deutsch and Czech.
lang.wui = Russisch
#Specify the LCD language, the valid values are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Russisch
#Configure the time zone and time zone name. The time zone ranges from -11 to +12, the default value is +8.
#The default time zone name is China(Beijing).
#Refer to Yealink IP Phones User Guide for more available time zones and time zone names.
local_time.time_zone = +11
local_time.time_zone_name = Wladiwostok
#Configure the domain name or the IP address of the NTP server. The default value is cn.pool.ntp.org.
local_time.ntp_server1 = 10.1.1.4
#Configure the logo mode of the LCD screen; 0-Disabled (default), 1-System logo, 2-Custom logo;
phone_setting.lcd_logo.mode = 1
#Configure the access URL and dispaly name of the remote phonebook. X ranges from 1 to 5.
remote_phonebook.data.1.url =
remote_phonebook.data.1.name = Telefonbuch
features.remote_phonebook.flash_time = 3600
Individuelle Einstellungen#!version:1.0.0.1
#Enable or disable the account1, 0-Disabled (default), 1-Enabled;
account.1.enable = 1
#Configure the label displayed on the LCD screen for account1.
account.1.label = Testtelefon
#Configure the display name of account1.
account.1.display_name = Benutzer 998
#Configure the username and password for register authentication.
account.1.auth_name = 998
account.1.password = 998
#Configure the register user name.
account.1.user_name = 998
#Configure the SIP server address.
account.1.sip_server_host = 10.1.1.50
#Specify the port for the SIP server. The default value is 5060.
account.1.sip_server_port = 5060
Dank der hervorragenden Auto-Provision-Funktion, die in den genannten Telefonen vorgesehen ist, gab es bei der Verbindung neuer Geräte mit dem Netzwerk keinerlei Probleme. Es ging lediglich darum, die MAC-Adresse des Telefons zu ermitteln und die Konfigurationsdatei anhand der Vorlage zu generieren.
Ich hoffe, dass Sie bis zum Ende durchgelesen haben und Nutzen aus dem Gelesenen ziehen konnten.
Danke für Ihre Aufmerksamkeit.
Quelle: habr.com
