VoIP zoo — Provisioning

Wprowadzenie

Pewnego razu kierownictwo zatwierdziło eksperyment związany z wdrożeniem telefonii IP w naszej firmie. Ponieważ moje doświadczenie w tej dziedzinie było minimalne, zadanie wzbudziło we mnie ogromne zainteresowanie, więc zanurzyłem się w badanie różnych aspektów tematu. Po zakończeniu tego procesu postanowiłem podzielić się zdobytą wiedzą — z nadzieją, że komuś się przyda. I tak…

Dane źródłowe

Jako IP-ATS wybrano i wdrożono Asterisk. Park telefonów składa się z urządzeń Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400, Dlink DPH-150S(E)/F3, Yealink T19 i T21. Taki rozrzut wynika z faktu, że w ramach eksperymentu podjęto decyzję o próbie różnych urządzeń, aby wyrobić swoje zdanie na temat stosunku ceny/jakości/komfortu.

Zadanie

Maksymalnie uprościć i zunifikować proces konfiguracji nowych aparatów. Wszystkie telefony powinny być zsynchronizowane czasowo, mieć książkę telefoniczną, wczytywaną z serwera i zapewniać dostęp do ustawień dla administratora.

Rozwiązanie tego problemu jest proste — wdrożyć automatyczną konfigurację telefonów, tzw. Provisioning. Właściwie, o mojej realizacji tej wspaniałej funkcji będzie mowa.

Konfiguracja tftpd, dhcpd

Do dostarczania ustawień telefonów wybrałem tftp jako uniwersalną opcję, wspieraną przez wszystkie platformy, łatwą w konfiguracji i zarządzaniu.

Specjalna konfiguracja dla tftp nie była wymagana. Zainstalowałem standardowy tftpd i umieściłem wszystkie niezbędne pliki w jego głównym katalogu.
Pliki z ustawieniami umieściłem w katalogach zgodnie z producentem telefonu. Niestety, urządzenie Cisco nie mogło znaleźć swojej teczki, więc musiałem je przechowywać w głównym katalogu.

Aby wskazać telefonami lokalizację serwera tftp, skorzystałem z option-66. Dodatkowo podzieliłem je na oddzielne klasy według producenta. Każda klasa otrzymała swój własny segment adresów i indywidualny folder na pliki konfiguracyjne. Co ciekawe, urządzenia D-link musiałem identyfikować po adresach MAC, ponieważ nie podają informacji o producencie w zapytaniu dhcp.

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 musiały zostać siłą wyłączone z ogólnej puli. W przeciwnym razie nie chciały wsiąść do swojego «żabiego» miejsca.
Przykład ustawień podsieci

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 ponownym uruchomieniu wszystkich zaangażowanych usług telefony pewnie skierowały się po ustawienia do przydzielonego im serwera tftp. Pozostało tylko umieścić je tam.

Cisco 7906

Te urządzenia otrzymałem w fabrycznym opakowaniu. Musiałem przeprogramować, aby współpracowały z Asterisk. Ale to osobna historia. W konkretnym przypadku, do konfiguracji urządzenia, zgodnie z instrukcją, stworzyłem w katalogu głównym serwera tftp plik SEPAABBCCDDEEFF.cnf.xml. Gdzie AABBCCDDEEFF to adres MAC urządzenia.

O konfiguracji telefonów Cisco napisano już wiele razy, więc po prostu zostawię działający plik z ustawieniami.
Ustawienia dla Cisco

true
 SIP
 root
 ADMIN_PWD

 
 D-M-Y
 Czas standardowy dla centralnego Pacyfiku
     
         
             10.1.1.4
              Unicast
          
     
 

   
 10.1.1.50
 
 2000
 5060
 5061
 
 10.1.1.50
   
 

 Wyłączone


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
 Telefon Cisco
 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żytkownik #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

 Rosyjski_Federacja_Rosja
 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

Jeśli zamierzasz zakupić telefon z tej serii, zachowaj ostrożność, automatyczna konfiguracja jest obsługiwana tylko w urządzeniach 150S/F3. Nie znalazłem tej funkcji w modelu 150S/F2, który trafił w moje ręce.

Plik konfiguracyjny może być zarówno w formacie xml, jak i w formacie zwykłego tekstu. W przypadku xml istnieje jeden warunek: tag musi znajdować się na początku wiersza, w przeciwnym razie parser go zignoruje, a wartość odpowiedniego parametru nie zostanie zmieniona.

Do konfiguracji telefonu używane są dwa pliki. f0D00580000.cfg — do przechowywania ustawień wszystkich telefonów oraz 00112233aabb.cfg (adres MAC zapisany małymi literami) dla ustawień indywidualnych. Ustawienia indywidualne mają oczywiście wyższy priorytet.

Pełny zestaw ustawień zawiera ponad tysiąc linii, aby nie przytłaczać artykułu, opiszę minimum wystarczającego zestawu ustawień.

Obowiązkowe są węzeł główny VOIP_CONFIG_FILE i wbudowany w niego węzeł version. Ustawienia będą stosowane tylko wtedy, gdy wersja pliku jest wyższa niż bieżące ustawienia w urządzeniu. Możesz uzyskać tę wartość przez interfejs .web urządzenia w sekcji maintenance (zarządzanie systemem). Dla telefonów z ustawieniami fabrycznymi w obu przypadkach to 2.0002. Ponadto, wersja pliku indywidualnego musi być większa od wersji pliku ogólnego.

Na początku przedstawiam plik z ogólną konfiguracją dla wszystkich telefonów. W zasadzie przechowuje on wszystkie ustawienia, plik indywidualny będzie odpowiadał tylko za numer telefonu i napis na ekranie.

W dwóch blokach przedstawionych poniżej ustawia się parametry strefy czasowej i synchronizacji czasu, początkowy port dla RTP oraz włącza most sieciowy między portami WAN i LAN urządzenia.

Fragment №1

DHCP
2
1
1
0
VOIP
10000
200
10.1.1.4
1


0
60
12
1500


1
1

Nazwy parametrów konfiguracji są na tyle "mówiące", że nie trzeba ich dokładnie opisywać.
SIP dla jednej linii

5060


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

Ustawienia zdalnego zarządzania

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

Ustawienia telefonu

123
123

0
112
Firma
5
1
30
0

1
0,,1
0
0
1


XML-PBook1
Książka telefoniczna
http://10.1.1.50/provisioning/dlink-phonebook.xml
:
0
0


przyjaciel,dom,praca,biznes,uczeń,kollega

Pozostałe ustawienia pozostaną „domyślne”. Teraz każdy telefon Dlink podłączony do sieci automatycznie przyjmie wspólny zestaw parametrów. Aby ustawić indywidualne ustawienia dla aparatu, potrzebny jest osobny plik. W nim trzeba tylko określić wymagane ustawienia dla pojedynczego abonenta.
ustawienia abonenta

2.0006



SIP1
Użytkownik #117
117
5060
117
SIP_PWD
3600
1
5060
117
SIP_PWD

Panasonic UT-KX123B

Te urządzenia otrzymują ustawienia w nieco inny sposób. Konfiguracja przechowywana jest w plikach tekstowych. Maksymalny rozmiar pliku konfiguracyjnego wynosi 120 KB. Niezależnie od liczby plików ich całkowity rozmiar nie powinien przekraczać 120 KB.
Plik konfiguracyjny składa się z zestawu linii, na które nakładają się podane poniżej warunki:

  • Pierwsza linia zawsze zawiera komentarz, obejmujący następującą sekwencję znaków (44 bajty):
    # Panasonic SIP Phone Standard Format File #
    Szesnastkowe przedstawienie tej sekwencji:
    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 zapobiec przypadkowemu zmianie ustalonej sekwencji znaków, zaleca się rozpoczęcie pliku konfiguracyjnego od linii:
    # Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!
  • Pliki konfiguracyjne powinny kończyć się pustą linią.
  • Każda linia powinna kończyć się sekwencją "".
  • Maksymalna długość linii wynosi 537 bajtów, w tym sekwencja ""
  • Następujące linie są ignorowane:
    • linie przekraczające limit 537 bajtów;
    • puste linie;
    • linie komentarzy, zaczynające się od znaku "#";
  • Linia każdego parametru zapisywana jest w formie XXX="yyy" (XXX: nazwa parametru, yyy: jego wartość). Wartość musi być ujęta w podwójne cudzysłowy.
  • Podział linii parametrów na kilka linii nie jest dozwolony. Spowoduje to błąd przetwarzania pliku konfiguracyjnego i w rezultacie błąd inicjalizacji.
  • Niektóre wartości parametrów należy podawać oddzielnie dla każdej linii. Parametr z sufiksem "_1" w nazwie jest parametrem dla linii 1; "_2"— dla linii 2 itp.
  • Maksymalna długość nazwy parametru wynosi 32 znaki.
  • Maksymalna długość wartości parametru wynosi 500 znaków, z wyjątkiem podwójnych cudzysłowów.
  • W ciągu nie są dozwolone żadne spacje, z wyjątkiem przypadków, gdy wartość zawiera symbol spacji.
  • Wartości niektórych parametrów można podać jako „puste”, aby ustawić pustą wartość parametru.
  • Parametry są podawane w dowolnej kolejności.
  • Jeśli ten sam parametr jest podany w pliku konfiguracyjnym więcej niż jeden raz, zastosowane zostanie pierwsze podane wartość.

Taki poważny zestaw wymagań dotyczących pliku konfiguracyjnego, szczerze mówiąc, mnie zmartwił. Moim zdaniem, realizacja interakcji z serwerem zarządzaniem w telefonach Panasonic jest niezwykle niewygodna. W tym zakresie telefon znacząco ustępuje innym.
Po pierwszym włączeniu urządzenia (lub po przywróceniu ustawień fabrycznych) próbuje ono załadować tzw. plik produktu (w tym przypadku KX-UT123RU.cfg), który powinien zawierać ścieżki do pozostałych plików konfiguracyjnych.
Plik produktu# 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"

Po tym telefon wyświetli komunikat o pomyślnym zakończeniu przygotowania i będzie oczekiwał na ponowne uruchomienie. A po ponownym uruchomieniu zacznie przetwarzać wymagane pliki konfiguracyjne.

W pliku master.cfg zaleca się podawanie ogólnych ustawień dla wszystkich telefonów. Tak jak w przypadku Dlink, wskaźę tylko niektóre parametry. Nazwy pozostałych parametrów oraz ich wartości można znaleźć w dokumentacji na stronie producenta.
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=""

W indywidualnym pliku konfiguracyjnym urządzenia tradycyjnie pozostają tylko ustawienia abonenta.
aabbccddeeff.cfgDISPLAY_NAME_1=„Użytkownik #168”

PHONE_NUMBER_1=„168”
SIP_URI_1=„168”
LINE_ENABLE_1=„Włączone”
PROFILE_ENABLE_1=„Włączone”
SIP_AUTHID_1=„168”
SIP_PASS_1=„SIP_PWD”

Grandstream GXP-1400

Ustawienia tych telefonów są przechowywane w jednym pliku xml o nazwie cfg{mac}.xml lub w zwykłym pliku tekstowym o nazwie cfg{mac}. Ten telefon żąda tylko indywidualnego pliku konfiguracyjnego, więc nie można zoptymalizować ustawień poprzez umieszczenie ich w pliku wspólnym. Jeszcze jedną cechą ustawienia Grandstreamów jest nazewnictwo parametrów. Wszystkie są ponumerowane i oznaczone jako P###. Na przykład:

P1650 – odpowiada za interfejs webowy do zarządzania telefonem (0 – HTTPS, 1 – HTTP)
P47 – adres serwera SIP do połączenia.

Jeśli konfiguracja jest przechowywana w pliku tekstowym, parametry nie wymagają żadnej grupowania i mogą być w dowolnej kolejności. Linie zaczynające się od # są traktowane jako komentarze.

W przypadku, gdy ustawienia są przedstawione w formacie xml, muszą być zagnieżdżone w elemencie , który z kolei musi być zagnieżdżony w . Wszystkie parametry są zapisywane w postaci odpowiednich znaczników z wartością parametru wewnątrz.
Przykład konfiguracji

1
    
    109
    
    109
    
    109
    
    SIP_PWD
    
    Użytkownik# 109

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

Yealink T19 i T21

Urządzenia tych modeli obsługują indywidualne pliki konfiguracyjne dla urządzeń oraz wspólne dla modeli. W moim przypadku musiałem umieścić wspólne parametry w plikach y000000000031.cfg i y000000000034.cfg. Indywidualne pliki konfiguracyjne są nazwane zgodnie z adresem MAC: 00112233aabb.cfg.

Ustawienia dla yealinków są przechowywane w formacie tekstowym. Jedynym wymogiem jest obecność w pierwszej linii wersji pliku w formacie #!version:1.0.0.1.

Wszystkie parametry są zapisywane w formie parametr = wartość. Komentarze muszą zaczynać się od znaku "#". Nazwy parametrów i ich wartości można znaleźć w dokumentacji na stronie producenta.
ogólne ustawienia#!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 = Polski
#Specify the LCD language, the valid values are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Polski
#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 = Władywostok
#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 = Książka telefoniczna
features.remote_phonebook.flash_time = 3600

indywidualne ustawienia#!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 = Telefon testowy
#Configure the display name of account1.
account.1.display_name = Użytkownik 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

W rezultacie, dzięki doskonałej funkcji auto-provision, przewidzianej w wymienionych przeze mnie telefonach, nie było żadnych problemów z podłączeniem nowych urządzeń do sieci. Wszystko sprowadziło się do ustalenia adresu MAC telefonu i wygenerowania pliku konfiguracyjnego na podstawie szablonu.

Mam nadzieję, że dotarłeś do końca i skorzystałeś z przeczytanego tekstu.

Dziękujemy za uwagę.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster