VoIP zoologisk have — Provisioning

Introduktion

Engang godkendte ledelsen et eksperiment med at implementere IP-telefoni på vores kontor. Da min erfaring på området var minimal, vækkede opgaven enorm interesse i mig, og jeg dykkede ned i studiet af forskellige aspekter af emnet. Efter at have gennemført mit dyk besluttede jeg at dele de tilegnede viden — i håbet om, at den vil være nyttig for nogen. Så…

Kildedata

Som IP-PBX blev Asterisk valgt og implementeret. Telefonparken består af enheder fra Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400 og Dlink DPH-150S(E)/F3, Yealink T19 og T21. Denne variation skyldes, at der i eksperimentet blev truffet beslutning om at prøve forskellige løsninger for at danne sig et indtryk af forholdet mellem pris/ kvalitet/ komfort.

Regler for godkendelse af merge-requests

Målet er at maksimere forenklingen og standardiseringen af processen til opsætning af nye enheder. Alle telefoner skal synkroniseres tidsmæssigt, have en telefonbog der kan indlæses fra server og give administratoradgang til indstillingerne.

Løsningen på denne opgave er enkel — at implementere automatisk opsætning af telefoner, såkaldt Provisioning. Faktisk vil dette indlæg handle om min implementering af denne fremragende funktion.

Opsætning af tftpd, dhcpd

Til distribution af indstillinger til telefonerne valgte jeg tftp som en universel løsning, som understøttes af alle platforme, og som er let at konfigurere og administrere.

Der krævedes ikke nogen særlig opsætning for tftp. Jeg installerede den standard tftpd og lagde alle nødvendige filer i dens rodkatalog.
Filerne med indstillinger blev placeret i mapper i henhold til telefonproducenten. Desværre kom Cisco-enheden aldrig til sin mappe, så jeg måtte opbevare den i roden.

For at angive telefonernes lokation til tftp-serveren brugte jeg option-66. Derudover delte jeg dem op i separate klasser efter producent. Hver klasse fik sit eget adresseområde og en individuel mappe til konfigurationsfiler. For øvrigt måtte jeg identificere D-link-enhederne efter MAC-adresser, da de ikke leverede producentinformation i dhcp-anmodningen.

Uddrag af 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/";
        }

Telefonerne måtte tvinges ud af det samlede pulje. Ellers ville de ikke gå til deres 'søgeområde'.
Eksempel på subnet-indstillinger

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;
        }
}

Efter genstart af alle involverede tjenester, begyndte telefonerne sikkert at søge efter indstillingerne på deres tftp-server. Der var kun tilbage at placere dem der.

Cisco 7906

Disse enheder kom til mig i fabriksindpakning. Jeg var nødt til at nedgradere dem for at få dem til at fungere med Asterisk. Men det er en historien for sig selv. I dette specifikke tilfælde oprettede jeg filen SEPAABBCCDDEEFF.cnf.xml i roden af tftp-serveren til opsætning af enheden, ifølge instruktionen. Her er AABBCCDDEEFF — MAC-adressen på enheden.

Der er skrevet om konfiguration af Cisco-telefoner mange gange før, så jeg vil blot efterlade den fungerende fil med indstillinger.
Indstillinger for Cisco

true
 SIP
 root
 ADMIN_PWD

 
 D-M-Y
 Central Pacific Standard Time
     
         
             10.1.1.4
              Unicast
          
     
 

   
 10.1.1.50
 
 2000
 5060
 5061
 
 10.1.1.50
   
 

 Disable
 

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
 None
 
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
 

 User #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

 Russian_Russian_Federation
 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

Hvis du kun planlægger at købe en telefon af denne serie, skal du være opmærksom på, at automatisk konfiguration kun understøttes i apparaterne 150S/F3. Den enhed 150S/F2, jeg havde i mine hænder, havde ikke denne funktionalitet.

Konfigurationsfilen kan være i både xml-format og almindelig tekst. For xml er der et krav: tagget skal være i starten af linjen, ellers vil parseren ignorere det, og værdien af den tilsvarende parameter vil ikke ændre sig.

Til opsætning af telefonen bruges der to filer. f0D00580000.cfg — til opbevaring af indstillingerne for alle telefoner og 00112233aabb.cfg (MAC-adresse i små bogstaver) til individuelle indstillinger. Individuelle indstillinger har naturligvis højere prioritet.

Det samlede sæt indstillinger består af mere end tusind linjer. For ikke at overfylde artiklen vil jeg beskrive det minimale, men tilstrækkelige sæt indstillinger.

Obligatorisk er rodnoden VOIP_CONFIG_FILE og den indlejrede node version. Indstillingerne vil kun blive anvendt, hvis filversionen er højere end de nuværende indstillinger i apparatet. Denne værdi kan findes gennem webgrænsefladen af telefonen under vedligeholdelse (systemadministration). For telefoner med fabriksindstillinger er dette i begge tilfælde 2.0002. Desuden skal versionen af den individuelle fil være højere end versionen af den generelle fil.

Først vil jeg præsentere filen med den generelle konfiguration for alle telefoner. I princippet opbevarer den alle indstillingerne; den individuelle fil vil kun svare til telefonnummeret og teksten på skærmen.

I de to blokke nedenfor indstilles parametre for tidszone og tidsynkronisering, startporten for RTP, og der aktiveres en netværksbro mellem WAN- og LAN-porte i apparatet.

Fragment nr.1

DHCP
2
1
1
0
VOIP
10000
200
10.1.1.4
1


0
60
12
1500


1
1

Navnene på konfigurationsparametrene er så intuitive, at de ikke behøver en detaljeret beskrivelse.
SIP til én linje

5060


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

Indstillinger for fjernstyring

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

Telefonindstillinger

123
123

0
112
Company
5
1
30
0

1
0,,1
0
0
1


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


friend,home,work,business,classmate,colleague

Alle andre indstillinger forbliver 'som standard'. Nu vil enhver Dlink-telefon, der er tilsluttet netværket, straks modtage det fælles sæt af parametre. For at angive individuelle parametre for apparatet kræves der en separat fil. I denne fil skal der kun angives de nødvendige indstillinger for den enkelte abonnent.
abonnentindstillinger

2.0006



SIP1
Bruger #117
117
5060
117
SIP_PWD
3600
1
5060
117
SIP_PWD

Panasonic UT-KX123B

Disse apparater modtager indstillinger på en lidt anden måde. Konfigurationen gemmes i tekstfiler. Den maksimale størrelse for konfigurationsfilen er 120 KB. Uanset mængden af filer må den samlede størrelse ikke overstige 120 KB.
Konfigurationsfilen består af et sæt linjer, som er underlagt følgende betingelser:

  • Den første linje er altid en kommentar, der inkluderer følgende sekvens af tegn (44 byte):
    # Panasonic SIP Phone Standard Format File #
    Det hexadecimale repræsentation af denne sekvens:
    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
    For at forhindre utilsigtede ændringer af den fastsatte sekvens af tegn, anbefales det at starte konfigurationsfilen med linjen:
    # Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!
  • Konfigurationsfiler skal slutte med en tom linje.
  • Hver linje skal slutte med sekvensen "".
  • Den maksimale længde af en linje er 537 byte, inklusive sekvensen "".
  • Følgende linjer ignoreres:
    • linjer, der overskrider grænsen på 537 byte;
    • tomme linjer;
    • kommentarlinjer, der starter med symbolet "#";
  • Linjen for hver parameter skrives i formen XXX="yyy" (XXX: parameternavn, yyy: dens værdi). Værdien skal være omkranset af doble citationstegn.
  • Opdeling af parameterlinjen i flere linjer er ikke tilladt. Dette vil føre til en fejlhåndtering af konfigurationsfilen og dermed til en fejl under initialiseringen.
  • Værdier for nogle parametre skal angives separat for hver linje. En parameter med suffixet "_1" i navnet er en parameter for linje 1; "_2" for linje 2 osv.
  • Den maksimale længde af parameternavnet er 32 karakterer.
  • Den maksimale længde af parameterens værdi er 500 tegn undtagen for dobbelte citationstegn.
  • Der er ikke tilladt mellemrum i strengen, undtagen når værdien indeholder et mellemrum.
  • Værdierne af nogle parametre kan angives som 'tomme' for at indstille en tom parameter værdi.
  • Parametrene angives uden nogen bestemt rækkefølge.
  • Hvis den samme parameter angives i konfigurationsfilen mere end én gang, anvendes den værdi, der er angivet først.

En så striks samling af krav til konfigurationsfilen har, ærligt talt, skuffet mig. Efter min mening er implementeringen af interaktionen med serveren styringssystemet for Panasonic-telefoner ekstremt besværligt. På dette punkt er telefonen betydeligt underlegen i forhold til andre.
Ved første opstart af enheden (eller efter nulstilling til fabriksindstillinger) forsøger den at indlæse den såkaldte produktfil (i dette tilfælde er det KX-UT123RU.cfg), som skal indeholde stierne til de øvrige konfigurationsfiler.
Produktfil# 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'

Efter dette vil telefonen vise en meddelelse om, at forberedelsen er afsluttet med succes, og den vil vente på, at den bliver genstartet. Efter genstart vil den begynde at behandle de nødvendige konfigurationsfiler.

I filen master.cfg anbefales det at angive generelle indstillinger for alle telefoner. Ligesom med Dlink vil jeg kun angive nogle få parametre. Navne på de øvrige parametre og deres værdier kan findes i dokumentationen på producentens hjemmeside.
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=''

I den individuelle konfigurationsfil for enheden forbliver kun abonnentindstillingerne, som sædvanligt.
aabbccddeeff.cfgDISPLAY_NAME_1=«Bruger #168»

PHONE_NUMBER_1=«168»
SIP_URI_1=«168»
LINE_ENABLE_1=«Aktiveret»
PROFILE_ENABLE_1=«Aktiveret»
SIP_AUTHID_1=«168»
SIP_PASS_1=«SIP_PWD»

Grandstream GXP-1400

Parametrene for disse telefoner gemmes i en enkelt xml-fil med navnet cfg{mac}.xml. Alternativt i en almindelig tekstfil med navnet cfg{mac}. Denne telefon anmoder kun om en individuel konfigurationsfil, så det vil ikke være muligt at optimere indstillingerne ved at flytte dem til en fælles fil. En anden særegenhed ved konfigurationen af Grandstream-enhederne er navngivningen af parametrene. Alle er nummererede og betegnes som P###. For eksempel:

P1650 – ansvarlig for webgrænsefladen til telefonstyring (0 – HTTPS, 1 – HTTP)
P47 – adressen på SIP-serveren til forbindelse.

Hvis konfigurationen gemmes i en tekstfil, kræver parametrene ikke nogen gruppering og står i vilkårlig rækkefølge. Linjer, der starter med #, betragtes som kommentarer.

Hvis indstillingerne præsenteres i xml-format, skal de være indlejret i noden , som i sin tur skal være indlejret i . Alle parametre skrives som tilsvarende tags med parameterens værdi inden i.
Eksempel på konfiguration

1
    
    109
    
    109
    
    109
    
    SIP_PWD
    
    Bruger# 109

        10.1.1.50
        2
   10.1.1.50
   0
   ADMIN_PWD
   USER_PWD
   da
        0
        10.1.1.50/grandstream
   1
   TZc-11
   10.1.1.4
        1
        http://10.1.1.50/provisioning/grandstream
        30

Yealink T19 og T21

Maskinerne i disse modeller understøtter individuelle konfigurationsfiler for enheder og fælles for modellerne. I mit tilfælde måtte jeg placere de fælles parametre i filerne y000000000031.cfg og y000000000034.cfg henholdsvis. Individuelle konfigurationsfiler navngives i henhold til MAC-adressen: 00112233aabb.cfg.

Indstillingerne for yealink'erne gemmes i tekstformat. Det eneste krav er, at den første linje indeholder filversionen, i formatet #!version:1.0.0.1.

Alle parametre skrives i form af parameter = værdi. Kommentarer skal begynde med symbolet "#". Navne på parametre og deres værdier kan findes i dokumentationen på producentens hjemmeside.
generelle indstillinger#!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 = Russisk
#Specify the LCD language, the valid values are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Russisk
#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 = Telefonbog
features.remote_phonebook.flash_time = 3600

individuelle indstillinger#!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 telefon
#Configure the display name of account1.
account.1.display_name = Bruger 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

Som resultat, takket være den fantastiske auto-provision-funktion, der er forudset i de nævnte telefoner, opstod der ingen problemer med at forbinde de nye enheder til netværket. Det hele kom ned til at finde MAC-adressen på telefonen og generere konfigurationsfilen efter skabelonen.

Jeg håber, at du har læst til slut og fået noget ud af det, du har læst.

Tak for opmærksomheden.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster