Ferramentas do usuário

Ferramentas do site


infra-estrutura:voip:asterisk_com_telefoneip_cisco7961

Asterisk com Telefone IP da Cisco 7961

Topologia

Para este post iremos montar a seguinte topologia para exemplificar o ambiente e aprendermos como utilizar um telefone IP da Cisco com asterisk

Para este ambiente temos os seguintes recursos e serviços:

  • 192.168.10.186
    • Servidor Asterisk
    • Servidor TFTP
  • 192.168.10.1
    • Servidor DHCP com opção 66 para fornecer o endereço TFTP

Funcionamento do telefone IP da Cisco

Não vou entrar em detalhes do funcionamento do telefone IP da Cisco apenas o básico e resumidamente. Se precisar de mais informações procure no site da Cisco ou me mande um e-mail que tenho muita documentação. Resumindo o telefone IP da Cisco vem para buscar a configuração em um servidor TFTP, caso ainda não possua o firmware e possível também atualizar o firmware na inicialização. O telefone IP da Cisco trabalha com dois protocolos VOIP:

  • SCCP ou Skinny - Protocolo proprietário da Cisco adquirido quando comprou Selsius Corporation em 1998
  • SIP - Protocolo Livre para implementações de soluções VOIP.

O telefone IP da Cisco trabalha com os dois protocolos, utilizaremos por questões de melhor compatibilidade a versão do firmware que conversa SIP. Assim teremos o Asterisk conversando SIP diretamente. O modelo do telefone que possuo para nosso teste e o 7961, depois de muita luta encontrei o firmware o qual contem os seguintes arquivos:

  • apps41.1-1-3-31.sbn
  • cvm41sip.8-0-3-33.sbn
  • cnu41.3-1-3-31.sbn
  • dsp41.1-1-3-31.sbn
  • jar41sip.8-0-3-33.sbn
  • SIP41.8-0-4SR3AS.loads
  • term41.default.loads
  • term61.default.loads

O telefone IP ja precisa estar carregado com o firmware SIP, caso contrário precisamos atualiza-ló. Para isso teu ambiente deve estar operacional. Quando digo ambiente se trata do servidor DHCP, TFTP, etc. Precisa estar funcionando e com todos os arquivos do firmware no TFTP para o telefone ligar e buscar os arquivos do firmware e aplicar em si :).

Uma coisa e importa o reset do telefone no meu caso para resetar o telefone IP e necessário os seguintes passos: Mantenha pressionado o botão “#” ate que os botões de linha comecem a piscar, ai solte o botão “#” e digite a sequência “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “*”, “0”, “#”, depois o telefone irá procurar o TFTP e os arquivos necessários e ira se atualizar com o firmware definido. Se tiver dúvida tem o seguinte link que ensina o procedimento mas e bem simples, mas LEMBRANDO o procedimento para funcionar seu servidor TFTP e DHCP devem estar configurados e funcionando :). Abaixo segue o link

https://www.3cx.com/sip-phones/factory-reset-cisco-7900-series/

Configuração do DHCP

Vamos a configuração do DHCP, o telefone IP precisa receber um endereço do servidor TFTP que ele precisa buscar firmware no caso de atualização ou arquivos xml's no caso de configurações. Para a configuração do dhcp segue abaixo um exemplo bem simples.

# configuração para a opção 66 e 150 que informa o endereço TFTP
option voip code 66=ip-address;
option voip-tftp-server code 150=ip-address;
 
# este servidor dhcp e o autorizado no segmento de rede
authoritative;
 
# configuração do escopo DHCP
subnet 192.168.10.0 netmask 255.255.255.0 {
  range 192.168.10.160 192.168.10.200;
  option domain-name-servers 192.168.10.1, 8.8.8.8;
  option domain-name "capsula.corp";
  option routers 192.168.10.1;
  option broadcast-address 192.168.10.255;
  default-lease-time 600;
  max-lease-time 7200;
  option voip-tftp-server 192.168.10.186;
  option voip 192.168.10.186;
}

Você deve ter notado que as opções do DHCP para o servidor TFTP podem ser duas: 150 e 66. Quais as diferenças entre elas? Resumindo a opção 150 é proprietária da Cisco e a opção 66 e um padrão IEEE. Telefones IP da Cisco podem ser configurados manualmente ou via DHCP, além deste requisito os telefones precisam de acesso a um servidor TFTP que contém a configuração em format .cnf.xml, o qual configura o telefone para contactar o PABX IP para se registrar como um ramal.

A opção DHCP 150 é proprietário da Cisco. A opção 66 é um padrão aberto. A RFC 2132 define a opção DHCP 66.

Diferenças entre a opção 150 e 66:

Opção DHCP 150 suporta uma lista de servidores TFTP. Opção DHCP 66 somente suporta o endereço IP ou o hostname de um único servidor TFTP.

Configuração do TFTP

Para a configuração do TFTP e bem simples e necessário somente instala-lo e colocar os arquivos de configuração e firmware na raiz do TFTP.

# apt install tftpd-hpa

O diretório raiz do mesmo fica em “/var/lib/tftpboot/“.

Caso precise debugar os arquivos que são acessados no tftp edite o arquivo ”/etc/default/tftpd-hpa” e procure a seguinte linha.

# /etc/default/tftpd-hpa
 
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

e adicione no final da linha que esta marcada a opção –verbose, ficando da seguinte forma:

# /etc/default/tftpd-hpa
 
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --verbose"

Configuração asterisk Ramais

Agora vem a parte foda da configuração: criar o arquivo .cnf.xml que o telefone IP busca para se auto configurar. Vamos la para cria-lo precisamos do MAC do telefone IP. No meu caso o endereço IP do meu telefone é 192.168.10.178 vamos pegar o MAC via comando arp, ou no próprio aparelho. Vamos pegar via comando arp.

root@halljordan:/etc/asterisk# arp -an
? (192.168.10.181) at 38:3f:10:04:b8:a8 [ether] on enp0s11
? (192.168.10.1) at 00:1a:3f:79:f2:37 [ether] on enp0s11
? (192.168.10.178) at 00:21:d8:bb:45:42 [ether] on enp0s11
? (192.168.10.70) at 20:47:47:fc:f5:ea [ether] on enp0s11
root@halljordan:/etc/asterisk#

O endereço MAC do telefone IP é 00:21:d8:bb:45:42. O formato do arquivo de configuração segue o formato

SEPXXXXXXXXXXXX.cnf.xml

A string de 12 caracter “X” vamos preencher com o MAC do telefone IP ficando da seguinte forma 0021D8BB4542. Com isso o arquivo final ficando com o seguinte formato de nome.

SEP0021D8BB4542.cnf.xml

Tudo certo definimos o nome do arquivo agora vem a parte do conteúdo, vou colocar o meu arquivo e marcar as opções que deve alterar para teu ambiente.

<device xsi:type="axl:XIPPhone" ctiid="1566023366">
<deviceProtocol>SIP</deviceProtocol>
<sshUserId>cisco</sshUserId>
<sshPassword>cisco</sshPassword>
<devicePool>
<dateTimeSetting>
<dateTemplate>D-M-YA</dateTemplate>
<!--<timeZone>UTC Standard/Daylight Time</timeZone>-->
<timeZone>South America Standard/Daylight Time</timeZone>
</dateTimeSetting>
<callManagerGroup>
<members>
<member priority="0">
<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
</ports>
<processNodeName>192.168.10.186</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
</devicePool>
<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>x-cisco-serviceuri-pickup</callPickupURI>
<callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
<callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
<meetMeServiceURI>x-cisco-serviceuri-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>
<dtmfAvtPayload>101</dtmfAvtPayload>
<dtmfDbLevel>3</dtmfDbLevel>
<dtmfOutofBand>avt</dtmfOutofBand>
<alwaysUsePrimeLine>false</alwaysUsePrimeLine>
<alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
<kpml>3</kpml>
<phoneLabel>1109</phoneLabel>
<stutterMsgWaiting>1</stutterMsgWaiting>
<callStats>false</callStats>
<silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
<disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
<startMediaPort>16384</startMediaPort>
<stopMediaPort>32766</stopMediaPort>
<sipLines>
<line button="1">
<featureID>9</featureID>
<featureLabel>1109</featureLabel>
<proxy>192.168.10.186</proxy>
<port>5060</port>
<name>1109</name>
<displayName>1109</displayName>
<autoAnswer>
<autoAnswerEnabled>2</autoAnswerEnabled>
</autoAnswer>
<callWaiting>3</callWaiting>
<authName>1109</authName>
<authPassword>password</authPassword>
<sharedLine>false</sharedLine>
<messageWaitingLampPolicy>1</messageWaitingLampPolicy>
<messagesNumber>700</messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>
<contact>1109</contact>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
</line>
 
</sipLines>
<voipControlPort>5060</voipControlPort>
<dscpForAudio>184</dscpForAudio>
<ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
<dialTemplate>dialplan.xml</dialTemplate>
</sipProfile>
<commonProfile>
<phonePassword>password</phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>
<loadInformation>SIP41.8-0-4SR3AS</loadInformation>
 
<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>
<daysDisplayNotActive>1,2,3,4,5,6,7</daysDisplayNotActive>
<displayOnTime>00:00</displayOnTime>
<displayOnDuration>00:00</displayOnDuration>
<displayIdleTimeout>00:00</displayIdleTimeout>
<spanToPCPort>1</spanToPCPort>
<loggingDisplay>1</loggingDisplay>
<loadServer></loadServer>
</vendorConfig>
<versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp>
<networkLocale>New_Zealand</networkLocale>
 
<networkLocaleInfo>
<name>New_Zealand</name>
<version>5.0(2)</version>
</networkLocaleInfo>
 
<deviceSecurityMode>1</deviceSecurityMode>
<authenticationURL>http://www/ipphone/authenticate.php</authenticationURL>
<directoryURL>http://www/ipphone/directory.xml</directoryURL>
<idleURL></idleURL>
<informationURL>http://www/ipphone/GetTelecasterHelpText.jsp</informationURL>
<messagesURL></messagesURL>
<proxyServerURL>proxy:3128</proxyServerURL>
<servicesURL>http://www/ipphone/services.xml</servicesURL>
<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
<transportLayerProtocol>2</transportLayerProtocol>
<capfAuthMode>0</capfAuthMode>
<capfList>
<capf>
<phonePort>3804</phonePort>
</capf>
</capfList>
 
<certHash></certHash>
<encrConfig>false</encrConfig>
 
</device>

Se esqueci algum item me perdoem, mas com isso já deve funcionar, uma atenção especial a tag <loadInformation>SIP41.8-0-4SR3AS</loadInformation> ela diz qual o firmware que devo aplicar veja a saida de uma listagem no servidor TFTP.

root@halljordan:/var/lib/tftpboot# ls -l
total 5972
-rw-r--r-- 1 root root    5788 Sep 29 18:06 SEP0021D8BB4542.cnf.xml
-rw-r--r-- 1 root root     644 Sep 28 21:51 SIP41.8-0-4SR3AS.loads
-rw-r--r-- 1 root root 2548198 Sep 28 21:51 apps41.1-1-3-31.sbn
-rw-r--r-- 1 root root  417824 Sep 28 21:51 cnu41.3-1-3-31.sbn
-rw-r--r-- 1 root root 2423295 Sep 28 21:51 cvm41sip.8-0-3-33.sbn
-rw-r--r-- 1 root root      92 Sep 29 18:05 dialplan.xml
-rw-r--r-- 1 root root  484353 Sep 28 21:51 dsp41.1-1-3-31.sbn
-rw-r--r-- 1 root root  200805 Sep 28 21:51 jar41sip.8-0-3-33.sbn
-rw-r--r-- 1 root root     641 Sep 28 21:51 term41.default.loads
-rw-r--r-- 1 root root     641 Sep 28 21:51 term61.default.loads
root@halljordan:/var/lib/tftpboot# 

Vejam que a tag repete o nome do arquivo tirando a extensão .loads, isso é regra se mudar o firmware tem que alterar o xml de configuração. Outro detalhe que tive problema e com a discagem. O telefone IP se registrava mas o primeiro número que teclava ele ja dava o dial, para isso você precisa de um timeout entre os digitos e quem define isso e o arquivo de dialplan.xml. Segue o mesmo abaixo. Não esqueçam senão a primeira tecla que apertar o telefone IP irá executar o dial. Deixei o timeout entre digitos de 5 segundos.

<DIALTEMPLATE>
    <TEMPLATE MATCH="*" Timeout="5"/> <!-- Anything else -->
</DIALTEMPLATE>

Teste de funcionamento.

Para o teste vou postar apenas um vídeo. :)