Este tutorial irá guiá-lo passo a passo na criação de um script no MikroTik RouterOS para monitorar o status de uma Phase 2 (IPsec SA) específica e reiniciá-la automaticamente caso ela fique inativa por um determinado período. Incluiremos as melhores práticas, as causas comuns de problemas e suas respectivas soluções, com base em nossas discussões anteriores.
As VPNs IPsec, embora robustas, podem ocasionalmente ter suas Phase 2 (Security Associations) caídas devido a problemas de conectividade, rekeying falho, ou anomalias de rede. Um script de monitoramento garante que o túnel seja reestabelecido rapidamente, minimizando o tempo de inatividade e mantendo a comunicação ativa.
Acesso ao MikroTik via WinBox (Esse tutorial é específico para uso do Winbox, talvez faremos um outro baseado em CLI)
Uma VPN IPsec (Phase 1 e Phase 2) já configurada e funcionando (ou que deveria estar funcionando).
Para que o script funcione corretamente, ele precisa identificar unicamente a Phase 2 que será monitorada. A melhor forma de fazer isso é através de um comentário específico na política IPsec.
Acesse seu MikroTik usando o WinBox.
Navegue até IP > IPsec > Policies.
Localize a (ou as) política(s) IPsec (Phase 2) que você deseja monitorar.
Dê um duplo clique na política escolhida.
No campo Comment, digite um nome único, claro e descritivo.
Importante: Este comentário deve ser EXCLUSIVO para esta política. Se você tiver várias políticas com o mesmo comentário (como "REDE_FILE_SERVER" no nosso exemplo anterior), o script só encontrará a primeira, causando problemas e não executará o SCRIPT.
Exemplos de bons comentários: VPN_PFsense_Dados_Branch, IPsec_to_Site_B_Subnet_10.0.0.0, SERVER_DATA_192.168.25.0.
Copie este comentário exato! Você vai precisar dele para o script.
Clique em OK.
Repita este processo para cada Phase 2 que você deseja monitorar individualmente. Lembre-se, cada uma precisa de um comentário único.
Este script será o "cérebro" da automação.
No WinBox, vá para System > Scripts.
Clique no botão + (Adicionar Novo).
Configure o script:
Name: Dê um nome descritivo para o script (ex: monitor-ipsec-data). Se for monitorar várias Phase 2, crie um nome único para cada script.
Source: Cole o código abaixo. ATENÇÃO: Você deve substituir "SEU_COMENTARIO_UNICO_AQUI" pelo comentário EXATO que você definiu no Passo 1.
Snippet de código
# Nome do script: ipsec-ph2-monitor-exemplo
# Desenvolvido por: Felipe Almeida
# Versão: 1.1
# Data de Criação: 25-07-2025
# Por favor, mantenha os créditos de criação :)
# Este script deve ser agendado para rodar a cada 5 segundos.
# Ele reiniciará a Phase 2 se estiver DOWN por mais de 10 segundos (2 ciclos de 5s).
# Log de depuração para verificar se o script está sendo executado
:log debug "Script ipsec-ph2-monitor-exemplo iniciado."
# Define o comentário da política IPsec que será monitorada.
# *** MUDE ISSO PARA O SEU COMENTÁRIO ÚNICO E EXATO! ***
:global ipsecPolicyComment "SEU_COMENTARIO_UNICO_AQUI"
:global downCounter 0
# Tenta encontrar a política IPsec pelo comentário
:local policyID [/ip ipsec policy find comment="$ipsecPolicyComment"]
:if ([:len $policyID] > 0) do={
# Obtém o estado atual da Phase 2
:local currentPh2State [/ip ipsec policy get $policyID ph2-state]
:if ($currentPh2State != "established") do={
# Se a Phase 2 não estiver estabelecida, incrementa o contador
:set downCounter ($downCounter + 1)
:log warning "IPsec Phase 2 '$ipsecPolicyComment' está DOWN. Contador: $downCounter"
# Se o contador atingiu 2 (o que significa ~10 segundos de inatividade com intervalo de 5s)
:if ($downCounter >= 2) do={
:log error "IPsec Phase 2 '$ipsecPolicyComment' está DOWN por mais de 10 segundos. Reiniciando..."
/ip ipsec policy disable $policyID
:delay 1s # Pequeno atraso para garantir que a desabilitação seja processada
/ip ipsec policy enable $policyID
:set downCounter 0 # Reseta o contador após o reinício
:log info "IPsec Phase 2 '$ipsecPolicyComment' reiniciada."
}
} else={
# Se a Phase 2 estiver UP, reseta o contador
:if ($downCounter > 0) do={
:log info "IPsec Phase 2 '$ipsecPolicyComment' está UP novamente. Reiniciando contador."
:set downCounter 0
}
}
} else={
:log error "Política IPsec com comentário '$ipsecPolicyComment' não encontrada. Verifique o comentário no script."
}
Defina as Permissões do Script (muito importante!):
Na mesma janela "New Script", localize a seção "Policy".
Marque SOMENTE as caixas:
read
write
policy
test
Desmarque todas as outras (ftp, reboot, password, sniff, sensitive, romon). Isso é uma prática de segurança essencial.
Clique em OK para salvar o script.
Repita este Passo 2 para cada Phase 2 adicional que você deseja monitorar, criando um novo script para cada uma, com seu ipsecPolicyComment e Name de script únicos.
O Scheduler será o "gatilho" que dispara seu script repetidamente.
No WinBox, vá para System > Scheduler.
Clique no botão + (Adicionar Novo).
Configure a tarefa agendada:
Name: Dê um nome descritivo para a tarefa (ex: monitor-ipsec-data).
Start Date: Mantenha a data padrão (startup ou a data atual).
Start Time: Mantenha o horário padrão (00:00:00).
Interval: Defina como 5s (5 segundos). Este é o intervalo de tempo entre as execuções do script.
Para que a VPN seja reiniciada após 10 segundos de inatividade, o script precisa rodar 2 vezes enquanto a VPN está "down" (2 * 5s = 10s).
Na mesma janela "New Script", localize a seção "Policy".
Marque SOMENTE as caixas:
read
write
policy
test
Desmarque todas as outras (ftp, reboot, password, sniff, sensitive, romon). Isso é uma prática de segurança essencial.
On Event: Clique na seta para baixo e selecione o nome exato do script que você criou no Passo 2 (ex: monitor-ipsec-data).
Clique em OK para salvar a tarefa agendada.
Repita este Passo 3 para cada script de monitoramento que você criou, criando uma nova tarefa de Scheduler para cada um.
Após configurar tudo, é hora de observar e resolver qualquer problema de configuração do script.
Acesse System > Log no WinBox.
Observe as mensagens do sistema. Você deve começar a ver as entradas do seu script.
Limpe quaisquer filtros de log que possam estar ativos (clique no X no campo de filtro da janela de log).
Problemas Comuns e Soluções:
Problema 1: "Nada acontece" / Script não aparece no Log de Sistema.
Sintoma: O Run Count no Scheduler pode estar aumentando, mas não há mensagens do script em System > Log.
Causas Prováveis:
Scheduler não está disparando: O On Event do Scheduler não está apontando para o nome exato do script, ou o Interval está definido como 0s.
Permissões Insuficientes do Script: O script não tem as permissões mínimas (read, write, policy, test) para sequer executar ou logar.
Erro de Sintaxe Grave: O script tem um erro tão fundamental que falha antes de logar qualquer coisa.
Nome da policy duplicado: Existem mais de uma Police com o mesmo nome, fazendo com que o script não saiba qual deve executar as tarefas.
Soluções:
Verifique o Scheduler: Vá em System > Scheduler. Confirme que o Name e Interval estão corretos (5s). Confirme que o On Event contém o nome EXATO do seu script. Verifique se a tarefa agendada está habilitada (não está cinza).
Verifique as Permissões do Script: Vá em System > Scripts, dê duplo clique no script e na seção "Policy", assegure-se de que read, write, test e policy estejam marcados e os outros desmarcados.
Teste Forçado com Log de Depuração: Adicione a linha :log debug "Script [nome_do_seu_script] iniciado." no topo do script (logo após os comentários). Salve. Clique no botão Run Script no System > Scripts. Se mesmo assim nada aparecer no log, há um problema mais sério (tente recriar o script do zero).
Ajuste o comentário: Procure por comentários duplicados e remova ou altere o comentário duplicado.
Problema 2: "Política IPsec com comentário 'X' não encontrada." no Log.
Sintoma: O script está rodando e logando, mas com a mensagem de erro acima.
Causa Provável: O comentário (ipsecPolicyComment) no seu script NÃO corresponde EXATAMENTE (incluindo maiúsculas/minúsculas, espaços extras) ao comentário da política IPsec (Phase 2) em IP > IPsec > Policies. Ou, você tem múltiplas políticas com o mesmo comentário, e o script encontrou uma que não é a que você esperava.
Solução:
Vá em IP > IPsec > Policies.
Dê um duplo clique na política que você quer monitorar.
Copie o comentário EXATO dela.
Vá em System > Scripts, edite seu script e cole este comentário na linha :global ipsecPolicyComment "COLE_AQUI".
Se você tiver comentários duplicados (o caso do "SEU_COMENTARIO_UNICO_AQUI" do nosso exemplo): Altere os comentários em IP > IPsec > Policies para que cada política tenha um comentário ABSOLUTAMENTE ÚNICO. Depois, atualize os scripts correspondentes com esses novos comentários únicos.
Problema 3: O Script roda, mas a Phase 2 permanece "no phase2" ou "down" e não reinicia.
Sintoma: O script está logando, talvez até as mensagens de "DOWN", mas a VPN não reestabelece. O ph2-state permanece "no phase2", "down" ou similar.
Causas Prováveis:
Problemas de Conectividade/Configuração IPsec: O script apenas reinicia a tentativa de estabelecimento. Se houver problemas fundamentais (firewall bloqueando portas 500/4500, NAT-T não funcionando, chaves erradas, IDs de peer incorretos, subnets erradas, Phase 1 não estabelecendo), o reinício não resolverá.
Política Desabilitada: A política IPsec que o script está tentando reiniciar está marcada como X (Disabled) em IP > IPsec > Policies. O script vai desabilitar e reabilitar, mas se ela estiver desabilitada por padrão, ela pode não subir.
Soluções:
Verifique a Configuração IPsec Base: Certifique-se de que a Phase 1 (Peers) e as regras da Phase 2 estejam corretas. Verifique logs IPsec (/ip ipsec logging set topics=debug) para ver mensagens de erro de negociação.
Verifique Regras de Firewall: Garanta que as portas UDP 500 e 4500 (para NAT-T) estejam abertas no MikroTik e em qualquer firewall intermediário.
Habilite a Política: Certifique-se de que a política IPsec (Phase 2) que você quer que o script gerencie esteja habilitada (A ou sem X) em IP > IPsec > Policies.
Verifique o Peer: Se o problema persistir, pode ser que a Phase 1 esteja com problemas. O script reinicia a Phase 2, mas se a Phase 1 não subir, a Phase 2 nunca será negociada. Considere também configurar o Dead Peer Detection (DPD) no seu Peer IPsec em IP > IPsec > Peers para ajudar a detectar quedas de forma nativa pelo IPsec.
BONUS: Em um túnel VPN com um pfSense, com 4 fases 2, percebi que eles por algum motivo, tinham uma ordem específica para iniciar. Precisei encontrar a ordem que eles iniciavam e configurei o script para reiniciar em tempos diferentes. Se os scripts não fossem iniciados na ordem correta, ele derrubafa as fases que estavam UP. Exemplo:
Primeiro: Fase2_1 > Configurado o tempo de verificação para 00:00:05
Segundo: Fase2_3 > Configurado o tempo de verificação para 00:00:10
Terceiro: Fase2_4 > Configurado o tempo de verificação para 00:00:15
Quarto: Fase2_2 > Configurado o tempo de verificação para 00:00:20
Desta forma, eles iniciaram na ordem prevista e todas as fases fecharam.
Com este guia completo, você deve ser capaz de configurar, monitorar e solucionar problemas na sua automação de reinício de Phase 2 IPsec no MikroTik. Lembre-se sempre da importância de comentários únicos e das permissões corretas para o script.