VoIP zoo – Provisioning

Úvod

Jednou vedení schválilo experiment s implementací IP telefonie v naší kanceláři. Protože moje zkušenosti v této oblasti byly minimální, úkol ve mně vyvolal obrovský zájem a ponořil jsem se do studia různých aspektů této problematiky. Po ukončení svého studia jsem se rozhodl sdílet získané znalosti — v naději, že se někomu budou hodit. Takže…

Vstupní data

Jako IP-ÚSTEDNA byl vybrán a rozvinut Asterisk. Telefonní park se skládá z přístrojů Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400 a Dlink DPH-150S(E)/F3, Yealink T19 a T21. Takový rozptyl je dán tím, že v rámci experimentu bylo rozhodnuto vyzkoušet všechny tyto možnosti, abychom si mohli vytvořit vlastní názor na poměr cena/kvalita/uživatelský komfort.

Úkol

Maximálně zjednodušit a unifikovat proces nastavení nových přístrojů. Všechny telefony musí být synchronizovány podle času, mít telefonní seznam, který se nahrává z serveru a poskytovat přístup k nastavením pro administrátora.

Řešení tohoto úkolu je jednoduché — realizovat automatické nastavení telefonů, tzv. Provisioning. O mé realizaci této skvělé funkce bude řeč.

Nastavení tftpd, dhcpd

Pro distribuci nastavení telefonům jsem vybral tftp jako univerzální variantu, podporovanou všemi platformami, která je jednoduchá na nastavení a správu.

Speciální nastavení pro tftp nebylo potřeba. Nainstaloval jsem standardní tftpd a umístil všechny potřebné soubory do jeho kořenového adresáře.
Soubory s nastavením jsem umístil do adresářů podle výrobce telefonu. Pravda, zařízení od Cisco se do své složky tak nějak nedostalo, musel jsem je držet v kořenovém adresáři.

Abych telefonům určil umístění tftp-serveru, použil jsem option-66. Navíc jsem je rozdělil do samostatných tříd podle výrobce. Každá třída dostala vlastní segment adres, a individuální složku pro konfigurační soubory. Mimochodem, zařízení od D-link jsem musel určit podle MAC adres, protože informace o výrobci v dhcp dotazu neposkytují.

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

Telefony bylo nutné násilně vyloučit z celkového fondu. Jinak se nechtěly dostat do svého "žabníku".
Příklad nastavení podsítě

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

Po restartu všech zapojených služeb se telefony spolehlivě obrátily na určený tftp-server pro nastavení. Zůstává jen je tam umístit.

Cisco 7906

Tyto přístroje jsem dostal v továrním balení. Musel jsem je přeprogramovat, abych je spojil s asteriskem. Ale to je jiný příběh. V konkrétním případě jsem pro nastavení přístroje vytvořil v kořenovém adresáři tftp-serveru soubor SEPAABBCCDDEEFF.cnf.xml. Kde AABBCCDDEEFF je MAC adresa přístroje.

O nastavení telefonů Cisco už bylo napsáno mnohokrát, takže zde jednoduše nechám funkční soubor s nastavením.
Nastavení pro cisco

true
 SIP
 root
 ADMIN_PWD

 
 D-M-Y
 Střední Tichomořský čas
     
         
             10.1.1.4
              Unicast
          
     
 

   
 10.1.1.50
 
 2000
 5060
 5061
 
 10.1.1.50
   
 

 Vypnout


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
 

 Uživatel #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

 Ruská_Ruská_Federace
 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

Pokud plánujete zakoupit telefon této řady, dejte si pozor, automatické nastavení je podporováno pouze u telefonů 150S/F3. U zařízení 150S/F2, které jsem měl k dispozici, jsem tuto funkci nenašel.

Konfigurační soubor může být buď ve formátu xml, nebo v běžném textovém formátu. U xml existuje jedno požadavek: tag musí být na začátku řádku, jinak ho parser ignoruje a hodnota příslušného parametru se nezmění.

Pro nastavení telefonu se používají dva soubory. f0D00580000.cfg — pro ukládání nastavení všech telefonů a 00112233aabb.cfg (MAC adresa malými písmeny) pro individuální nastavení. Individuální nastavení mají samozřejmě vyšší prioritu.

Celkový soubor nastavení obsahuje více než tisíc řádků; abych článek nezatěžoval, popíšu minimální nezbytnou sadu nastavení.

Povinné jsou kořenový uzel VOIP_CONFIG_FILE a vložený uzel version. Nastavení budou aplikována pouze tehdy, pokud bude verze souboru vyšší než aktuální nastavení v zařízení. Toto hodnotu lze zjistit přes webové rozhraní telefonu v sekci údržba (systémové řízení). U zařízení s továrními nastaveními je v obou případech hodnota 2.0002. Kromě toho musí být verze individuálního souboru vyšší než verze obecného souboru.

Nejprve uvedu soubor s obecným nastavením pro všechny telefony. V podstatě uchovává všechna nastavení, individuální soubor bude odpovídat pouze za číslo telefonu a nápis na obrazovce.

V dvou blocích uvedených níže jsou nastaveny parametry časové zóny a synchronizace času, počáteční port pro RTP a je zapnutý síťový most mezi WAN a LAN porty zařízení.

Fragment č. 1

<GLOBAL_CONFIG_MODULE>
<WAN_Mode>DHCP<\/WAN_Mode>
<Default_Protocol>2<\/Default_Protocol>
<Enable_DHCP>1<\/Enable_DHCP>
<DHCP_Auto_DNS>1<\/DHCP_Auto_DNS>
<DHCP_Auto_Time>0<\/DHCP_Auto_Time>
<Host_Name>VOIP<\/Host_Name>
<RTP_Initial_Port>10000<\/RTP_Initial_Port>
<RTP_Port_Quantity>200<\/RTP_Port_Quantity>
<SNTP_Server>10.1.1.4<\/SNTP_Server>
<Enable_SNTP>1<\/Enable_SNTP>
<Time_Zone>71<\/Time_Zone>
<Time_Zone_Name>UCT_011<\/Time_Zone_Name>
<Enable_DST>0<\/Enable_DST>
<SNTP_Timeout>60<\/SNTP_Timeout>
<Default_UI>12<\/Default_UI>
<MTU_Length>1500<\/MTU_Length>
<\/GLOBAL_CONFIG_MODULE>
<LAN_CONFIG_MODULE>
<Enable_Bridge_Mode>1<\/Enable_Bridge_Mode>
<Enable_Port_Mirror>1<\/Enable_Port_Mirror>
<\/LAN_CONFIG_MODULE>

Názvy konfiguračních parametrů jsou dostatečně „výmluvné“, aby je nebylo třeba podrobně popisovat.
SIP pro jednu linku

5060


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

Nastavení vzdáleného ovládání

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

Nastavení telefonu

123
123

0
112
Company
5
1
30
0

Všechny ostatní nastavení zůstanou „výchozí“. Teď jakýkoliv telefon Dlink připojený k síti okamžitě přijme společný pro všechny soubor parametrů. Pro zadání individuálních parametrů pro přístroj je potřeba samostatný soubor. V něm je potřeba pouze uvést nezbytná nastavení pro jednotlivého předplatitele.
nastavení předplatitele

2.0006



SIP1
Uživatel #117
117
5060
117
SIP_PWD
3600
1
5060
117
SIP_PWD

Panasonic UT-KX123B

Tyto zařízení získávají nastavení jiným způsobem. Konfigurace se ukládá do textových souborů. Maximální velikost konfiguračního souboru je 120 KB. Bez ohledu na počet souborů nesmí celková velikost překročit 120 KB.
Konfigurační soubor se skládá z řady řádků, na které se vztahují následující podmínky:

  • První řádek je vždy komentář, který zahrnuje následující sekvenci znaků (44 bajtů):
    # Panasonic SIP Phone Standard Format File #
    Šestnáctkový zápis této sekvence:
    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
    Aby se předešlo náhodné změně stanovené sekvence znaků, doporučuje se začít konfigurační soubor touto řádkou:
    # Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!
  • Konfigurační soubory by měly končit prázdným řádkem.
  • Každý řádek by měl končit sekvencí "".
  • Maximální délka řádku činí 537 bajtů, včetně sekvence "".
  • Následující řádky se ignorují:
    • řádky překračující limit 537 bajtů;
    • prázdné řádky;
    • řádky komentářů začínající znakem "#";
  • Řádek každého parametru se zapisuje ve formátu XXX=„yyy“ (XXX: název parametru, yyy: jeho hodnota). Hodnota by měla být uvedena v dvojitých uvozovkách.
  • Rozdělení řádku parametrů na více řádků není povoleno. To povede k chybě při zpracování konfiguračního souboru a nakonec k selhání inicializace.
  • Hodnoty některých parametrů je třeba uvádět zvlášť pro každou linku. Parametr s příponou "_1" v názvu je parametr pro linku 1; "_2" — pro linku 2 atd.
  • Maximální délka názvu parametru činí 32 znaků.
  • Maximální délka hodnoty parametru činí 500 znaků s výjimkou znaků dvojitých uvozovek.
  • Mezery v řetězci nejsou povoleny, kromě případů, kdy hodnota obsahuje mezeru.
  • Hodnoty některých parametrů lze zadávat jako "prázdné", aby se nastavila prázdná hodnota parametru.
  • Parametry jsou uváděny bez určitého pořadí.
  • Pokud je stejný parametr v konfiguračním souboru uveden více než jednou, použije se hodnota uvedená jako první.

Tak rozsáhlý soubor požadavků na konfigurační soubor mě upřímně rozesmutnil. Podle mého názoru je implementace interakce s serverem ovládáním u telefonů Panasonic provedena velmi nepohodlně. V tomto ohledu telefon značně zaostává za ostatními.
Při prvním zapnutí zařízení (nebo po továrním resetu) se pokouší načíst takzvaný produktový soubor (v tomto případě KX-UT123RU.cfg), který by měl obsahovat cesty k dalším konfiguračním souborům.
Produktový soubor# 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"

Poté telefon zobrazí na obrazovce zprávu o úspěšném dokončení přípravy a bude čekat, až bude restartován. A teprve po restartu začne zpracovávat příslušné konfigurační soubory.

V souboru master.cfg se doporučuje uvádět společná nastavení pro všechny telefony. Stejně jako v případě Dlinku, uvedu pouze některé parametry. Název ostatních parametrů a jejich hodnoty lze nalézt v dokumentaci na webu výrobce.
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=""

V individuálním konfiguračním souboru zařízení tradičně zůstávají pouze nastavení uživatele.
aabbccddeeff.cfgDISPLAY_NAME_1=„Uživatel #168“

PHONE_NUMBER_1=„168“
SIP_URI_1=„168“
LINE_ENABLE_1=„Povoleno“
PROFILE_ENABLE_1=„Povoleno“
SIP_AUTHID_1=„168“
SIP_PASS_1=„SIP_PWD“

Grandstream GXP-1400

Parametry těchto telefonů se ukládají do jednoho xml souboru s názvem cfg{mac}.xml nebo do obyčejného textového souboru s názvem cfg{mac}. Tento telefon vyžaduje pouze individuální konfigurační soubor, takže optimalizace nastavení přesunem do sdíleného souboru nebude možná. Další zvláštností nastavení Grandstream je pojmenování parametrů. Všechny jsou očíslovány a označeny jako P###. Například:

P1650 – odpovídá za webové rozhraní pro správu telefonu (0 – HTTPS, 1 – HTTP)
P47 – adresa SIP serveru pro připojení.

Pokud jsou nastavení uložena v textovém souboru, parametry nevyžadují žádné seskupení a jdou v libovolném pořadí. Řádky začínající na # jsou považovány za komentáře.

V případě, že jsou nastavení ve formátu xml, musí být vložena do uzlu , který musí být opět vložen do . Všechny parametry jsou zapisovány ve formě odpovídajících tagů s hodnotou parametru uvnitř.
Příklad nastavení

1
    
    109
    
    109
    
    109
    
    SIP_PWD
    
    Uživatel# 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 a T21

Zařízení těchto modelů podporují individuální konfigurační soubory pro zařízení a společné pro modely. V mém případě jsem musel umístit společné parametry do souborů y000000000031.cfg a y000000000034.cfg. Individuální konfigurační soubory jsou pojmenovány podle MAC adresy: 00112233aabb.cfg.

Nastavení pro yealinky se uchovávají v textovém formátu. Z povinných požadavků je pouze nutnost mít v prvním řádku verzi souboru ve formátu #!version:1.0.0.1.

Všechny parametry jsou zapisovány ve formátu parametr = hodnota. Komentáře by měly začínat symbolem "#". Názvy parametrů a jejich hodnoty lze nalézt v dokumentaci na webových stránkách výrobce.
obecná nastavení#!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 = Ruský
#Specify the LCD language, the valid values are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Ruský
#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 = Telefonní seznam
features.remote_phonebook.flash_time = 3600

individuální nastavení#!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 = Testovací telefon
#Configure the display name of account1.
account.1.display_name = Uživatel 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

Nakonec, díky skvělé funkci auto-provision, předpokládané v zmíněných telefonech, nedošlo k žádným problémům při připojení nových zařízení k síti. Všechno se zjednodušilo na zjištění MAC adresy telefonu a generování konfiguračního souboru podle šablony.

Doufám, že jste dočetli až do konce a získali z přečteného užitek.

Děkuji za pozornost.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster