Neste artigo, tentarei descrever passo a passo o processo de instalação de um servidor de teste para um maravilhoso projeto. , até que esteja totalmente funcional, e mostrar técnicas práticas para trabalhar com mikrotik: configuração através de parâmetros, execução de scripts, atualização, instalação de módulos adicionais, etc.
O objetivo do artigo é incentivar colegas a abandonar a gestão de dispositivos de rede com ferramentas horríveis e improvisadas, como scripts caseiros, Dude, Ansible, etc. E, a esse respeito, provocar celebrações e júbilo nas praças.
0. Escolha
Por que freeacs e não genie-acs, mencionado em , como uma opção mais ativa?
Porque há publicações de espanhóis sobre genie-acs com mikrotik. Aqui estão elas e do MUM do ano passado. Auto-sharjis nos slides — isso é incrível, mas eu gostaria de me afastar do conceito de escrever scripts, para executar scripts, para executar scripts…
1. Instalação do freeacs
Iremos instalar no Centos7, e como os dispositivos transmitem muitos dados, e o ACS trabalha ativamente com o banco de dados — não vamos economizar recursos. Para um funcionamento confortável, alocaremos 2 núcleos de CPU, 4GB de RAM e 16GB de armazenamento SSD raid10. Eu estarei instalando o freeacs em um contêiner LXC do Proxmox VE, mas você pode trabalhar com qualquer ferramenta que preferir.
Não se esqueça de configurar a hora correta na máquina com ACS.
O sistema será de teste, então não vamos complicar e apenas utilizaremos o script de instalação gentilmente fornecido, como está.
wget https://raw.githubusercontent.com/freeacs/freeacs/master/scripts/install_centos.sh
chmod +x install_centos.sh
./install_centos.shAssim que a execução do script for concluída, você poderá acessar imediatamente a interface web pelo IP da máquina, com as credenciais admin/freeacs.

Aqui está uma interface minimalista agradável, e como tudo funcionou bem e rapidamente.
2. Configuração inicial do freeacs
A unidade básica de gestão para o ACS é a unidade ou CPE (Customer Premises Equipment). E o mais importante que precisamos para gerenciar as unidades é seu Tipo de Unidade, ou seja, o modelo de equipamento que determina o conjunto de parâmetros configuráveis da unidade e seu software. Mas como ainda não sabemos como cadastrar corretamente um novo Tipo de Unidade, será melhor perguntar ao próprio dispositivo, ativando o Modo de Descoberta.
Tal modo não deve ser usado em produção, mas precisamos rapidamente iniciar o motor e ver as capacidades do sistema. Todas as configurações principais são armazenadas em /opt/freeacs-*. Portanto, abrimos
vi /opt/freeacs-tr069/config/application-config.conf , encontramos
discovery.mode = falsee mudamos para
discovery.mode = trueAlém disso, é desejável aumentar os tamanhos máximos dos arquivos com os quais o nginx e o mysql trabalharão. Para o mysql, adicionamos a linha em /etc/my.cnf
max_allowed_packet=32M, e para o nginx, em /etc/nginx/nginx.conf adicionamos
client_max_body_size 32m;na seção http. Caso contrário, poderemos trabalhar com firmwares não maiores que 1M.
Reiniciamos, e estamos prontos para trabalhar com os dispositivos.
E teremos como dispositivo (CPE) o pequeno trabalhador .
Antes da conexão de teste, é desejável configurar manualmente o CPE para um mínimo operacional, para que os parâmetros que você desejar configurar posteriormente não estejam vazios. Para o roteador, você pode habilitar o cliente dhcp no ether1, instalar o pacote tr-069client e definir senhas.
3. Conectando o Mikrotik
É aconselhável conectar todas as unidades usando um número de série válido como login. Assim, você entenderá tudo nos logs. Alguns aconselham usar o MAC WAN — não acredite. Outros usam um par de login/senha comum para todos — evite-os.
Abrimos o log tr-069 para monitorar as "negociações"
tail -f /var/log/freeacs-tr069/tr069-conversation.logAbrimos o winbox, na seção de menu TR-069.
ACS URL: http://10.110.0.109/tr069/prov (substitua pelo seu IP)
Username: 9249094C26CB (copiamos o número de série de system>routerboard)
Password: 123456 (não é necessário para descoberta, mas é bom ter)
Não alteramos o intervalo de inform sobre periodicidade. Esta configuração será fornecida por meio do nosso ACS
Abaixo estão as configurações para a inicialização remota da conexão, mas não consegui fazer o mikrotik funcionar rapidamente com isso. Embora com os telefones o remote request funcione "de fábrica". Terá que ser investigado.

Após pressionar o botão Aplicar — haverá troca de dados no terminal, e na interface web do Freeacs será possível ver nosso roteador com o tipo de unidade "hAPaclite" criado automaticamente.

O roteador está conectado. Podemos verificar o tipo de unidade criado automaticamente. Abrimos Easy Provisioning > Unit Type > Unit Type Overview > hAPaclite. O que não há lá! Um total de 928 parâmetros (eu conferi no shell). Se isso é muito ou pouco — vamos descobrir depois, mas por enquanto, vamos apenas dar uma olhada. Veja, isso significa Tipo de Unidade. Esta é a lista de parâmetros suportados com chaves, mas sem valores. Os valores são definidos em níveis inferiores — Perfis e Unidades.
4. Configurando o Mikrotik
Chegou a hora de baixar Este guia é de 2011 — como uma garrafa de um bom vinho envelhecido. Vamos abri-lo e deixá-lo respirar.
Agora, na interface web, vamos clicar no lápis ao lado da nossa unidade e entrar no modo de configuração da unidade. Ele se parece com isso:

Vamos dar uma rápida olhada no que há de interessante nesta página:
Bloco de Configuração da Unidade
- Perfil: Este é o perfil dentro do Tipo de Unidade. A hierarquia é a seguinte:
UnitType > Perfil > Unidade. Ou seja, podemos criar, por exemplo, perfishAPaclite > hotspotehAPaclite > branch, mas dentro do modelo do dispositivo
Bloco de Provisionamento com botões
Dicas sugerem que todos os botões no bloco de Provisionamento podem aplicar instantaneamente a configuração através do ConnectionRequestURL. Mas, como mencionei antes, isso não funciona, portanto, após pressionar os botões, será necessário reiniciar o cliente tr-069 no mikrotik para iniciar o provisionamento manualmente.
- Freq/Spread: Com que frequência enviar a configuração ± %, para reduzir a carga no servidor e nos canais de comunicação. Por padrão, está definido como 7/20, ou seja, todos os dias ± 20% e a dica sobre como isso se traduz em segundos. Por enquanto, não faz sentido alterar a frequência de entrega, pois isso geraria ruído nos logs e nem sempre resultaria na aplicação esperada das configurações.
Bloco de Histórico de Provisionamento (últimas 48 horas)
- À primeira vista, o histórico parece normal, mas ao clicar no cabeçalho — você acessa uma ferramenta de pesquisa conveniente na base de dados, com regexp e recursos adicionais.
Bloco de Parâmetros
O maior e mais importante bloco, onde, de fato, os parâmetros para esta unidade são definidos e lidos. Atualmente, vemos apenas os parâmetros de sistema mais importantes, sem os quais o funcionamento do ACS com a unidade é impossível. Mas nós sabemos que temos no Tipo de Unidade — 928. Vamos ver todos os valores e decidir como lidar com eles no mikrotik.
4.1 Lendo parâmetros
No bloco de Provisionamento, pressionamos o botão Ler tudo. No bloco — uma mensagem em vermelho. À direita, aparecerá a coluna CPE (valor atual). No sistema, o parâmetro ProvisioningMode foi alterado para READALL.

E... nada acontecerá, exceto uma mensagem em System.X_FREEACS-COM.IM.Message Kick failed at....
Reinicie o cliente TR-069 ou reinicie o roteador, e continue atualizando a página do navegador até que os parâmetros apareçam à direita em retângulos cinzas alegres.
Se alguém quiser experimentar algo mais antigo — esse modo está descrito no manual como 10.2 Modo de Inspeção. Ele é ativado e funciona de maneira um pouco diferente, mas a essência está bem descrita.

O modo READALL se desligará após 15 minutos, e tentaremos descobrir o que há de útil aqui e o que pode ser ajustado "em tempo real", enquanto estamos neste modo.
É possível alterar endereços IP, ativar/desativar interfaces, regras de firewall com comentários (caso contrário, será um completo caos), Wi-Fi e outras pequenas coisas.
Ou seja, ainda não é viável configurar o mikrotik adequadamente apenas com os recursos do TR-069. Mas é possível monitorar de forma bastante eficiente. As estatísticas sobre interfaces e seus status, memória livre etc., estão disponíveis.
4.2 Enviando parâmetros
Agora vamos tentar enviar parâmetros para o roteador através do tr-069, de forma "natural". A primeira vítima será Device.DeviceInfo.X_MIKROTIK_SystemIdentity. Vamos localizá-lo nos parâmetros da unidade All. Como pode ser visto, ele não está configurado. Isso significa que qualquer unidade pode ter qualquer identidade. Já chega de tolerar isso!
Marque a caixa na coluna create, nomeie como Mr.White e clique no botão Atualizar parâmetros. O que acontecerá a seguir você já deve ter adivinhado. Na próxima comunicação com a central, o roteador deve mudar sua identidade.

Mas isso não é suficiente para nós. O parâmetro como Identity é sempre bom ter à mão ao buscar a unidade desejada. Clique no nome do parâmetro e marque as opções Display(D) e Searchable (S). A chave do parâmetro muda para RWSD (Lembre-se, nomes e chaves são definidos no nível mais alto do Tipo de Unidade)

O valor agora não só aparece na lista de pesquisa geral, mas também está disponível para pesquisa em Suporte > Pesquisa > Formulário avançado

Iniciamos o provisionamento e observamos a identidade. Olá, Mr.White! Agora você não poderá mudar sua aparência enquanto o tr-069client estiver ativo.

4.3 Executando scripts
Já que descobrimos que não podemos fazer sem eles, vamos executá-los.
Mas antes de começarmos a trabalhar com os arquivos, precisamos corrigir a diretiva public.url no arquivo /opt/freeacs-tr069/config/application-config.conf
Ainda estamos com uma configuração de teste instalada por um script. Não se esqueceu?
# --- Public url (used for download f. ex.) ---
public.url = "http://10.110.0.109"
public.url: ${?PUBLIC_URL}Reiniciamos o ACS e seguimos diretamente para Arquivos & Scripts.

Mas o que está se abrindo para nós agora pertence ao Tipo de Unidade, ou seja, globalmente a todos os roteadores hAP ac lite, seja um roteador de filial, hotspot ou capsman. Não precisamos de um nível tão alto por enquanto, então, antes de trabalhar com scripts e arquivos, devemos criar um perfil. Podemos chamá-lo de "posição" do dispositivo.
Vamos transformar nosso pequeno em um servidor de tempo. Uma posição digna com um pacote de software separado e um número reduzido de parâmetros. Vamos para Provisionamento fácil > Perfil > Criar Perfil e criamos no Tipo de Unidade:hAPaclite o perfil timeserver. Não tínhamos parâmetros no perfil padrão, então não há nada a copiar. Copie os parâmetros de: «não copiar…»

Aqui ainda não há parâmetros, mas podemos definir aqueles que desejamos ver em nossos servidores de tempo, criados com hAPaclite. Por exemplo, os endereços gerais dos servidores NTP.
Vamos alterar a configuração da unidade e movê-la para o perfil de servidor de tempo.
Finalmente vamos para Arquivos & Scripts, criar scripts, e aqui nos aguardam recursos incrivelmente convenientes.
Para executar um script na unidade, precisamos selecionar Tipo:TR069_SCRIPT mais de 40.000 clientes em mais de 120 países Nome e Nome de Destino devem ter a extensão .alter
Para scripts, ao contrário do software, é possível tanto carregar um arquivo pronto, quanto apenas escrevê-lo/editar no campo Conteúdo. Vamos tentar escrever diretamente lá.
E para que o resultado seja visível imediatamente — vamos adicionar uma VLAN ao roteador no ether1.
/interface vlan
add interface=ether1 name=vlan1 vlan-id=1
Digitamos, clicamos Upload e pronto. Nosso script vlan1.alter aguarda sua vez.
Então, vamos lá? Não. Precisamos adicionar um grupo para nosso perfil. Grupos não estão na hierarquia de equipamentos, mas são necessários para localizar unidades em UnitType ou Profile e são obrigatórios para executar scripts através do Advanced Provisioning. Normalmente, os grupos estão relacionados a locais e têm uma estrutura hierárquica. Vamos criar o grupo Rússia.

Imagine que acabamos de restringir a busca de «Todos os servidores de tempo do mundo em hAPaclite» para «Todos os servidores de tempo da Rússia em hAPaclite». Há uma enorme quantidade de informações interessantes sobre grupos, mas não temos tempo. Vamos para os scripts.
Advanced Provisioning > Job > Criar Tarefa
Como estamos no modo Avançado, podemos especificar várias condições para o início da tarefa, comportamento em caso de erros, repetições e timeouts. Recomendo ler tudo isso nos manuais ou depois discutiremos ao implementar em produção. Por enquanto, vamos inserir n1 nas regras de parada, para que a tarefa pare assim que for executada em nossa 1 unidade.
Preenchemos o necessário e só falta iniciar!

Clicamos em INICIAR e esperamos. Agora, o contador de dispositivos que foram afetados pelo script não depurado começará a correr! Não, claro. Essas tarefas levam tempo, e essa é a diferença delas em relação a scripts, Ansible e similares. As unidades buscam as tarefas de acordo com um cronograma ou à medida que aparecem na rede, o ACS registra quais unidades já receberam tarefas e como foram concluídas, e isso é registrado nos parâmetros da unidade. Em nosso grupo há 1 unidade, mas se fossem 1001 — o administrador iniciaria essa tarefa e iria pescar.
Vamos lá. Reinicie o roteador ou reinicie o cliente TR-069. Tudo deve ocorrer sem problemas e Mr.White receberá um novo VLAN. E nossa tarefa relacionada à Stop rule mudará para o status PAUSED. Ou seja, ainda será possível reiniciá-la ou alterá-la. Se clicar em FINISH — a tarefa será arquivada.
4.4 Atualizando o Software
Este é um ponto muito importante, pois o firmware do Mikrotik é modular, mas a adição de módulos não altera a versão geral do firmware do dispositivo. Nosso ACS está funcionando bem, e não estamos acostumados com isso.
Agora faremos de forma rápida e prática, e incluiremos o módulo NTP no firmware geral imediatamente, mas assim que a versão do dispositivo for atualizada — não poderemos adicionar outro módulo da mesma forma.
Em produção, esse truque é melhor não ser aplicado, e módulos não obrigatórios para o Tipo de Unidade devem ser instalados apenas via scripts.
Então, a primeira coisa que precisamos fazer é preparar os pacotes de software das versões e arquiteturas necessárias, e colocá-los em algum servidor web acessível. Para o teste, qualquer um serve, desde que nosso Mr.White consiga acessar, e para produção, é melhor criar um espelho autoatualizável do software necessário, que não faça mal expô-lo na web.
Importante! Nunca se esqueçam de incluir sempre na atualização o pacote do tr-069client!
Como se descobriu, o comprimento do caminho até os pacotes é muito importante! Durante minhas tentativas de usar algo do tipo http://192.168.0.237/routeros/stable/mipsbe/routeros-mipsbe-6.45.6.npk, o Mikrotik ficou preso em um loop de conexão com o recurso, enviando no log do tr-069 repetições de TRANSFERCOMPLETE. E eu perdi algumas células nervosas tentando descobrir o que estava errado. Portanto, por enquanto, vamos colocar na raiz, até esclarecer.
Então, devemos ter três arquivos npk disponíveis via http. Eu consegui assim:
http://192.168.0.241/routeros-mipsbe-6.45.6.npk
http://192.168.0.241/routeros/stable/mipsbe/ntp-6.45.6-mipsbe.npk
http://192.168.0.241/routeros/stable/mipsbe/tr069-client-6.45.6-mipsbe.npkAgora isso precisa ser formatado em um arquivo xml com FileType="1 Firmware Upgrade Image", que iremos fornecer ao Mikrotik. O nome será ros.xml.
Faça de acordo com as instruções de :
http://192.168.0.241/routeros-mipsbe-6.45.6.npk
http://192.168.0.241/ntp-6.45.6-mipsbe.npk
http://192.168.0.241/tr069-client-6.45.6-mipsbe.npkÉ notável a falta de Nome de usuário/Senha para acessar o servidor de upload. Pode-se tentar inseri-los como indicado no item A.3.2.8 do protocolo tr-069:
http://192.168.0.237/routeros/stable/mipsbe/ntp-6.45.6-mipsbe.npk
user
passOu pergunte diretamente aos oficiais da MikroTik sobre a máxima extensão do caminho até os arquivos *.npk.
Vamos aos conhecidos Arquivos & Scripts, e criamos um arquivo do tipo SOFTWARE com Name:ros.xml, Nome do Alvo:ros.xml e Version:6.45.6
Atenção! A versão aqui deve ser indicada exatamente no formato em que é exibida no dispositivo e transmitida no parâmetro System.X_FREEACS-COM.Device.SoftwareVersion.
Selecionamos para download nosso arquivo xm e pronto.

Agora temos várias maneiras de atualizar o dispositivo. Através do Wizard no menu principal, através do Provisionamento Avançado e tarefas do tipo SOFTWARE, ou simplesmente acessando a configuração da unidade e clicando em Upgrade. Vamos escolher o caminho mais simples, pois o artigo já está longo.

Clicamos no botão, iniciamos o provisionamento e pronto. O programa de teste foi concluído. Agora sabemos como fazer mais com o MikroTik.
5. Conclusão
Quando comecei a escrever, queria primeiro descrever a conexão de um telefone IP e usar seu exemplo para explicar como pode ser legal quando o TR-069 funciona facilmente e sem esforço. Mas depois, à medida que avançava e investigava os materiais, pensei que quem conectou um MikroTik já não teria medo de nenhum telefone para autoestudo.
Basicamente, o Freeacs que testamos já pode ser aplicado em produção, mas para isso é necessário configurar a segurança, SSL, ajustar os MikroTik para autoconfiguração após o reset, depurar a adição correta do Tipo de Unidade, entender o funcionamento dos webservices e do fusion shell, e muito mais. Experimentem, inventem e escrevam a continuação!
A todos, obrigado pela atenção! Fico aberto a correções e comentários!
Lista de materiais utilizados e links úteis:
Fonte: habr.com
