Sfunkčnenie Cisco IP telefónu 7941 s PBX Asteriskom

Približný čas čítania: 8 minút

Možno sa vám povaľuje doma, možno ste ho našli vo svojej škole (ako pozostatok časov projektu PIRŠ) a možno ste ho len dakde lacno kúpili. Reč bude o nádhernom IP telefóne, enterprise rady (79xx), značky CISCO. Ak pri tom všetkom premýšľate ako by sa dal tento kus starého železa použiť dnes a sfunkčniť ho s PBX Asterisk je tento pokec možno práve pre Vás.

Na úvod nutno poznamenať prečo to sem vôbec ťahám. Pracujem aj v škole ktorá už niekoľko rokov využíva IP telefóniu postavenú na voľne dostupnom projekte Asterisk a IP telefónoch rôznych značiek, všetky hojne využívajúcich SIP protokol. Uvedené telefóny značky CISCO sa u nás povaľovali niekoľko rokov bez povšimnutia. Je to najmä z dôvodu zložitejšej konfigurácie týchto telefónov, ktoré nie sú schopné fungovať tzv. stand-alone a k svojmu behu potrebujú predať určité parametre po sieti vo forme XML fajlov a funkčného TFTP cez ktorý si ich stiahnú.

Prostredie

Nič nerobím len tak z dlhej chvíle, všetko musím vždy aplikovať do aktuálneho, dostupného prostredia takže popis ktorý tu uvediem je platný pre prostredie s routrom značky Mikrotik (ktorý je z nášho pohľadu dôležitý pre pridelovanie IP adries v sieti, t.j. funkčný DHCP server) a ako softwérový PBX postavený na Asterisku použijem projekt Issabel (https://www.issabel.org/), ktorý predstavuje bundle rôznych riešení od Asterisku, Operátor panelu, WebGUI prostredia pre konfiguráciu až po funkčný TFTP server pre naše potreby.

Uvedený postup už bude predpokladať, že máte funkčnú PBX postavenú na Asterisku alebo inom riešení. Máte fungujúcu sieť a máte základné vedomosti o tom, čo vôbec SIP znamená. Tomuto sa tento článok venovať nebude.

Prečo MikroTik a Issabel

Ako som už písal vyššie. Svoje postupy vždy aj aplikujem do živého prostredia. Hoc sa budem venovať primárne nastaveniam, pre tieto systémy – uvedený postup tu je aplikovateľný na akékoľvek iné riešenie. Samozrejme po príslušných úpravách. T.z., že nie ste vôbec viazaný nasadiť vo svojej sieti MikroTik router rovnako tak ako použiť Issabel PBX.

Issabel je forkom projektu Elastix. V minulosti bol Elastix postavený na Linux distribúcií CentOS a obsahoval kopec nástrojov vhodných pre prevádzkovanie IP telefónie v sieti. Od samotného Asterisku, cez Emailový systém, IVR, Operátor panely, Messaging, FAX až po user-friendly GUI prostredie v ktorom ste to vedeli všetko nastaviť bez nutnosti ovládať syntax v konfigurákoch.

Elastix sa však skomercionalizoval a časť nespokojnej komunity vytvorila fork s názvom Issabel. V ňom pokračujú takpovediac v pôvodnom duchu pôvodného projektu. Jedným z dôvodov prečo používam tieto riešenia je, že už samé prídu s pred inštalovanými vecami, ktoré by sa mohli pri správe IP telefónie hodiť. Jednou z týchto vecí je aj nakonfigurovaný a funkčný TFTP server.

Ak používate vo svojej sieti čistý Asterisk alebo iný podobný projekt, napr. FreePBX alebo aj komerčné riešenia ako 3CX, je to len na Vás. Cisco IP telefón spojazdníte so všetkým čo podporuje SIP protokol.

Fungovanie nášho Cisco 7941 v skratke

  • Telefón sa zapne.
  • Po načítaní a naštartovaní systému telefón žiada IP adresu z dostupného DHCP servera na pripojenej sieti.
  • DHCP server, okrem samotnej IP adresy predáva aj parameter s IP adresou dostupného TFTP servera na sieti.
  • Telefón sa po osvojení IP adresy snaží pripojiť na uvedený TFTP server a chce z neho stiahnúť konkrétne súbory (konkrétne názvy, tvary). Jedným z týchto top-needed súborov je aj XML súbor v tvare – SEPmac_adresa_telefónu_bez_znamienok.cnf.xml. Teda napríklad SEP001E136C456D.cnf.xml pre telefón s MAC 00:1E:13:6C:45:6D.
  • Z uvedeného súboru je telefón schopný vyčítať všetky podstatné informácie o verzií použitého Firmware, časovej zóne, názve telefónu, mena/hesla SIP účtu, IP adresy PBX ústredne ako aj ďalších službách ktoré je schopný ponúkať. Tvar XML súboru si popíšeme nižšie.
  • Okrem tohto súboru telefón siaha aj po ďalších XML súboroch ako sú dialplan.xml a ďalšie, pre naše potreby nepodstatné.
  • Po stiahnutí fajlov a ich zaparkovaní dôjde k pokusu o autentifikáciu na PBX. Ak je všetko OK, na displeji za zobrazí aktívny SIP účet a všetko funguje.

Aby sa telefón mohol správať podľa uvedeného postupu je treba vykonať zopár pred-príprav.

Príprava

Na strane MikroTiku (DHCP serveru)

Ako som už spomenul vyššie, problém nie je predať nejakú IPčku telefónu, pre ktorý je toto JEDINÁ možnosť ako sa pripojiť k sieti ale predať mu aj informáciu o IP adrese TFTP servera, ktorý bude pri danej konfigurácií sieti telefónom dosiahnuteľný.

V MikroTiku v DHCP nastaveniach sa tento parameter určuje v IP -> DHCP Servers -> Networks a v jednotlivých sieťach ako položka pomenovaná „DHCP Options“.

Ešte pred tým však treba možnosť pridať do IP -> DHCP Servers -> Options pod kód s číslom 150.

Aby to zas ale nebolo úplne také easy, tak bohužiaľ, IP adresa sa musí udať v HEX tvare. Pre tieto účely použijeme nejaký konvertor IP adries na HEX tvar.
Napr.: https://www.browserling.com/tools/ip-to-hex

Predpokladajme teda, že máme sieť v rozsahu 192.168.4.0/24. Router a DHCP server zároveň je na adrese 192.168.4.1. Náš PBX server s Asteriskom a zároveň aj TFTP server je na adrese 192.168.4.2. Telefón dostal z dhcp IP 192.168.4.100 nie že by nás to malo zaujímať.
Naším cieľom teda bude povedať telefónu a predať mu cez options s kódom 150 IP adresu 192.168.4.2. Nakoľko práve na tejto IPčke čaká pripravený TFTP server.

Skočíme teda na uvedenú stránku a prekonvertujeme si IP 192.168.4.2 na HEX formát. Výjde nám 0xC0A80402. Jednoduchým zápisom cez cli pridáme Options do MikroTiku.

/ip dhcp-server option add code=150 name=issabeltftp value=0xC0A80402
MikroTik DHCP Option 150
Pridanie DHCP Options s kódom 150 a IP adresou TFTP v HEX tvare.

Následne si tento istý Options zvolíme aj v IP -> DHCP Servers -> Networks v sieti 192.168.4.0/24.

MikroTik DHCP Options TFTP
Pridanie Options do odpovedí DHCP serveru

V tomto momente sú toto všetky potrebné zmeny na strane DHCP serveru.

Na strane Issabel (PBX a TFTP serveru)

V IP telefónií je úplne bežné že telefóny sťahujú svoje konfigurácie či novšie verzie FW z TFTP servera. Preto ho štandardne obsahuje aj Issabel (obsahoval ho aj Elastix) ako súčasť ktorá môže byť užitočná.

V tomto návode sa nebudem preto zaoberať nastavením TFTP servera. Na Issabele sa server spúšťa na vyzvanie prostredníctvom xinetd. Nehľadajte preto žiadneho daemona ale svoju pozornosť upriamte na /etc/xinetd.d/tftp súbor a riadok disable = yes zmeňte na disable = no.

# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s -vv /tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4

Koreňový adresár, ako vidíme sa nachádza v koreňovej zložke /tftpboot. Do tejto zložky teda budú smerovať aj všetky súbory týkajúce sa firmwareu pre telefón ako aj všetkých potrebných xml fajlov. TFTP je automaticky vždy spustený ako stand-alone proces pri každej požiadavke nejakého zariadenia o connect zo siete.

Ďalším krokom bude vytvorenie – Generic SIP device – účtu v PBX pre náš telefón. Dajme tomu, klapka (extension)/už.meno č. 100, a heslo Pok123. Pomenujeme si ho ako Test1.

Issabel – ukážkové nastavenie nášho SIP účtu.

Nižšie verzie firmwareu na strane telefónu v minulosti nepodporovali dlhé a zložité heslá. Tento „drb“ som čítal dakde na fóre. Bez toho aby som si overoval jeho pravdivosť sa ho budem pre istotu držať a zvolil som preto také jednoduché, 6-8 miestne heslo. Pre otestovanie funkčnosti a pre potreby demonštrácie v tomto článku sa nad tým nebudem hlbšie zamýšľať.

Príprava SEP…cnf.xml

Jedna z najdôležitejších častí. V adresári TFTP servera vytvoríme súbor podľa kritérií uvedených vyššie, teda v našom prípade SEP001E136C456D.cnf.xml. Kľudne použite nasledovný tvar.

<device>
        <fullConfig>true</fullConfig>
        <deviceProtocol>SIP</deviceProtocol>
        <sshUserId>root</sshUserId>
        <sshPassword>pustimadnu</sshPassword><!-- ssh heslo -->
        <devicePool>
                <dateTimeSetting>
                        <dateTemplate>D/M/Y</dateTemplate>
                        <timeZone>W. Europe Standard/Daylight Time</timeZone><!-- alebo E. Europe Standard/Daylight Time -->
                        <ntps>
                                <ntp>
                                        <name>192.168.4.1</name><!-- NTP SERVER IP/HOSTNAME -->
                                        <ntpMode>Unicast</ntpMode>
                                </ntp>
                        </ntps>
                </dateTimeSetting>
                <callManagerGroup>
                        <members>
                                <member priority="0">
                                        <callManager>
                                                <ports>
                                                        <ethernetPhonePort>2000</ethernetPhonePort>
                                                        <sipPort>5060</sipPort>
                                                        <securedSipPort>5061</securedSipPort>
                                                </ports>
                                                <processNodeName>192.168.4.2</processNodeName><!-- SIP PBX/Asterisk -->
                                        </callManager>
                                </member>
                        </members>
                </callManagerGroup>
        </devicePool>
        <commonProfile>
                <phonePassword></phonePassword>
                <backgroundImageAccess>true</backgroundImageAccess>
                <callLogBlfEnabled>2</callLogBlfEnabled>
        </commonProfile>
        <loadInformation>SIP41.8-4-4S</loadInformation><!-- Verzia Firmware SIP41.8-4-4S odvodene od SIP41.8-4-4S.loads - pozrite zoznam suborov zo stiahnuteho FW -->
        <vendorConfig>
                <disableSpeaker>false</disableSpeaker>
                <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
                <pcPort>0</pcPort>
                <settingsAccess>1</settingsAccess>
                <garp>0</garp>
                <voiceVlanAccess>0</voiceVlanAccess>
                <videoCapability>0</videoCapability>
                <autoSelectLineEnable>0</autoSelectLineEnable>
                <webAccess>1</webAccess>
                <spanToPCPort>1</spanToPCPort>
                <loggingDisplay>1</loggingDisplay>
                <loadServer></loadServer>
        </vendorConfig>
        <userLocale>
                <name>English_United_States</name>
                <uid>1</uid>
                <langCode>en_US</langCode>
                <version>6.0.1.1(1)</version>
                <winCharSet>iso-8859-1</winCharSet>
        </userLocale>
      <networkLocale>United_States</networkLocale>
        <networkLocaleInfo>
                <name>United_States</name>
                <uid>64</uid>
                <version>6.0.1.1(1)</version>
        </networkLocaleInfo>
        <deviceSecurityMode>1</deviceSecurityMode>
        <authenticationURL></authenticationURL>
        <directoryURL></directoryURL>
        <idleURL></idleURL>
        <informationURL></informationURL>
        <messagesURL></messagesURL>
        <proxyServerURL></proxyServerURL>
        <servicesURL></servicesURL>
        <dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
        <dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
        <dscpForCm2Dvce>96</dscpForCm2Dvce>
        <transportLayerProtocol>4</transportLayerProtocol>
        <capfAuthMode>0</capfAuthMode>
        <capfList>
                <capf>
                        <phonePort>3804</phonePort>
                </capf>
        </capfList>
        <certHash></certHash>
        <encrConfig>false</encrConfig>
        <sipProfile>
                <sipProxies>
                        <backupProxy></backupProxy>
                        <backupProxyPort></backupProxyPort>
                        <emergencyProxy></emergencyProxy>
                        <emergencyProxyPort></emergencyProxyPort>
                        <outboundProxy></outboundProxy>
                        <outboundProxyPort></outboundProxyPort>
                        <registerWithProxy>true</registerWithProxy>
                </sipProxies>
                <sipCallFeatures>
                        <cnfJoinEnabled>true</cnfJoinEnabled>
                        <callForwardURI>x--serviceuri-cfwdall</callForwardURI>
                        <callPickupURI>pickup</callPickupURI>
                        <callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
                        <callPickupGroupURI>gpickup</callPickupGroupURI>
                        <meetMeServiceURI>meetme</meetMeServiceURI>
                        <abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
                        <rfc2543Hold>false</rfc2543Hold>
                        <callHoldRingback>2</callHoldRingback>
                        <localCfwdEnable>true</localCfwdEnable>
                        <semiAttendedTransfer>true</semiAttendedTransfer>
                        <anonymousCallBlock>2</anonymousCallBlock>
                        <callerIdBlocking>2</callerIdBlocking>
                        <dndControl>0</dndControl>
                        <remoteCcEnable>true</remoteCcEnable>
                </sipCallFeatures>
               <sipStack>
                        <sipInviteRetx>6</sipInviteRetx>
                        <sipRetx>10</sipRetx>
                        <timerInviteExpires>180</timerInviteExpires>
                        <timerRegisterExpires>3600</timerRegisterExpires>
                        <timerRegisterDelta>5</timerRegisterDelta>
                        <timerKeepAliveExpires>120</timerKeepAliveExpires>
                        <timerSubscribeExpires>120</timerSubscribeExpires>
                        <timerSubscribeDelta>5</timerSubscribeDelta>
                        <timerT1>500</timerT1>
                        <timerT2>4000</timerT2>
                        <maxRedirects>70</maxRedirects>
                        <remotePartyID>false</remotePartyID>
                        <userInfo>None</userInfo>
                </sipStack>
                <autoAnswerTimer>1</autoAnswerTimer>
                <autoAnswerAltBehavior>false</autoAnswerAltBehavior>
                <autoAnswerOverride>true</autoAnswerOverride>
                <transferOnhookEnabled>false</transferOnhookEnabled>
                <enableVad>false</enableVad>
                <preferredCodec>g711alaw</preferredCodec>
                <dtmfAvtPayload>101</dtmfAvtPayload>
                <dtmfDbLevel>3</dtmfDbLevel>
                <dtmfOutofBand>avt</dtmfOutofBand>
                <alwaysUsePrimeLine>false</alwaysUsePrimeLine>
                <alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
                <kpml>3</kpml>
                <natEnabled>false</natEnabled>
                <natAddress></natAddress>
                <stutterMsgWaiting>2</stutterMsgWaiting>
                <callStats>false</callStats>
                <silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
                <disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
                <startMediaPort>16384</startMediaPort>
                <stopMediaPort>32766</stopMediaPort>
                <voipControlPort>5060</voipControlPort>
                <dscpForAudio>184</dscpForAudio>
                <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
                <phoneLabel>menoFonu</phoneLabel><!-- Nazov zobrazeny vedla hodin -->
                <sipLines>
                        <!-- LINE 1 -->
                        <line button="1">
                                <featureID>9</featureID> <!-- cislo 9=SIP -->
                                <featureLabel>Maria</featureLabel><!-- Meno Uctu -->
                                <proxy>192.168.4.2</proxy><!-- SIP PBX/Asterisk -->
                                <port>5060</port>
                                <name>100</name><!-- SIP username -->
                                <displayName>Maria</displayName><!-- SIP Zobrazovane meno -->
                                <autoAnswer>
                                        <autoAnswerEnabled>2</autoAnswerEnabled>
                                </autoAnswer>
                                <callWaiting>3</callWaiting>
                                <authName>100</authName><!-- SIP username -->
                                <authPassword>Pok123</authPassword><!-- SIP heslo -->
                                <sharedLine>false</sharedLine>
                                <messageWaitingLampPolicy>1</messageWaitingLampPolicy>
                                <messagesNumber>*98</messagesNumber> <!-- Cislo na odkazovku -->
                                <ringSettingIdle>4</ringSettingIdle>
                                <ringSettingActive>5</ringSettingActive>
                                <contact>100</contact><!-- SIP username -->
                                <forwardCallInfoDisplay>
                                        <callerName>true</callerName>
                                        <callerNumber>true</callerNumber>
                                        <redirectedNumber>false</redirectedNumber>
                                        <dialedNumber>true</dialedNumber>
                                </forwardCallInfoDisplay>
                        </line>
                        <!-- LINE 2 , ak je potrebna -->
                        <!--<line button="2">
                                   SKOPIROVAT Z LINE 1, AK jE TREBA
                        </line>-->
                </sipLines>
                <!-- SOFTKEY definicie -->
                <softKeyFile>softkey.xml</softKeyFile>
                <!-- DIALPLAN definicie-->
                <dialTemplate>dialplan.xml</dialTemplate>
        </sipProfile>
</device>

Podstatné riadky sú zvýraznené. Ich popis uvádzam aj formou poznámky v samotnom XML ako aj tu.

  • riadok 4,5 – možnosť pristúpiť na telefón aj cez SSH.
  • riadok 12 – nastavte IP adresu NTP servera, ak chcete mať na telefóne aktuálny čas.
  • riadok 26 a 156 – obsahuje IP PBX Asterisku
  • riadok 37 – obsahuje verziu Firmware, ktorú má telefón používať. Vysvetlenie,nájdete v ďalšej kapitole. Platí to čo je uvedené, pokiaľ ste si stiahli inú verziu – nutné uviesť tu správnu.
  • riadok 132 – použitý codec, možnosť zvoliť g711ulaw, g711alaw, alebo g729a
  • riadok 150 – zobrazenie mena, na displeji, hneď vedľa hodín
  • riadok 155, 159 – zobrazenie SIP caller id
  • riadok 158, 171, 165 – autentifikácia SIP účtu

Ostatné položky sú samozrejme meniteľné len ak máte predstavu čo znamenajú. Všetko je povolené. Telefón s Vami bude komunikovať v angličtine. V prípade, že označenie telefónu obsahuje písmeno „G“, teda napr.: 7941G (nutno mrknúť na štítok vzadu) – znamená to, že ide o „globálnu“ distribúciu, ktorá je schopná fungovať aj v inom jazyku. Avšak, tento jazyk treba dodať v ďalšom súbore na stiahnutie – nie je súčasťou firmwéru ktorý telefónu obsahuje.

Zmena jazyka je mimo rámec tohto článku a môj záujem a tak sa jej ani nebudem venovať.

V tomto momente je to všetko čo sa nastavenia PBX a TFTP servera týka.

Na strane CISCO IP telefónu

Je viac ako nutné preflashovať firmware na verziu podporujúcu SIP. Cisco telefóny sú spravované Call managérom využívajúcim Cisco Unified Communications Manager Architecture v skratke CUCM. Absolutne si netreba lámať hlavu nad tým čo všetko to znamená, dôležité je vedieť, že firmware na telefóne je nutné zameniť za verziu podporujúcu základné SIP.

Nemusíte sa obávať, žiaden hacking a sa tu diať nebude. Cisco oficiálne ponúka aj túto verziu firmware pre tieto telefóny. Ísť si po ňu je nutné na download stránky Cisca, pre telefóny rady 7941G. (Pozor, pre vstup na stránky a stiahnutie budete potrebovať účet na strane CISCO webu).

Moja dobre mienená rada v tomto smere je, aby ste si stiahli práve verziu 8.4(4) zo Septembra 2013. Z nepochopiteľných dôvodov najnovšie verzie nefungujú dobre alebo nefungujú s týmto návodom vôbec. Môžu byť za tým rôzne dôvody, možno sa postupom času menila štruktúra SEP…xml fajlu. Nemohol som si ale napríklad nevšimnúť aj problematické, zdĺhavé štartovanie telefónu s novšími verziami firmweru (najmä tým posledným), takže je za tým tých dôvodov možno viac. Každopádne, mnou uvedená verzia, na ktorú Vás mimochodom presmeruvávam aj po kliknutí na vyššie uvedený download je odskúšaná a plne funkčná.

Veľmi rád by som Vám firmware dal aj sem na web ale zrejme by s tým bol problém, každopádne, ak by Cisco medzičasom stránku zrušilo – dajte mi vedieť. Uvedený FW Vám pošlem mailom.

Po stiahnutí a rozbalení zipu nájdeme na disku 8 rôzne pomenovaných súborov s príponami SBN a LOADS. Tým najdôležitejším súborom je term41.defaults.loads ktorý odkazuje na tie ostatné, nemenej dôležité s príponami *41.8-4..*.sbn.

Všetky tieto súbory uložíme priamo do adresára nášho TFTP servera, do zložky /tftpboot.

Factory reset Cisco IP Phone 7941

V ďalšom kroku musíme PRINÚTIŤ telefón vykonať reflash firmwareu. Ako na to povie toto video.

V krátkosti, po zapnutí telefónu k napájaniu podržíme kláves [#] až do vtedy, kým sa nám nerozbliká dvojica lediek na pravej strane displeju. Následne do klávesnice zadáme znaky v tomto poradí – 1,2,3,4,5,6,7,8,0,*,0,# .

Ak všetko prebehne ako má, dôjde k factory resetu telefónu a dostane sa do stavu keď z určeného TFTP servera začne cucať súbory s dostupným firmwareom. Nasleduje reflash, reboot, niekedy ešte raz upgrade až napokon dôjde k prihláseniu k PBX.

Hotovo 🙂

Zdroje:
https://www.cisco.com/
https://www.issabel.com/
https://www.voip-info.org/
+ stránky uvedené v článku

2 Comments on “Sfunkčnenie Cisco IP telefónu 7941 s PBX Asteriskom”

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

Táto webová stránka používa Akismet na redukciu spamu. Získajte viac informácií o tom, ako sú vaše údaje z komentárov spracovávané.