VoIP-dierenpark — Provisioning

Inleiding

Op een dag gaf het management groen licht voor een experiment met de implementatie van IP-telefonie in ons bedrijf. Aangezien mijn ervaring op dit gebied minimaal was, wekte de taak enorme interesse in mij en dompelde ik me onder in het bestuderen van verschillende aspecten van de kwestie. Na het voltooien van mijn onderdompeling besloot ik mijn verworven kennis te delen, in de hoop dat het iemand zou helpen. Dus…

Brongegevens

Als IP-telefooncentrale is Asterisk gekozen en uitgerold. Het telefoonpark bestaat uit Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400 en Dlink DPH-150S(E)/F3, Yealink T19 en T21. Deze verscheidenheid is te wijten aan het feit dat we tijdens het experiment hebben besloten om uit verschillende opties te proberen, om een eigen mening te vormen over de verhouding prijs/kwaliteit/gebruiksgemak.

Task

Maximaal vereenvoudigen en uniformiseren van het instellen van nieuwe apparaten. Alle telefoons moeten tijdsynchronisatie hebben, beschikken over een telefoonboek dat wordt geladen vanuit de server en toegang tot de instellingen bieden voor de administrator.

De oplossing voor deze taak is eenvoudig — implementeer automatische configuratie van de telefoons, de zogenaamde Provisioning. Eigenlijk zal ik het hebben over mijn implementatie van deze geweldige functie.

Instelling tftpd, dhcpd

Voor het verstrekken van instellingen aan de telefoons heb ik tftp gekozen als een universele optie die door alle platforms wordt ondersteund, eenvoudig te configureren en te beheren.

Specifieke configuratie voor tftp was niet nodig. Ik installeerde de standaard tftpd en plaatste alle noodzakelijke bestanden in de hoofddirectory.
Ik heb de configuratiebestanden in mappen geplaatst op basis van de fabrikant van de telefoon. De Cisco-apparaten konden echter niet in hun eigen map terecht, dus moest ik ze in de hoofddirectory bewaren.

Om de telefoons de locatie van de tftp-server aan te geven, gebruikte ik option-66. Daarnaast heb ik ze verdeeld in aparte klassen op basis van de fabrikant. Elke klasse kreeg een eigen adressegment en een individuele map voor configuratiebestanden. Übrigens, de apparaten van D-link moesten via MAC-adressen worden geïdentificeerd, omdat ze geen informatie over de fabrikant in het dhcp-verzoek verstrekten.

Fragment van 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/";
        }

De telefoons moesten handmatig uit de algemene pool worden verwijderd. Anders wilden ze niet naar hun ‘kikkerbad’ gaan.
Voorbeeld van netwerkinstellingen

subnet 10.1.1.0 netmask 255.255.255.0 {
        option routers 10.1.1.1;
        pool {
                deny members of "cisco";
                deny members of "panasonic";
                deny members of "dlink";
                range 10.1.1.230 10.1.1.240;
        }
        pool {
                allow members of "cisco";
                range 10.1.1.65 10.1.1.69;
        }
        pool {
                allow members of "panasonic";
                range 10.1.1.60 10.1.1.64;
        }
        pool {
                allow members of "dlink";
                range 10.1.1.55 10.1.1.59;
        }
}

Na het opnieuw opstarten van alle betrokken services gingen de telefoons vol vertrouwen naar de toegewezen tftp-server voor instellingen. Het enige dat nog resteerde, was om ze daar te plaatsen.

Cisco 7906

Deze apparaten kregen ik in de fabrieksverpakking. Ik moest ze opnieuw configureren om ze met Asterisk te laten werken. Maar dat is een ander verhaal. In dit specifieke geval heb ik, volgens de instructies, een bestand SEPAABBCCDDEEFF.cnf.xml gemaakt in de root van de tftp-server. Waarbij AABBCCDDEEFF het MAC-adres van het apparaat is.

Er is al verschillende keren over de configuratie van Cisco-telefoons geschreven, dus ik laat gewoon het werkende configuratiebestand achter.
Instellingen voor Cisco

true
 SIP
 root
 ADMIN_PWD

 
 D-M-Y
 Centraal Standaard Tijd van de Stille Oceaan
     
         
             10.1.1.4
              Unicast
          
     
 

   
 10.1.1.50
 
 2000
 5060
 5061
 
 10.1.1.50
   
 

 Uitschakelen


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
 Geen
 
1
 false
 true
 false
 false
 geen
 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
 

 Gebruiker #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_Federatie
 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

Als u van plan bent een telefoon uit deze serie aan te schaffen, wees dan voorzichtig, want de auto-configuratie wordt alleen ondersteund op de apparaten 150S/F3. Op het apparaat 150S/F2 dat ik in handen had, vond ik deze functionaliteit niet.

Het configuratiebestand kan zowel in xml-formaat als in gewoon tekstformaat zijn. Voor xml geldt één vereiste: de tag moet aan het begin van de regel staan, anders negeert de parser deze en wordt de waarde van de betreffende parameter niet veranderd.

Voor het instellen van de telefoon worden twee bestanden gebruikt. f0D00580000.cfg — voor het opslaan van de instellingen van alle telefoons en 00112233aabb.cfg (MAC-adres in kleine letters) voor individuele instellingen. Individuele instellingen hebben natuurlijk een hogere prioriteit.

De volledige set instellingen omvat meer dan duizend regels; om het artikel niet te overladen, beschrijf ik de minimale set noodzakelijke instellingen.

Verplichte elementen zijn de wortelnode VOIP_CONFIG_FILE en de ingesloten node version. De instellingen worden alleen toegepast als de versie van het bestand hoger is dan die van de huidige instellingen op het apparaat. Deze waarde kan worden achterhaald via de webinterface van de telefoon in de sectie onderhoud (systeembeheer). Voor telefoons met fabrieksinstellingen is dit in beide gevallen 2.0002. Bovendien moet de versie van het individuele bestand hoger zijn dan die van het algemene bestand.

Eerst geef ik het bestand met de algemene configuratie voor alle telefoons. In wezen bevat het alle instellingen; het individuele bestand is alleen verantwoordelijk voor het telefoonnummer en de tekst op het scherm.

In de twee onderstaande blokken worden de parameters voor de tijdzone en tijdsynchronisatie ingesteld, de beginpoort voor RTP en wordt de netwerkkoppeling tussen de WAN- en LAN-aansluitingen van het apparaat ingeschakeld.

Fragment№1

DHCP
2
1
1
0
VOIP
10000
200
10.1.1.4
1


0
60
12
1500


1
1

De namen van de configuratieparameters zijn duidelijk genoeg om ze niet in detail te hoeven beschrijven.
SIP voor één lijn

5060


SIP1
10.1.1.50
5060
3600
1
10.1.1.50
1
0
G711A,G711U,G722

Instellingen voor externe bediening

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

Telefooninstellingen

123
123

0
112
Bedrijf
5
1
30
0

1
0,,1
0
0
1


XML-PBook1
Telefoonboek
http://10.1.1.50/provisioning/dlink-phonebook.xml
:
0
0


vriend,thuis,werk,zakelijk,klasgenoot,collega

Alle andere instellingen blijven "standaard". Nu zal elke Dlink-telefoon die op het netwerk is aangesloten onmiddellijk een gezamenlijke set parameters aannemen. Om individuele parameters voor het toestel in te stellen, is een apart bestand nodig. Alleen de noodzakelijke instellingen voor de afzonderlijke abonnee moeten daarin worden opgegeven.
abonnee-instellingen

2.0006



SIP1
Gebruiker #117
117
5060
117
SIP_PWD
3600
1
5060
117
SIP_PWD

Panasonic UT-KX123B

Deze apparaten ontvangen instellingen op een iets andere manier. De configuratie wordt opgeslagen in tekstbestanden. De maximale grootte van het configuratiebestand bedraagt 120 KB. Ongeacht het aantal bestanden mag de totale grootte ervan niet meer dan 120 KB zijn.
Het configuratiebestand bestaat uit een reeks regels waaraan de onderstaande voorwaarden zijn verbonden:

  • Altijd begint de eerste regel met een commentaarregel die de volgende reeks tekens bevat (44 bytes):
    # Panasonic SIP Phone Standard Format File #
    Hexadecimale weergave van deze reeks:
    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
    Om onbedoelde wijziging van de vastgestelde reeks tekens te voorkomen, wordt aangeraden het configuratiebestand te beginnen met de regel:
    # Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!
  • Configuratiebestanden moeten eindigen met een lege regel.
  • Elke regel moet eindigen met de reeks "".
  • De maximale lengte van een regel is 537 bytes, inclusief de reeks "".
  • De volgende regels worden genegeerd:
    • regels die de limiet van 537 bytes overschrijden;
    • lege regels;
    • commentaarregels die beginnen met het symbool "#";
  • De regel van elke parameter wordt genoteerd in de vorm XXX="yyy" (XXX: parameternaam, yyy: waarde). De waarde moet in dubbele aanhalingstekens worden geplaatst.
  • Het splitsen van parameterregels in meerdere regels is niet toegestaan. Dit zal leiden tot een verwerkingsfout van het configuratiebestand en resulteert in een initialisatiefout.
  • Voor sommige parameters moeten waarden afzonderlijk voor elke lijn worden opgegeven. Een parameter met de suffix "_1" in de naam is een parameter voor lijn 1; "_2" — voor lijn 2, enzovoort.
  • De maximale lengte van de parameternaam is 32 tekens.
  • De maximale lengte van de waarde van de parameter bedraagt 500 tekens, exclusief dubbele aanhalingstekens.
  • Spaties in een regel zijn niet toegestaan, behalve wanneer de waarde een spatie bevat.
  • De waarden van sommige parameters kunnen 'leeg' worden opgegeven om een lege waarde voor de parameter in te stellen.
  • Parameters worden zonder een vaste volgorde opgegeven.
  • Als dezelfde parameter meer dan eens in het configuratiebestand wordt opgegeven, wordt de eerste opgegeven waarde gebruikt.

Ik was, om eerlijk te zijn, teleurgesteld door zo'n strenge set eisen aan het configuratiebestand. Naar mijn mening is de interactie met server de beheerfunctie van Panasonic-telefoons extreem onhandig. Op dit punt is de telefoon aanzienlijk inferieur aan andere modellen.
Bij de eerste inschakeling van het apparaat (of na een fabrieksreset) probeert het een zogenaamd productbestand te laden (in dit geval KX-UT123RU.cfg), waarin de paden naar de andere configuratiebestanden moeten staan.
Productbestand# 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"

Daarna toont de telefoon een bericht op het scherm dat de voorbereiding succesvol is afgerond en wacht deze totdat deze opnieuw wordt opgestart. Na de herstart begint deze met het verwerken van de vereiste configuratiebestanden.

In het bestand master.cfg wordt aangeraden om algemene instellingen voor alle telefoons op te geven. Net als bij Dlink geef ik slechts enkele parameters aan. De namen van de overige parameters en hun waarden zijn te vinden in de documentatie op de website van de fabrikant.
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="10.1.1.50/provisioning/panasonic-phonebook.xml»
XMLAPP_LDAP_USERID=""
XMLAPP_LDAP_USERPASS=""

In het individuele configuratiebestand van het apparaat blijven, zoals gebruikelijk, alleen de instellingen van de abonnee over.
aabbccddeeff.cfgDISPLAY_NAME_1="Gebruiker #168"

PHONE_NUMBER_1="168"
SIP_URI_1="168"
LINE_ENABLE_1="Ingeschakeld"
PROFILE_ENABLE_1="Ingeschakeld"
SIP_AUTHID_1="168"
SIP_PASS_1="SIP_PWD"

Grandstream GXP-1400

De instellingen van deze telefoons worden opgeslagen in één xml-bestand met de naam cfg{mac}.xml, of in een tekstbestand met de naam cfg{mac}. Deze telefoon vraagt alleen om het individuele configuratiebestand, waardoor het niet mogelijk is om de instellingen te optimaliseren door ze in een algemeen bestand te plaatsen. Een andere eigenschap van de configuratie van Grandstream is de naamgeving van de parameters. Ze zijn allemaal genummerd en aangeduid als P###. Bijvoorbeeld:

P1650 – regelt de webinterface voor het beheren van de telefoon (0 – HTTPS, 1 – HTTP)
P47 – het adres van de SIP-server voor verbinding.

Als de configuratie in een tekstbestand is opgeslagen, vereisen de parameters geen groepering en kunnen ze in elke volgorde staan. Regels die beginnen met # worden als opmerkingen beschouwd.

Als de instellingen in xml-formaat zijn gepresenteerd, moeten ze zijn genest binnen de node , die op zijn beurt moet zijn genest binnen . Alle parameters worden weergegeven als de bijbehorende tags met de waarde van de parameter binnenin.
Voorbeeld configuratie

1
    
    109
    
    109
    
    109
    
    SIP_PWD
    
    Gebruiker# 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 en T21

De apparaten van deze modellen ondersteunen individuele configuratiebestanden voor apparaten en gemeenschappelijke modellen. In mijn geval heb ik de gemeenschappelijke parameters geplaatst in de bestanden y000000000031.cfg en y000000000034.cfg. Individuele configuratiebestanden zijn genoemd naar het MAC-adres: 00112233aabb.cfg.

De instellingen voor Yealink-telefoons worden opgeslagen in een tekstformaat. De enige vereiste is dat de eerste regel de bestandsversie bevat, in het formaat #!version:1.0.0.1.

Alle parameters worden genoteerd in de vorm van parameter = waarde. Commentaren moeten beginnen met het teken "#". De namen van de parameters en hun waarden zijn te vinden in de documentatie op de website van de fabrikant.
gemeenschappelijke instellingen#!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 = Vladivostok
#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 = 10.1.1.50/provisioning/yealink-phonebook.xml
remote_phonebook.data.1.name = Telefoonboek
features.remote_phonebook.flash_time = 3600

individuele instellingen#!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 = Test telefoon
#Configure the display name of account1.
account.1.display_name = Gebruiker 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

Dankzij de geweldige functie auto-provision, die voorzien is in de eerder genoemde telefoons, ontstonden er geen problemen bij het aansluiten van nieuwe apparaten op het netwerk. Het kwam allemaal neer op het achterhalen van het MAC-adres van de telefoon en het genereren van een configuratiebestand op basis van een sjabloon.

Ik hoop dat je tot het einde hebt gelezen en nut hebt gehaald uit wat je hebt gelezen.

Bedankt voor uw aandacht.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster