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 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="»
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 =
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
