# ----------------------------------------------------------------------------- # Script de Configuração Mikrotik - Ivan (Empreendedor) - VERSÃO ATUALIZADA # Alteração solicitada: eth1 agora é LAN, eth4 agora é WAN PPPoE # # Configurações atuais: # - eth1: LAN interna (10.0.0.1/24) # - eth2, eth3: DHCP (WANs) # - eth4: PPPoE (WAN) # - Load Balance (PCC) e Failover entre as 3 WANs (eth2, eth3, eth4) # - eth5: Hotspot (10.5.0.1/24) # - Notificação por e-mail quando um link WAN cair/subir # ----------------------------------------------------------------------------- # OPCIONAL: Resetar a configuração do roteador para um estado limpo. # CUIDADO: Este comando APAGARÁ TODA A CONFIGURAÇÃO EXISTENTE. # Descomente e execute APENAS se você quer começar do zero. #/system reset-configuration no-backup=yes run-after-reset="" # ----------------------------------------------------------------------------- # 1. Nomenclatura das Interfaces Ethernet (AJUSTADO) # Facilita a identificação e organização. # ----------------------------------------------------------------------------- /interface ethernet set [ find default-name=ether1 ] name="ether1-LAN" set [ find default-name=ether2 ] name="ether2-WAN-DHCP1" set [ find default-name=ether3 ] name="ether3-WAN-DHCP2" set [ find default-name=ether4 ] name="ether4-WAN-PPPoE" set [ find default-name=ether5 ] name="ether5-Hotspot" /delay delay-time=1s # ----------------------------------------------------------------------------- # 2. Configuração da LAN Interna (eth1) (AJUSTADO) # IP estático e servidor DHCP para clientes na rede local. # ----------------------------------------------------------------------------- /ip address add address=10.0.0.1/24 interface=ether1-LAN network=10.0.0.0 comment="IP da LAN" /ip pool add name=pool_lan ranges=10.0.0.100-10.0.0.254 comment="Pool de IPs para a LAN" /ip dhcp-server add address-pool=pool_lan disabled=no interface=ether1-LAN name=dhcp-lan comment="Servidor DHCP da LAN" /ip dhcp-server network add address=10.0.0.0/24 dns-server=10.0.0.1,8.8.8.8 gateway=10.0.0.1 comment="Configurações de rede DHCP para a LAN" # ----------------------------------------------------------------------------- # 3. Configuração das WANs (AJUSTADO) # eth4: Cliente PPPoE. # eth2, eth3: Clientes DHCP. # 'add-default-route=no' é importante para que o balanceamento de carga funcione. # As rotas padrão serão adicionadas manualmente com 'routing-mark'. # ----------------------------------------------------------------------------- # eth4 - PPPoE Client (AGORA NESSA PORTA) /interface pppoe-client add add-default-route=no default-route-distance=10 dial-on-demand=no \ interface=ether4-WAN-PPPoE keepalive-timeout=disabled name=pppoe-out1 \ password="SEU_SENHA_PPPOE" use-peer-dns=yes user="SEU_USUARIO_PPPOE" \ comment="Cliente PPPoE da WAN principal" # eth2 - DHCP Client 1 /ip dhcp-client add add-default-route=no default-route-distance=10 interface=ether2-WAN-DHCP1 \ name=dhcp-client-wan1 use-peer-dns=yes comment="Cliente DHCP da WAN secundária 1" # eth3 - DHCP Client 2 /ip dhcp-client add add-default-route=no default-route-distance=10 interface=ether3-WAN-DHCP2 \ name=dhcp-client-wan2 use-peer-dns=yes comment="Cliente DHCP da WAN secundária 2" # ----------------------------------------------------------------------------- # 4. Configuração de DNS # Permite que o roteador e os clientes resolvam nomes de domínio. # ----------------------------------------------------------------------------- /ip dns set allow-remote-requests=yes servers=8.8.8.8,8.8.4.4 comment="Servidores DNS públicos e permissão de requisições remotas" /ip dns static add address=10.0.0.1 name=router.lan comment="Entrada DNS estática para o roteador" # ----------------------------------------------------------------------------- # 5. Configuração de NAT (Masquerade) # Essencial para que os dispositivos na LAN e Hotspot acessem a internet. # ----------------------------------------------------------------------------- /ip firewall nat add action=masquerade chain=srcnat out-interface=pppoe-out1 comment="NAT para WAN PPPoE" add action=masquerade chain=srcnat out-interface=ether2-WAN-DHCP1 comment="NAT para WAN DHCP1" add action=masquerade chain=srcnat out-interface=ether3-WAN-DHCP2 comment="NAT para WAN DHCP2" # ----------------------------------------------------------------------------- # 6. Load Balance (PCC - Per-Connection Classifier) e Failover (AJUSTADO) # Distribui o tráfego de saída entre as três WANs e garante a conectividade # caso uma delas falhe. # ----------------------------------------------------------------------------- # Mangle Rules para PCC: # Marca as conexões de entrada da LAN para serem distribuídas igualmente entre as 3 WANs. # 'both-addresses-and-ports' garante uma distribuição mais balanceada. /ip firewall mangle add chain=prerouting in-interface=ether1-LAN \ per-connection-classifier=both-addresses-and-ports:3/0 \ action=mark-connection new-connection-mark=wan1_conn comment="PCC: Marcar conexões para WAN1 (PPPoE)" add chain=prerouting in-interface=ether1-LAN \ per-connection-classifier=both-addresses-and-ports:3/1 \ action=mark-connection new-connection-mark=wan2_conn comment="PCC: Marcar conexões para WAN2 (DHCP1)" add chain=prerouting in-interface=ether1-LAN \ per-connection-classifier=both-addresses-and-ports:3/2 \ action=mark-connection new-connection-mark=wan3_conn comment="PCC: Marcar conexões para WAN3 (DHCP2)" # Mangle Rules para Roteamento: # Marca os pacotes com base nas conexões marcadas, direcionando-os para a rota específica. add chain=prerouting in-interface=ether1-LAN connection-mark=wan1_conn \ action=mark-routing new-routing-mark=to_wan1 comment="Marcar roteamento para WAN1 (PPPoE)" add chain=prerouting in-interface=ether1-LAN connection-mark=wan2_conn \ action=mark-routing new-routing-mark=to_wan2 comment="Marcar roteamento para WAN2 (DHCP1)" add chain=prerouting in-interface=ether1-LAN connection-mark=wan3_conn \ action=mark-routing new-routing-mark=to_wan3 comment="Marcar roteamento para WAN3 (DHCP2)" # Rotas Padrão com base nas Marcas de Roteamento: # Todas com a mesma 'distance' (ex: 10) para balanceamento de carga. # O 'check-gateway=ping' é crucial para o failover automático: se o gateway não responder, # a rota é desativada, e o tráfego é redirecionado para as WANs ativas. /ip route # Rota para WAN PPPoE (pppoe-out1 - AGORA NA ETHER4) add dst-address=0.0.0.0/0 gateway=pppoe-out1 check-gateway=ping distance=10 routing-mark=to_wan1 comment="Rota principal para WAN PPPoE (LB)" # Rota para WAN DHCP1 (ether2-WAN-DHCP1) # O gateway é obtido dinamicamente do cliente DHCP. add dst-address=0.0.0.0/0 gateway=[/ip dhcp-client get [find interface=ether2-WAN-DHCP1] gateway] \ check-gateway=ping distance=10 routing-mark=to_wan2 comment="Rota principal para WAN DHCP1 (LB)" # Rota para WAN DHCP2 (ether3-WAN-DHCP2) # O gateway é obtido dinamicamente do cliente DHCP. add dst-address=0.0.0.0/0 gateway=[/ip dhcp-client get [find interface=ether3-WAN-DHCP2] gateway] \ check-gateway=ping distance=10 routing-mark=to_wan3 comment="Rota principal para WAN DHCP2 (LB)" # Rotas de Failover (Catch-all): # Usadas para tráfego originado do próprio roteador (DNS, NTP, Netwatch) # ou para tráfego que não foi marcado pelas regras PCC. # As distâncias garantem uma ordem de prioridade em caso de falha. add dst-address=0.0.0.0/0 gateway=pppoe-out1 check-gateway=ping distance=1 comment="Rota padrão preferencial (Roteador e Fallback)" add dst-address=0.0.0.0/0 gateway=[/ip dhcp-client get [find interface=ether2-WAN-DHCP1] gateway] \ check-gateway=ping distance=2 comment="Rota padrão secundária (Roteador e Fallback)" add dst-address=0.0.0.0/0 gateway=[/ip dhcp-client get [find interface=ether3-WAN-DHCP2] gateway] \ check-gateway=ping distance=3 comment="Rota padrão terciária (Roteador e Fallback)" # ----------------------------------------------------------------------------- # 7. Configuração do Hotspot (ether5) # Cria uma rede separada para visitantes com página de login. # ----------------------------------------------------------------------------- /ip address add address=10.5.0.1/24 interface=ether5-Hotspot network=10.5.0.0 comment="IP do Hotspot" /ip pool add name=hotspot_pool ranges=10.5.0.100-10.5.0.254 comment="Pool de IPs para o Hotspot" /ip dhcp-server add address-pool=hotspot_pool disabled=no interface=ether5-Hotspot name=dhcp-hotspot comment="Servidor DHCP do Hotspot" /ip dhcp-server network add address=10.5.0.0/24 dns-server=10.5.0.1,8.8.8.8 gateway=10.5.0.1 comment="Configurações de rede DHCP para o Hotspot" # Configuração do Hotspot: # É recomendado executar '/ip hotspot setup' no terminal e seguir os passos interativos. # Hotspot Interface: ether5-Hotspot # Local Address of Network: 10.5.0.1 # Masquerade Network: yes # Address Pool of Network: hotspot_pool # Select Certificate: none # IP of SMTP Server: 0.0.0.0 (pode deixar em branco ou especificar para permitir e-mail sem login) # DNS Servers: 8.8.8.8, 8.8.4.4 # Name of local Hotspot User: admin (ou outro nome de usuário inicial) # Password for Hotspot User: (defina uma senha ou deixe em branco para nenhum) # Exemplo de configuração manual do hotspot (se não usar o 'hotspot setup'): /ip hotspot profile add name=hsprof1 dns-name=hotspot.local html-directory=hotspot login-by=http-chap,cookie trial=no comment="Perfil do Hotspot" /ip hotspot add interface=ether5-Hotspot address-pool=hotspot_pool name=hotspot1 profile=hsprof1 comment="Criação do Hotspot" # Para "Login Social ou Cadastro de Email e Senha": # Isso requer **personalização da página de login do Hotspot** (arquivos em `Files -> hotspot/`). # - **Login Social:** Geralmente, você precisa de um servidor RADIUS externo que se integre com APIs de redes sociais (Facebook, Google, etc.). O Mikrotik se autenticaria via RADIUS. # - **Cadastro de Email e Senha:** Você pode modificar `login.html` para incluir campos de registro e, com scripts avançados, criar usuários no Mikrotik via API ou enviar dados para um sistema externo. # Isso está além do escopo de um script simples e envolve desenvolvimento web/integração. # Sugiro pesquisar por "Mikrotik Hotspot custom login page" e "Mikrotik social login RADIUS". # Exemplo de usuário simples para teste no Hotspot: /ip hotspot user add name=teste password=123 profile=default comment="Usuário de teste para o Hotspot" # ----------------------------------------------------------------------------- # 8. Netwatch para Monitoramento de Links e Notificação por E-mail (AJUSTADO) # Envia e-mails para maulertech@gmail.com quando um link WAN cai ou é restaurado. # ----------------------------------------------------------------------------- # Configuração do Servidor de E-mail: # ATENÇÃO: Para Gmail, você PRECISA gerar uma "senha de app" se tiver verificação em duas etapas. # Vá em myaccount.google.com -> Segurança -> Senhas de app. /tool e-mail set from="maulertech@gmail.com" password="ynbm skmv wvkp eurt" port=587 \ starttls=yes server=smtp.gmail.com user="maulertech@gmail.com" comment="Configuração do servidor de e-mail" # Scripts para Enviar E-mail (quando link UP/DOWN): /system script add name="send-email-wan-down" policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api source={ \ :local wanName "$wan_interface"; \ :local status "DOWN"; \ :local timestamp ([system clock get date] . " " . [system clock get time]); \ /tool e-mail send to="maulertech@gmail.com" subject="ALERTA MIKROTIK: Link de Internet $wanName esta $status!" body="O link de internet $wanName caiu em $timestamp." \ comment="Script para notificar queda de WAN" \ } add name="send-email-wan-up" policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api source={ \ :local wanName "$wan_interface"; \ :local status "UP"; \ :local timestamp ([system clock get date] . " " . [system clock get time]); \ /tool e-mail send to="maulertech@gmail.com" subject="ALERTA MIKROTIK: Link de Internet $wanName esta $status!" body="O link de internet $wanName foi restaurado em $timestamp." \ comment="Script para notificar restauração de WAN" \ } # Netwatch para cada WAN: # Monitoremos um IP público (como 8.8.8.8) para garantir que a internet está acessível. # Para as WANs DHCP, tentaremos pegar o gateway, mas um IP público é mais confiável. /tool netwatch # Netwatch para WAN PPPoE (ether4) (AJUSTADO) add host=8.8.8.8 interval=10s timeout=5s \ down-script="/system script run send-email-wan-down wan_interface="WAN PPPoE (ether4)"" \ up-script="/system script run send-email-wan-up wan_interface="WAN PPPoE (ether4)"" \ comment="Monitoramento WAN PPPoE (ping 8.8.8.8) na ether4" # Netwatch para WAN DHCP1 (ether2) # Tenta pegar o gateway, mas se não conseguir, usará 8.8.8.8 como fallback. :local wan2_gw [/ip dhcp-client get [find interface=ether2-WAN-DHCP1] gateway]; :local wan2_host_to_monitor (:if ($wan2_gw != "") do={:put $wan2_gw} else={:put "8.8.8.8"}); add host=$wan2_host_to_monitor interval=10s timeout=5s \ down-script="/system script run send-email-wan-down wan_interface="WAN DHCP1 (ether2)"" \ up-script="/system script run send-email-wan-up wan_interface="WAN DHCP1 (ether2)"" \ comment="Monitoramento WAN DHCP1 (ping gateway ou 8.8.8.8)" # Netwatch para WAN DHCP2 (ether3) # Tenta pegar o gateway, mas se não conseguir, usará 8.8.8.8 como fallback. :local wan3_gw [/ip dhcp-client get [find interface=ether3-WAN-DHCP2] gateway]; :local wan3_host_to_monitor (:if ($wan3_gw != "") do={:put $wan3_gw} else={:put "8.8.8.8"}); add host=$wan3_host_to_monitor interval=10s timeout=5s \ down-script="/system script run send-email-wan-down wan_interface="WAN DHCP2 (ether3)"" \ up-script="/system script run send-email-wan-up wan_interface="WAN DHCP2 (ether3)"" \ comment="Monitoramento WAN DHCP2 (ping gateway ou 8.8.8.8)" # ----------------------------------------------------------------------------- # 9. Regras Básicas de Firewall (Segurança) (AJUSTADO) # Protege o roteador e a rede interna contra acessos não autorizados. # ----------------------------------------------------------------------------- /ip firewall filter # Drop conexões inválidas (pacotes fora de estado) add chain=input connection-state=invalid action=drop comment="Drop conexões inválidas para o roteador" add chain=forward connection-state=invalid action=drop comment="Drop conexões inválidas através do roteador" # Permitir conexões já estabelecidas e relacionadas (essencial para tráfego de retorno) add chain=input connection-state=established,related action=accept comment="Permitir conexões estabelecidas/relacionadas para o roteador" add chain=forward connection-state=established,related action=accept comment="Permitir conexões estabelecidas/relacionadas através do roteador" # Permitir ICMP (ping) para o roteador de qualquer interface (opcional, pode ser restrito) add chain=input protocol=icmp action=accept comment="Permitir ICMP (ping) para o roteador" # Permitir acesso SSH e Winbox APENAS da LAN (AJUSTADO PARA NOVA LAN) add chain=input in-interface=ether1-LAN protocol=tcp dst-port=22 action=accept comment="Permitir SSH da LAN" add chain=input in-interface=ether1-LAN protocol=tcp dst-port=8291 action=accept comment="Permitir Winbox da LAN" # Drop todo o resto que tenta acessar o roteador (proteção extra) add chain=input action=drop comment="Drop todo o resto para o roteador" # Permitir tráfego da LAN para a internet via qualquer WAN (AJUSTADO PARA NOVA LAN) add chain=forward in-interface=ether1-LAN action=accept comment="Permitir LAN para WANs" # Permitir tráfego do Hotspot para a internet (as regras do Hotspot gerenciam a autenticação) add chain=forward in-interface=ether5-Hotspot action=accept comment="Permitir Hotspot para WANs" # Drop todo o tráfego que vem das WANs e tenta entrar na LAN ou Hotspot, a menos que # seja uma resposta de conexão (já tratada por established,related) ou DNAT. (AJUSTADO) add chain=forward in-interface=ether4-WAN-PPPoE action=drop comment="Bloquear acesso direto da WAN PPPoE" add chain=forward in-interface=ether2-WAN-DHCP1 action=drop comment="Bloquear acesso direto da WAN DHCP1" add chain=forward in-interface=ether3-WAN-DHCP2 action=drop comment="Bloquear acesso direto da WAN DHCP2" # ----------------------------------------------------------------------------- # 10. Configuração do Cliente NTP # Garante que o relógio do roteador esteja sempre sincronizado. # Essencial para logs e certificados. # ----------------------------------------------------------------------------- /system ntp client set enabled=yes primary-ntp=br.pool.ntp.org secondary-ntp=a.ntp.br mode=unicast comment="Cliente NTP para sincronização de hora" # ----------------------------------------------------------------------------- # 11. Ajustes Finais # Fuso horário para logs corretos e limpeza de configurações padrão. # ----------------------------------------------------------------------------- /system clock set time-zone-name=America/Sao_Paulo comment="Configura o fuso horário" # Opcional: Remover as regras padrão de firewall que vêm com a instalação, # pois criamos nossas próprias regras mais específicas. /ip firewall filter remove [find comment="default configuration"] /ip firewall nat remove [find comment="default configuration"] # ----------------------------------------------------------------------------- # FIM DO SCRIPT # -----------------------------------------------------------------------------,