Sonata — servidor de provisionamento SIP

Introdução

Certa vez, a administração aprovou um experimento para implementar telefonia IP na nossa empresa. Como minha experiência nessa área era mínima, a tarefa despertou em mim um enorme interesse, e me dediquei a estudar diversos aspectos do assunto. Ao final desse aprendizado, decidi compartilhar os conhecimentos adquiridos, na esperança de que possam ser úteis para alguém. Então...

Dados de origem

Para a IP-PBX, foi escolhido e implementado o Asterisk. O parque de telefones consiste em dispositivos Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400 e Dlink DPH-150S(E)/F3, Yealink T19 e T21. Essa variedade se deve ao fato de que, dentro do experimento, tomamos a decisão de experimentar um pouco de tudo, para formar nossa própria opinião sobre a relação preço/qualidade/conveniência.

Tarefa

Maximizar a simplicidade e a padronização do processo de configuração de novos aparelhos. Todos os telefones devem estar sincronizados em horário, ter uma lista de contatos carregada a partir de servidor e fornecer acesso às configurações para o administrador.

A solução para essa tarefa é simples — implementar a configuração automática dos telefones, o chamado Provisioning. De fato, é sobre a minha implementação dessa excelente função que vamos falar.

Configuração tftpd, dhcpd

Para distribuir as configurações aos telefones, escolhi o tftp como uma opção universal, suportada por todas as plataformas, fácil de configurar e administrar.

Não foi necessária uma configuração específica para o tftp. Instalei o tftpd padrão e coloquei todos os arquivos necessários em seu diretório raiz.
Os arquivos de configuração foram organizados em pastas de acordo com o fabricante do telefone. No entanto, o aparelho da Cisco não acessou sua pasta, por isso, tive que armazená-lo na raiz.

Para indicar aos telefones a localização do servidor tftp, utilizei a opção 66. Além disso, os dividi em classes separadas por fabricante. Cada classe recebeu seu próprio segmento de endereços e uma pasta individual para os arquivos de configuração. Vale mencionar que os aparelhos da D-link tiveram que ser identificados pelos endereços MAC, já que não fornecem informações sobre o fabricante na solicitação DHCP.

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

Os telefones tiveram que ser excluídos manualmente do pool geral. Caso contrário, eles não conseguiam se conectar à sua ‘piscina de sapos’.
Exemplo de configurações de sub-rede

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

Após reiniciar todos os serviços envolvidos, os telefones foram diretamente ao servidor tftp para buscar as configurações que lhes eram devidas. Só restava colocá-los lá.

Cisco 7906

Esses aparelhos chegaram até mim na embalagem de fábrica. Tive que reprogramá-los para integrá-los ao Asterisk. Mas isso é outra história. Neste caso específico, para configurar o aparelho, criei no diretório raiz do servidor tftp o arquivo SEPAABBCCDDEEFF.cnf.xml. Onde AABBCCDDEEFF é o endereço MAC do aparelho.

Já foram escritas muitas informações sobre a configuração de telefones Cisco, por isso, vou apenas deixar o arquivo de configurações funcionando.
Configurações para cisco

true
 SIP
 root
 ADMIN_PWD

 
 D-M-Y
 Central Pacific Standard Time
     
         
             10.1.1.4
              Unicast
          
     
 

   
 10.1.1.50
 
 2000
 5060
 5061
 
 10.1.1.50
   
 

 Disable


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
 

 User #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

 Russian_Russian_Federation
 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

Se você está prestes a adquirir um telefone desta série, tenha cuidado, a configuração automática é suportada apenas nos dispositivos 150S/F3. No dispositivo 150S/F2 que eu obtive, essa funcionalidade não foi encontrada.

O arquivo de configuração pode estar em formato XML ou texto comum. Para XML, há um requisito: a tag deve estar no início da linha, caso contrário, o parser a ignorará e o valor do parâmetro correspondente não será alterado.

Para configurar o telefone, são utilizados dois arquivos. f0D00580000.cfg — para armazenar as configurações de todos os telefones e 00112233aabb.cfg (endereço MAC em letras minúsculas) para configurações individuais. As configurações individuais, naturalmente, têm prioridade maior.

O conjunto completo de configurações consiste em mais de mil linhas, para não sobrecarregar o artigo, descreverei o conjunto mínimo necessário de configurações.

Os nós obrigatórios são a raiz VOIP_CONFIG_FILE e o nó contido nele version. As configurações serão aplicadas apenas se a versão do arquivo for superior à das configurações atuais no dispositivo. Esse valor pode ser encontrado através da interface web do telefone na seção de manutenção (gerenciamento do sistema). Para telefones com configurações de fábrica, em ambos os casos, isso é 2.0002. Além disso, a versão do arquivo individual deve ser maior que a versão do arquivo geral.

Primeiro, apresento o arquivo com a configuração geral para todos os telefones. Na verdade, ele armazena todas as configurações, enquanto o arquivo individual será responsável apenas pelo número de telefone e pela mensagem na tela.

Nos dois blocos apresentados abaixo, são definidos os parâmetros de fuso horário e sincronização de tempo, a porta inicial para RTP e é ativada a ponte de rede entre as portas WAN e LAN do dispositivo.

Fragmento nº 1

DHCP
2
1
1
0
VOIP
10000
200
10.1.1.4
1


0
60
12
1500


1
1

Os nomes dos parâmetros de configuração são suficientemente "descritivos" para não necessitarem de uma descrição detalhada.
SIP para uma linha

5060


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

Configurações de gerenciamento remoto

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

Configurações do telefone

123
123

0
112
Company
5
1
30
0

1
0,,1
0
0
1


XML-PBook1
Phonebook
http://10.1.1.50/provisioning/dlink-phonebook.xml
:
0
0


friend,home,work,business,classmate,colleague

Todas as outras configurações permanecerão "por padrão". Agora, qualquer telefone Dlink conectado à rede aceitará imediatamente um conjunto padrão de parâmetros. Para definir parâmetros individuais para o aparelho, um arquivo separado é necessário. Nele, é preciso especificar apenas as configurações necessárias para cada assinante.
configurações do assinante

2.0006



SIP1
Usuário #117
117
5060
117
SIP_PWD
3600
1
5060
117
SIP_PWD

Panasonic UT-KX123B

Esses dispositivos obtêm configurações de uma maneira um pouco diferente. A configuração é armazenada em arquivos de texto. O tamanho máximo do arquivo de configuração é de 120 KB. Independentemente do número de arquivos, o tamanho total não deve exceder 120 KB.
O arquivo de configuração consiste em um conjunto de linhas, às quais se aplicam as condições abaixo mencionadas:

  • A primeira linha deve sempre ser um comentário, incluindo a seguinte sequência de caracteres (44 bytes):
    # Panasonic SIP Phone Standard Format File #
    Representação hexadecimal dessa sequência:
    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
    Para evitar alterações acidentais na sequência de caracteres definida, recomenda-se começar o arquivo de configuração pela linha:
    # Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!
  • Os arquivos de configuração devem terminar com uma linha em branco.
  • Cada linha deve terminar com a sequência "".
  • O comprimento máximo de uma linha é de 537 bytes, incluindo a sequência "".
  • As seguintes linhas são ignoradas:
    • linhas que excedem o limite de 537 bytes;
    • linhas em branco;
    • linhas de comentário que começam com o símbolo "#";
  • A linha de cada parâmetro é escrita na forma XXX="yyy" (XXX: nome do parâmetro, yyy: seu valor). O valor deve estar entre aspas duplas.
  • A divisão da linha de parâmetros em várias linhas não é permitida. Isso resultará em um erro de processamento do arquivo de configuração e, consequentemente, em uma falha na inicialização.
  • Os valores de alguns parâmetros devem ser especificados separadamente para cada linha. Um parâmetro com o sufixo "_1" no nome é um parâmetro para a linha 1; "_2"— para a linha 2 e assim por diante.
  • O comprimento máximo do nome do parâmetro é de 32 caracteres.
  • O comprimento máximo do valor do parâmetro é de 500 caracteres, excluindo aspas duplas.
  • Espaços na linha não são permitidos, exceto quando o valor inclui um espaço.
  • Os valores de alguns parâmetros podem ser especificados como "vazios" para definir um valor vazio para o parâmetro.
  • Os parâmetros são especificados sem uma ordem definida.
  • Se o mesmo parâmetro for especificado no arquivo de configuração mais de uma vez, o valor definido primeiro será aplicado.

Um conjunto tão rigoroso de requisitos para o arquivo de configuração, honestamente, me desapontou. Na minha opinião, a interação com servidor o gerenciamento nos telefones Panasonic é extremamente inconveniente. Neste aspecto, o telefone fica muito atrás dos demais.
Ao ligar o dispositivo pela primeira vez (ou após a restauração das configurações de fábrica), ele tenta carregar o chamado arquivo de produto (neste caso, é KX-UT123RU.cfg), que deve conter os caminhos para os demais arquivos de configuração.
Arquivo do produto# 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"

Depois disso, o telefone exibirá uma mensagem na tela informando que a preparação foi concluída com sucesso e aguardará até que seja reiniciado. Após a reinicialização, ele começará a processar os arquivos de configuração necessários.

No arquivo master.cfg, é recomendado especificar as configurações gerais para todos os telefones. Assim como no caso da Dlink, mencionarei apenas alguns parâmetros. Os nomes dos demais parâmetros e seus valores podem ser encontrados na documentação disponível no site do fabricante.
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=""

No arquivo de configuração individual do dispositivo, permanecem apenas as configurações do assinante, por tradição.
aabbccddeeff.cfgDISPLAY_NAME_1=«Usuário #168»

PHONE_NUMBER_1=«168»
SIP_URI_1=«168»
LINE_ENABLE_1=«Ativado»
PROFILE_ENABLE_1=«Ativado»
SIP_AUTHID_1=«168»
SIP_PASS_1=«SIP_PWD»

Grandstream GXP-1400

As configurações desses telefones são armazenadas em um único arquivo xml chamado cfg{mac}.xml. Ou em um arquivo de texto simples chamado cfg{mac}. Este telefone solicita apenas o arquivo de configuração individual, portanto, não é possível otimizar as configurações movendo-as para um arquivo compartilhado. Outra característica da configuração dos Grandstream é a nomeação dos parâmetros. Todos eles são numerados e designados como P###. Por exemplo:

P1650 – controla a interface web para gerenciar o telefone (0 – HTTPS, 1 – HTTP)
P47 – endereço do servidor SIP para conexão.

Se a configuração estiver armazenada em um arquivo de texto, os parâmetros não requerem nenhuma agrupamento e podem estar em qualquer ordem. As linhas que começam com # são consideradas comentários.

Caso as configurações sejam apresentadas em formato xml, devem estar aninhadas dentro do nó <config version="1">, que por sua vez deve estar aninhado dentro do <gs_provision version=«1»>. Todos os parâmetros são gravados como os respectivos tags com o valor do parâmetro dentro.
Exemplo de configuração

<?xml version="1.0" encoding="UTF-8" ?>
<gs_provision version="1">
  <config version="1">
    <P271>1<\/P271>
    <!-- Nome da Conta. Não pode estar vazio. -->
    <P270>109<\/P270>
    <!-- ID do Usuário SIP -->
    <P35>109<\/P35>
    <!-- ID de Autenticação -->
    <P36>109<\/P36>
    <!-- Senha de Autenticação -->
    <P34>SIP_PWD<\/P34>
    <!-- Nome de Exibição (John Doe) -->
    <P3>Usuário# 109<\/P3>
<!-- Configurações Comuns -->
        <P207>10.1.1.50<\/P207>
        <P208>2<\/P208>
   <P47>10.1.1.50<\/P47><!-- servidor sip da linha 1 -->
   <P401>0<\/P401><!-- Desativar Linha 2 -->
   <P2>ADMIN_PWD<\/P2><!-- senha de administrador -->
   <P196>USER_PWD<\/P196><!-- senha da interface web do usuário -->
   <P1362>ru<\/P1362><!-- idioma de exibição -->
        <P212>0<\/P212><!-- Atualizar via TFTP -->
        <P192>10.1.1.50/grandstream<\/P192>
   <P1357>1<\/P1357><!-- bloquear configuração via telefone (apenas básico) -->
   <P64>TZc-11<\/P64><!-- fuso horário -->
   <P30>10.1.1.4<\/P30><!-- servidor NTP -->
        <P330>1<\/P330><!-- Baixar PB via HTTP -->
        <P331>http:\/\/10.1.1.50\/provisioning\/grandstream<\/P331><!-- URL base do catálogo -->
        <P333>30<\/P333><!-- Atualizar automaticamente o catálogo em 30 min -->
  <\/config>
<\/gs_provision>

Yealink T19 e T21

Os aparelhos desses modelos suportam arquivos de configuração individuais para dispositivos e comuns para os modelos. No meu caso, tive que colocar os parâmetros comuns nos arquivos y000000000031.cfg e y000000000034.cfg, respectivamente. Os arquivos de configuração individuais são nomeados de acordo com o endereço MAC: 00112233aabb.cfg.

As configurações para os yealink são armazenadas em formato texto. A única exigência obrigatória é que a primeira linha contenha a versão do arquivo, no formato #!version:1.0.0.1.

Todos os parâmetros são gravados no formato parâmetro = valor. Os comentários devem começar com o símbolo "#". Os nomes dos parâmetros e seus valores podem ser encontrados na documentação no site do fabricante.
configurações gerais#!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 = Russo
#Specify the LCD language, the valid values are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Russo
#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 = Lista de Contatos
features.remote_phonebook.flash_time = 3600

configurações individuais#!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 = Telefone de Teste
#Configure the display name of account1.
account.1.display_name = Usuário 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

Como resultado, graças à incrível função de auto-provisionamento prevista nos telefones mencionados, não surgiram problemas ao conectar novos aparelhos à rede. Tudo se reduziu a descobrir o endereço MAC do telefone e gerar o arquivo de configuração com base no modelo.

Espero que você tenha lido até o fim e extraído benefícios do que foi lido.

Obrigado pela atenção.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster