A idéia desse material me veio no ano passado, quando, depois de fazer um grande círculo em nossa imensa, no final do mês recebi contas de roaming. Apesar das garantias das empresas de telefonia móvel sobre roaming gratuito no país, o tráfego de SMS ou Internet pode ser cobrado separadamente. E as atas incluídas na tarifa são válidas apenas na “região de origem”. Bem, desde que este ano os planos incluem viajar não apenas no meu país de origem, comecei a realizar minha idéia - minha própria central telefônica fixa em casa, que poderá entrar em contato comigo em qualquer lugar do mundo.
Ao longo do caminho, resolvi o problema das comunicações telefônicas entre apartamentos e casas de parentes, pois o tempo das negociações internas era calculado não apenas por horas, mas por dezenas de horas.
Pequeno spoiler: como resultado, consegui instalar o Asterisk no NAS e no roteador

Então cheguei à conclusão de que preciso da minha própria telefonia. Pode-se escolher qualquer um dos serviços de telefonia SIP que estão presentes em grande número no mercado. Mas eu tinha uma lista de requisitos que nenhum dos operadores atendeu:
- Escolha independente de números internos
- Acesso a linhas de comunicação externas com possibilidade de chamadas para telefones fixos e celulares
- Possibilidade de escolher uma operadora que fornece telefonia IP
- A capacidade de usar o cartão SIM da operadora selecionada com a tarifa "telefônica" usual
- Existência de menu de voz para encaminhamento de uma chamada recebida para o assinante necessário
- Custo mínimo ou zero de manutenção \ manutenção da comunicação interna
Muitas operadoras oferecem uma central telefônica virtual e até um menu de voz. Mas este serviço já está pago. Algumas operadoras permitem chamadas dentro de sua rede gratuitamente, mas há um problema ao discar números longos. E certamente ninguém permite que você use o cartão SIM da operadora selecionada com o custo mínimo de chamadas ou minutos pré-pagos. Então decidi me tornar minha própria operadora de telecomunicações.
Primeiro passo Escolha da Plataforma: VirtualizaçãoComo eu já estava lidando com telefonia IP, foi decidido aumentar meu PBX baseado em Asterisk - é grátis, existem muitos fóruns, manuais e ... por que não? Consegui alguns aparelhos com suporte SIP e comecei a pensar na plataforma para trabalhar com o Asterisk. Para colocá-lo nas nuvens ou em um servidor virtual, isso significaria que mais cedo ou mais tarde você teria que pagar, mas então a idéia de fazer a telefonia entrar em colapso gratuito. Portanto, decidi usar a função de virtualização no meu QNAP TS-451 NAS. Eu já escrevi sobre este chip de unidade de rede, para que você possa
ler mais . O desempenho do sistema era suficiente não apenas para o trabalho do Asterisk, mas também para a interface da web, então decidi usar a distribuição Elastix. Devo dizer que a última distribuição disponível no site oficial do Elastix.org no número 5 já é shareware, por isso recomendo procurar a versão 4 em torrents - ela era gratuita e distribuída gratuitamente, mas agora não está disponível no site.
A criação de usuários no Elastix é descrita muitas vezes, mas o restante não é abordado em detalhes na rede. Portanto, descreverei a conexão do provedor Multifon SIP da Megafon e a criação de um menu de voz com encaminhamento de chamadas.
Crie um tronco com os parâmetros da sua conta no Multifon. Você pode conectar esta opção a qualquer número de operador do Megafon. A cobrança não depende do plano tarifário selecionado e é feita para cada minuto de uma chamada efetuada. A caixa de entrada é gratuita. Duas linhas de conversa são suportadas ao mesmo tempo. Além disso, você pode configurar que as chamadas recebidas sejam direcionadas apenas para o telefone, telefone + multiphone, somente para o multiphone.
Configurações de texto para aqueles que desejam adicionar um tronco Multifon a eles mesmos:
Trunk MultifonDetalhes do par:
username = phone_number
type = peer
secret = password
port = 5060
nat = yes
inseguro = porta, convite
host = sbc.megafon.ru
fromuser = phone_number
fromdomain = multifon.ru
dtmfmode = inband
contexto = do tronco
Registrar String:
phone_number: password@multifon.ru/ phone_number
Portanto, estamos conectados ao provedor SIP e agora podemos encaminhar a chamada recebida para qualquer um dos números de ramal. Mas e se você quiser que o chamador escolha o número do ramal a discar? Você pode criar um menu de voz com uma opção de destinatário. Farei uma descrição passo a passo.
Crie um menu de voz no ElastixVá para Gravações do sistema. Aqui os parâmetros da gravação de voz que precisam ser feitos já estão escritos: PCM, 16 bits, 8000 Hz. Isso pode ser feito no utilitário de gravação padrão e em programas de terceiros como o SoundForge.

Depois que a saudação de voz for criada e carregada no servidor, vá para o item de menu IVR. Criamos um novo menu de voz e selecionamos o arquivo de boas-vindas, bem como a reação ao pressionar os botões. No meu caso, escolhi que, pressionando o número "3", o número "101" será chamado e assim por diante. Se o botão errado for selecionado ou o chamador não pressionar um único botão, a chamada será encaminhada para o ramal 304.

Agora precisamos fazer com que a chamada recebida chegue ao nosso menu de voz. Vamos ao item Rotas de entrada e criamos uma nova regra. No último parágrafo de "Definir destino", selecione IVR e a fila criada anteriormente, que chamei de "dozvon".
Nós salvamos e usamos. Tudo isso funcionou por cerca de um mês sem falhas, mas isso me pareceu insuficiente. Afinal, nem toda casa possui um NAS com uma máquina virtual ou um servidor no qual você pode aumentar o Asterisk, mas quase toda casa possui um roteador!
Possíveis problemas e sua solução com um servidor virtualNo processo de criação do servidor e do encaminhamento de porta, verificou-se que a operação de duas máquinas virtuais e um servidor físico na mesma porta de rede não é muito eficaz. A solução mais simples foi tirar proveito do sistema de virtualização e selecionar uma interface de rede separada para uma máquina virtual. Acabou sendo muito simples fazer isso com as ferramentas QNAP integradas. Depois disso, a própria máquina virtual NAS + 1 permaneceu na primeira interface de rede e a segunda máquina virtual na segunda interface de rede.
Etapa 2: Levantar o Asterisk no roteadorAconteceu que eu uso o provedor Yota, mas não uso seus roteadores originais. Por um longo tempo, resolvi um excelente roteador da Zyxel - Keenetic LTE. Há alguns anos, eu já o testei nas condições mais adversas do interior e fiquei completamente satisfeito - há um
material separado sobre isso em Habré.
No firmware NDMS mais recente, ou mais precisamente, a partir do firmware 2.08.B, o suporte para pacotes OPKG está incluído na família de roteadores Zyxel Keenetic. Isso significa que você pode colocar o software mais diversificado. (Há muito
software adaptado para roteadores Zyxel). Por que não colocar o Asterisk lá?
É importante que o roteador tenha no mínimo 128 MB de RAM. Mal disse o que fez!
É ainda mais agradável porque os especialistas da Zyxel prepararam um
manual para implantar o Asterisk em seus roteadores. Em princípio, para implantar a telefonia em um roteador, basta seguir as instruções passo a passo. E vou lhe dizer como eu melhorei e trouxe o funcionamento desse sistema para o que estava girando em um servidor virtual separado.
A primeira coisa que me deparei foi um problema claro ao iniciar o roteador após a reinicialização do software. Acontece que minha unidade flash, conectada à porta USB do roteador, consome corrente de até 0,16A. Isso acabou sendo suficiente para que o modem LTE no roteador Zyxel Keenetic LTE não pudesse ser iniciado periodicamente. Tudo foi curado ao conectar uma unidade flash através de um hub USB externo com energia adicional. Tomou o tempo testado por muitas pessoas
D-Link DUB-H7 . Isso acabou com os problemas. Acredito que os roteadores com um par de portas USB funcionem sem essas muletas.
Agora vamos às configurações do Asterisk. Aqui você já precisa editar todas as canetas. Existem duas maneiras: passar pelo SSH e editar lá (o MC está presente) ou contornar o endereço IP do roteador e editar os arquivos usando o Notepad ++. Ambas as opções me convinham e eu comecei a trabalhar. Adicionei meus usuários, registrei o multi-tronco no arquivo sip.conf. Resta apenas fazer uma fila de voz. Coloquei o arquivo de voz de boas-vindas em
\\ 192.168.1.1 \ Asterisk-blue \ var \ lib \ asterisk \ sounds \ ru e fiz as seguintes alterações no arquivo extensions.conf.
Fazendo um menu de voz no Asterisk[saída externa]
; ------------------ Multifon - exten => _8 .........., 1, NoOp ()
exten => _8 .........., n, Conjunto (__ SIP_CODEC_OUTBOUND = ulaw)
exten => _8 .........., n, Conjunto (__ SIP_CODEC_INBOUND = ulaw)
exten => _8 .........., n, Resposta ()
exten => _8 .........., n, Aguarde (2)
exten => _8 .........., n, Reprodução (/ opt / var / lib / asterisk / sounds / itsp_names / multifon)
exten => _8 .........., n, Disque (SIP / Multifon / 7 $ {EXTEN: 1} ,, T)
exten => _8 .........., n, Hangup ()
[entrada multifonizada]; ===== Chamada recebida da Multifon =====
exten => _........, 1, NoOp ()
exten => _........, n, Aguarde (4)
exten => _........, n, Resposta ()
exten => _........, n (reprodução), NoOp ()
exten => _........, n, Aguarde (1)
exten => _........, n, Reprodução (olá)
exten => _........, n, Aguarde (0,5)
exten => _........, n, Reprodução (priv)
exten => _........, n, Definir (TIMEOUT (dígito) = 1)
exten => _........, n, NoOp ()
exten => _........, n, WaitExten (7)
exten => _1,1, NoOp ()
exten => _1, n, Set (__ SIP_CODEC_OUTBOUND = ulaw)
exten => _1, n, Set (__ SIP_CODEC_INBOUND = ulaw)
exten => _1, n, Set (CALLERID (num) = 8 $ {CALLERID (num): 1})
exten => _1, n (dial_ext), Dial (SIP / 101.60, mt)
exten => _2,1, NoOp ()
exten => _2, n, Set (__ SIP_CODEC_OUTBOUND = ulaw)
exten => _2, n, Conjunto (__ SIP_CODEC_INBOUND = ulaw)
exten => _2, n, Conjunto (CALLERID (num) = 8 $ {CALLERID (num): 1})
exten => _2, n (dial_ext), Dial (SIP / 302.60, mt)
exten => _3,1, NoOp ()
exten => _3, n, Conjunto (__ SIP_CODEC_OUTBOUND = ulaw)
exten => _3, n, Conjunto (__ SIP_CODEC_INBOUND = ulaw)
exten => _3, n, Set (CALLERID (num) = 8 $ {CALLERID (num): 1})
exten => _3, n (dial_ext), Dial (SIP / 304.60, mt)
Então funcionou. As chamadas efetuadas passam pelo Multifon, as chamadas internas entre assinantes são gratuitas e as chamadas recebidas pelo Multifon podem ser endereçadas a qualquer um dos três assinantes. Mas me pareceu não o suficiente. E é uma pena que apenas o Megafone ofereça uma conexão SIP alternativa a uma linha de celular. E se você quiser usar outro provedor de celular? Existe uma solução para o problema!
Etapa 3: conectamos qualquer operadora móvel ao nosso AsteriskO último passo foi conectar qualquer operadora móvel ao nosso servidor de telefonia. A solução mais lógica seria conectar um gateway GSM-SIP, que fornece um tronco SIP na saída. Mas o custo de tais dispositivos por 1 cartão SIM começa a partir de 9 mil rublos, por isso foi decidido o contrário. Encontramos um modem com suporte de voz. No nosso caso, acabou sendo o Huawei E3131. Como desbloqueá-lo e ativar os recursos de voz foi descrito repetidamente na rede, para que não me distraia com isso. Nós inserimos o cartão SIM que precisamos na porta do hub USB e, em primeiro lugar, desligamos a operação como um modem 3G no menu.

Então começamos a configurar os arquivos do Asterisk. Primeiro, instale o pacote Dongle com o comando no
console opkg install asterisk11-chan-dongle . Após a instalação, abra o arquivo dongle.conf e edite-o para obter o seguinte:
Arquivo de trabalho dongle.conf[dongle]
intervalo = 15
[padrões]
contexto = entrada de dongle
rxgain = 0
txgain = 0
usecallingpres = yes
callwaiting = no
dtmf = inband
mindtmfgap = 45; intervalo mínimo do final das visualizações DTMF do início do próximo em ms
mindtmfduration = 80; duração mínima do tom DTMF em ms
mindtmfinterval = 200; intervalo mínimo entre as extremidades do DTMF dos mesmos dígitos em ms
[GSM1]
audio = / dev / ttyUSB1
data = / dev / ttyUSB2
imei = *****************; E3131 - Digite o modem IMEI
Salve o arquivo e vá para o arquivo extensions.conf. O multifon pode ser comentado e adicionado ao trabalho com o modem.
Registramos a operação de chamadas via modem USB no arquivo extensions.conf[saída de dongle]; para chamadas realizadas:
; ------------------ GSM1 Donle - exten => _8 .........., 1, NoOp ()
exten => _8 .........., n, Conjunto (__ SIP_CODEC_OUTBOUND = ulaw)
exten => _8 .........., n, Conjunto (__ SIP_CODEC_INBOUND = ulaw)
exten => _8 .........., n, Resposta ()
exten => _8 .........., n, Aguarde (2)
exten => _8 .........., n, Reprodução (/ opt / var / lib / asterisco / sons / nome_do_pessoa / beeline-gsm)
exten => _8 .........., n, Disque (DONGLE / GSM1 / 8 $ {EXTEN: 1} ,, T)
exten => _8 .........., n, Hangup ()
[entrada de dongle]; para chamadas recebidas:
exten => s, 1, NoOp ()
exten => s, n, espera (4)
exten => s, n, resposta ()
exten => s, n (reprodução), NoOp ()
exten => s, n, Aguarde (1)
exten => s, n, Reprodução (olá)
exten => s, n, espera (0,5)
exten => s, n, Reprodução (priv)
exten => s, n, Definir (TIMEOUT (dígito) = 1)
exten => s, n, NoOp ()
exten => s, n, WaitExten (7)
exten => _1,1, NoOp ()
exten => _1, n, Set (__ SIP_CODEC_OUTBOUND = ulaw)
exten => _1, n, Set (__ SIP_CODEC_INBOUND = ulaw)
exten => _1, n, Set (CALLERID (num) = 8 $ {CALLERID (num): 1})
exten => _1, n (dial_ext), Dial (SIP / 101.60, mt)
exten => _2,1, NoOp ()
exten => _2, n, Set (__ SIP_CODEC_OUTBOUND = ulaw)
exten => _2, n, Conjunto (__ SIP_CODEC_INBOUND = ulaw)
exten => _2, n, Conjunto (CALLERID (num) = 8 $ {CALLERID (num): 1})
exten => _2, n (dial_ext), Dial (SIP / 302.60, mt)
exten => _3,1, NoOp ()
exten => _3, n, Conjunto (__ SIP_CODEC_OUTBOUND = ulaw)
exten => _3, n, Conjunto (__ SIP_CODEC_INBOUND = ulaw)
exten => _3, n, Set (CALLERID (num) = 8 $ {CALLERID (num): 1})
exten => _3, n (dial_ext), Dial (SIP / 304.60, mt)
Agora tudo começou e funcionou como deveria. O Asterisk aceita chamadas recebidas para um número e o usuário seleciona para onde chamá-lo, selecionando um número. Uma chamada efetuada passa por qualquer operadora de celular, onde você estiver. Ou seja, você pode inserir seu cartão SIM em um modem USB e ir a qualquer lugar do mundo. Lá é suficiente ter acesso à rede e no smartphone / laptop para ter um cliente SIP que se conectará ao seu servidor Asterisk. A solução é executada e funciona. As falhas resultantes foram tratadas adicionando um hub USB com energia externa e substituindo a unidade flash, pois algumas unidades estavam com defeito. Todo o trabalho para colocar a telefonia em operação levará uma noite.
Para impedir que esse trabalho desapareça, você pode criar um backup de todo o Asterisk em uma unidade flash com um comando:
Faça um backup do Asterisk em uma unidade flashtar cvzf / opt / backup-`date "+% Y-% m-% d_% H-% M" .tar.gz -C / opt / bin etc lib doméstica perdida + raiz sbin compartilhada compartilhada sbin raiz tmp usr var
Bônus para proprietários de Zyxel Keenetic LTENote-se que este roteador também é equipado com dois clientes SIP com portas físicas FXS, às quais você pode conectar qualquer telefone analógico. E esse cliente se conecta facilmente ao servidor Asterisk, que está rodando nele.
Bônus para proprietários de Zyxel Keenetic *Se você não deseja gastar dinheiro comprando telefones SIP, a linha de roteadores Keenetic suporta o adaptador Zyxel DECT, que adiciona a função de telefonia SIP com a capacidade de conectar qualquer telefone sem fio DECT.
ConclusãoO problema da comunicação livre entre diversos assinantes com conversas frequentes e longas é resolvido. A tarefa de “presença” do assinante na cidade e comunicação gratuita com o proprietário do número, onde quer que ele esteja, também é resolvida. A solução QNAP TS-451 NAS com virtualização se beneficia da capacidade de configurar o Asterisk através de uma interface da web. Mas a solução com um roteador não exige quase nenhum custo. Asterisk - é fácil! Por que pagar pelo roaming quando a conexão pode ser gratuita?
Desejo agradecer separadamente à equipe da Zyxel por sua capacidade de resposta, assistência na experimentação e aumento da funcionalidade de seus dispositivos.
PS Como comentado corretamente abaixo, quase todas as operadoras de celular proíbem o uso de um cartão SIM para criar um portão GSM. De fato, ninguém o bloqueará até você começar a operação comercial do seu portão. O autor não é responsável por suas ações.
No entanto, conheço casos em que as empresas usavam dezenas de cartões SIM em gateways GSM para fazer chamadas baratas para números de celular.