Introdução:
Sabemos que ter dois links de internet pode ser custoso para usuários domésticos, e que nem sempre será tão útil, mas quando falamos de home office a sua internet é essencial, então temos que pensar em formas de contornar problemas corriqueiros de oscilação de internet.
Por isso estou escrevendo esse guia de como configurar um script de failover para o Mikrotik usando um modem 4g.
O objetivo deste artigo não é apenas configurar o Mikrotik mas sim mostrar as vantagens que entender um pouco de programação pode trazer soluções específicas.
O que significa Failover?
Failover é uma técnica muito utilizada em serviços que possui uma redundância, ou seja em caso de falha de um sistema teremos outro para assumir de forma temporária até que o serviço principal volte a funcionar normalmente, ou seja é uma forma de contingenciar um problema de forma automática.
Um exemplo seria em caso de queda de internet, não sabemos o motivo dessa queda, mas sabemos que precisamos de internet para continuamos nossas atividades, ao configurar um failover no roteador podemos assumir uma rede de backup caso a rede principal fique fora do ar, e quando voltar ele desligue a rede de backup de forma automática.
O que é o Mikrotik?
Mikrotik é um roteador avançado voltado a usuário domésticos e pequenas e médias empresas, ele requer um conhecimento intermediário sobre redes mas pode muito bem ser usado para adquirir conhecimento prático (que é o meu caso), pelo fato das configurações serem bem manuais ao mesmo tempo interativos, você consegue visualizar bem cada elemento que compoem uma estrutura de rede.
Outra vantagem incrível do Mikrotik é permitir a execução de comandos, com isso é possível criar scripts e programar novas funcionalidades, bastando apenas entender o mínimo de programação, estruturas condicionais e de repetição é possível criar scripts automáticos e ainda aprender mais sobre lógica de programação.
Aqui estou falando do Mikrotik mas no mercado existem vários outros roteadores programáveis, eu optei pelo Mikrotik por ser mais simples de implementar scripts automáticos.
O modelo do Mikrotik usado é o RB750Gr3.
Vamos ao objetivo deste artigo.
Meu objetivo é criar uma redundância de rede caso a minha internet principal venha a apresentar problemas, com isso eu irei aproveitar a porta USB do meu Mikrotik e conectar um modem 4g, e programar um script que identifique com eficiência a ausência de conexão e faça a ativação efetiva da rede de backup.
Aqui está um diagrama das conexões.
Então temos que pensar como essa lógica deve funcionar, no meu caso por está usando uma rede 4g com franquia eu quero ser avisado que essa rede foi ativado, então irei usar outro recurso bem interessante do Mikrotik que seria os beeps sonoros, que também pode ser incluído no script.
Vamos planejar e definir exatamente o que queremos com essa automação.
Para isso iremos usar os casos de uso que devem ser descritos para termos uma referência e usamos também para os testes, assim garantimos que o que foi idealizado no início atende os requisitos.
Com base nesses cenários é possível desenhar um fluxograma para termos uma ideia de como vai ficar nosso algoritmo, aqui já estamos chegando mais próximo do que será nosso código fonte.
Preparando o Mikrotik:
Ao conectar o modem no roteador Mikrotik veremos que ele aparece no menu interfaces.
Então devemos anotar o nome da interface, que no meu caso é o “lte1”.
No meu caso estou usando um modem lte, o mesmo tem seu próprio serviço DHCP, ou seja ele funciona como um mini-roteador, ao conectar no Mikrotik via USB é como se estivesse conectado outro roteador ao Mikrotik, então inicialmente teremos que configurar um DHCP client, para obter o endereço IP do modem lte.
Para isso basta seguir os passos abaixo.
Preparando o script
O script nada mais é que um roteiro de comando com algumas condições no meio do caminho, aqui está o código seguindo nosso fluxograma.
:local lteInterface "lte1"
:local ethInterface "ether1"
:if ( [interface lte find name=$lteInterface] ) do={
:if ( [ping 8.8.8.8 interface=$ethInterface count=2] = 0 ) do={
:if ( [interface lte get [find name=$lteInterface] disabled] ) do={
interface lte enable $lteInterface
:beep frequency=900 length=0.5
} else={
:beep frequency=600 length=0.05
}
} else={
:if ( ![interface lte get [find name=$lteInterface] disabled] ) do={
interface lte disable $lteInterface
:beep frequency=1200 length=200ms
:delay 250ms
:beep frequency=1200 length=200ms
}
}
} else={
:beep frequency=1200 length=0.1
}
Complicou um pouco né? vou explicar para que serve cada comando.
:local
--> Esse comando declarar variáveis, no caso do nosso script ele diz que “lteInterface” é igual a "lte1", ou seja em todos os locais do código que precisar saber qual é a interface do modem só precisa chamar “$lteInterface”.
Caso seja necessário alterar basta alterar no comando :local, sem precisar alterar todo o resto do código.
:beep
--> É usado para emitir um beep sonoro, ele possui dois parâmetros: frequency e length,
frequency: é o tom do beep, 1200 agudo e 600 mais grave.
interface lte enable lte1
ou interface lte disable lte1
--> Desativa ou ativa a interface lte selecionada.
:if
--> É uma estrutura condicional "se", isso significa que ele só irá executar um comando se o mesmo atender alguns requisitos antes, Ex: só executar o comando de habilitar a interface se a interface principal perder a conexão com a rede.
ping 8.8.8.8 interface=ether1 count=2
--> Esse comando usa a interface principal para enviar um pacote ping para o dns do google. Assim caso ele não responda provavélmente não possui conexão com a internet. Essa foi uma forma que encontrei para identificar se atende o requisito “sem internet”.
Incluindo o script no mikrotik
Para incluir esse script no seu mikrotik basta seguir os passos abaixo.
Após terminar o script temos que incluí-lo no scheduler, um sistema de agendamento, basicamente esse script deve ser executado de tempos em tempos para ativar de forma automática.
Para incluir no schedule basta seguir os passos abaixo.
Executando testes
Os testes são importantes para garantir que tudo saiu como planejado, caso o script não passe em algum teste deve-se revisado e retestado, isso garante a qualidade do nosso trabalho como desenvolvedor.
Após implementar o código temos que testar esses cenários descritos anteriormente.
Vídeo no youtube: https://www.youtube.com/watch?v=c6vJckxJ-Ww
Conclusão:
O Mikrotik é um roteador robusto e bem editável, você consegue criar novas funcionalidades apenas entendendo a lógica de programação. Você não se limita as funcionalidades padrões do roteador, porém exige uma disposição para ir atrás de documentação, estudar entender como funciona. Ao adquirir um Mikrotik você está comprando um verdadeiro kit de aprendizado, podendo aplicar esse conhecimento em outros roteadores mais avançado como cisco ou pfsense e quem sabe também aprender a programar. Como vimos no artigo tudo é questão de entender os recursos que temos e planejar as funcionalidades.
Hoje em dia aprender lógica de programação está cada vez mais indispensável, desenvolver suas próprias soluções, alterar o comportamentos padrões de dispositivos.
Com um roteador convencional você teria que pesquisar muito para encontrar algum que possua essa funcionalidade nativa, e mesmo assim não iria atender exatamente seu objetivo. Ao usar um roteador programável você está dando soluções específicas a problemas específicos, isso trás uma série de vantagens.
Referências: