Nuevo cliente
Opciones de usuario
Perfil
Salir
SGCM
Recursos
Preguntas
Soporte
Dólares
Páginas
Compras realizadas
livaur.com
Bienvenido a SGCM
T.C: $17.46
$0 USD
ES
Español (ES)
English (EN)
Evitar el balanceo de carga
SGCM
Recursos
Recurso Evitar el balanceo de carga
Contenido
Compact Files
Comentarios
Evitar el balanceo de carga
Gratis
Video donde se explica cómo evitar el balanceo de carga PCC.
Compact file avoidLoadBalanceV6
Descargar
# Configuración automática generada por SGCM # AvoidLoadBalance # Livaur SRL de CV # Versión de script: 1 # 2023-10-11 10:57:53 # # Si tienes alguna duda escribenos a soporte@livaur.com # /interface ethernet set [ find name=ether1 ] name=ether1_WAN set [ find name=ether2 ] name=ether2_WAN set [ find name=ether5 ] name=ether5_LAN /interface list add name=LAN /interface list member add interface=ether5_LAN list=LAN /ip pool add name=poolLAN ranges=172.16.10.2-172.16.10.254 /ip dhcp-server add address-pool=poolLAN disabled=no interface=ether5_LAN name=server1 /ip dhcp-server network add address=172.16.10.0/24 dns-server=8.8.8.8,8.8.4.4 gateway=172.16.10.1 netmask=24 /ip dns set allow-remote-requests=yes servers=8.8.8.8,8.8.4.4 /ip address add address=172.16.10.1/24 interface=ether5_LAN network=172.16.10.0 /ip firewall mangle add action=mark-routing chain=prerouting comment="Sin balanceo" new-routing-mark=to_ISP2 passthrough=no src-address=172.16.10.25 add action=accept chain=prerouting dst-address=192.168.250.250 in-interface-list=LAN comment="fo_ip_gw1" add action=accept chain=prerouting dst-address=192.168.250.250 in-interface-list=LAN comment="fo_ip_gw2" add action=mark-connection chain=prerouting connection-mark=no-mark in-interface=ether1_WAN new-connection-mark=ISP1_conn add action=mark-connection chain=prerouting connection-mark=no-mark in-interface=ether2_WAN new-connection-mark=ISP2_conn add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface-list=LAN new-connection-mark=ISP1_conn per-connection-classifier=both-addresses:2/0 add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface-list=LAN new-connection-mark=ISP2_conn per-connection-classifier=both-addresses:2/1 add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface-list=LAN new-connection-mark=ISP1_conn per-connection-classifier=both-addresses:2/2 comment=fo_bandera_pcc disabled=yes add action=mark-routing chain=prerouting connection-mark=ISP1_conn in-interface-list=LAN new-routing-mark=to_ISP1 passthrough=no add action=mark-routing chain=prerouting connection-mark=ISP2_conn in-interface-list=LAN new-routing-mark=to_ISP2 passthrough=no add action=mark-routing chain=output connection-mark=ISP1_conn new-routing-mark=to_ISP1 passthrough=no add action=mark-routing chain=output connection-mark=ISP2_conn new-routing-mark=to_ISP2 passthrough=no /ip firewall nat add action=masquerade chain=srcnat out-interface=ether1_WAN add action=masquerade chain=srcnat out-interface=ether2_WAN /ip route add distance=1 gateway=192.168.251.251%ether1_WAN routing-mark=to_ISP1 add distance=1 gateway=192.168.251.251%ether2_WAN routing-mark=to_ISP2 add comment=fo_ruta_defecto distance=1 gateway=192.168.251.251 /ip dhcp-client add add-default-route=no dhcp-options=hostname,clientid disabled=no interface=ether1_WAN script=\ "\r\ \n:local gateway [/ip dhcp-client get [find interface=ether1_WAN] gateway];\r\ \n/ip route \r\ \nset [ find routing-mark=\"to_ISP1\" ] gateway=\"\$gateway%ether1_WAN\"; \r\ \n/ip firewall mangle \r\ \nset [ find comment=\"fo_ip_gw1\" ] dst-address=\$gateway;" /ip dhcp-client add add-default-route=no dhcp-options=hostname,clientid disabled=no interface=ether2_WAN script=\ "\r\ \n:local gateway [/ip dhcp-client get [find interface=ether2_WAN] gateway];\r\ \n/ip route \r\ \nset [ find routing-mark=\"to_ISP2\" ] gateway=\"\$gateway%ether2_WAN\"; \r\ \n/ip firewall mangle \r\ \nset [ find comment=\"fo_ip_gw2\" ] dst-address=\$gateway;" /system identity set name="RB Balanceador PCC v3" /system script add name=failoverActualizadorRutaDefecto owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#Actualizador de ruta por defecto\r\ \n# IP del DNS externo\r\ \n:global foIpDNS;\r\ \n:global foNPruebasPing;\r\ \n:global foRelIspInterfaz;\r\ \n\r\ \n:local gateway;\r\ \n:local gatewayAnt;\r\ \n:local rping 0;\r\ \n:local id;\r\ \n:local interfaz;\r\ \n\r\ \n# Cantidad de ISPs disponibles\r\ \n:local nISPs [:len [/ip route find routing-mark~\"to_ISP\"]];\r\ \n\r\ \n# Bandera Ruta Actualizada. Indica si la ruta ha sido actualizada\r\ \n:local bra 0;\r\ \n\r\ \n# Detecci\F3n de actividad de ruta por defecto\r\ \n:set rping [/ping \$foIpDNS count=1];\r\ \n\r\ \n# Si no hubo respuesta, se actualiza la ruta por defecto\r\ \n# haciendo una busqueda del gateway que se encuentre activo\r\ \n:if ( \$rping=0 ) do={\r\ \n :foreach rel in=[\$foRelIspInterfaz] do={\r\ \n :set id (\$rel->0);\r\ \n :set interfaz (\$rel->1);\r\ \n\r\ \n :if (\$bra=0) do={\r\ \n :set rping [/ping \$foIpDNS routing-table=\"to_ISP\$id\" interface=\"\$interfaz\" count=\$foNPruebasPing];\r\ \n\r\ \n :if (\$rping>0) do={\r\ \n :set gatewayAnt [/ip route get [/ip route find dst-address=0.0.0.0/0 comment=\"fo_ruta_defecto\"] gateway];\r\ \n :set gateway [/ip route get [/ip route find routing-mark=\"to_ISP\$id\"] gateway];\r\ \n\r\ \n :if (\$gatewayAnt != \$gateway) do={\r\ \n :ip route set [/ip route find dst-address=0.0.0.0/0 comment=\"fo_ruta_defecto\"] gateway=\$gateway;\r\ \n :set bra 1;\r\ \n }\r\ \n }\r\ \n }\r\ \n }\r\ \n}\r\ \n" add name=failoverConfig owner=admin policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ \_Correo electr\F3nico del administrador al que llegaran las notificacione\ s de ISPs caidos\r\ \n:global foCorreoAdministrador \"\";\r\ \n\r\ \n# Bandera que indica si se van a enviar correos de notificacion \"si\"/\ \"no\"\r\ \n:global foEnvioEmailsNotificacion \"no\";\r\ \n\r\ \n# IP de DNS a donde se lanzan las pruebas de ping\r\ \n# En este caso se usa una IP de OpenDNS\r\ \n:global foIpDNS \"208.67.222.222\";\r\ \n\r\ \n# Cantidad de pruebas ping a realizar para determinar si un ISP est\E1 c\ aido\r\ \n:global foNPruebasPing 5;\r\ \n\r\ \n# Definici\F3n de ISPs y capacidades proporcionales\r\ \n:global foIsps {{1;1};{2;1} };\r\ \n\r\ \n# Relacion de ISPs con Interfaces\r\ \n:global foRelIspInterfaz {{1;\"ether1_WAN\"};{2;\"ether2_WAN\"};};\r\ \n\r\ \n\r\ \n# Interface LAN\r\ \n:global foLan \"ether5_LAN\";" add name=failover owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#######################################\ ####\r\ \n# Script Failover para router con N ISPs\r\ \n###########################################\r\ \n\r\ \n# Carga de la configuracion\r\ \n/system script run failoverConfig;\r\ \n\r\ \n\r\ \n# Declaraci\F3n de variables principales\r\ \n:global foIspsCaidos {nil};\r\ \n:global foIspsCaidosAnt;\r\ \n:global foIspsAnt;\r\ \n:global foIpDNS;\r\ \n:global foNPruebasPing;\r\ \n:global foIsps;\r\ \n:global foRelIspInterfaz;\r\ \n\r\ \n:local nIsps [:len \$foIsps];\r\ \n:local pasos 0;\r\ \n:local id;\r\ \n:local interfaz;\r\ \n\r\ \n\r\ \n\r\ \n# Inicializaci\F3n de los ISP antiguos\r\ \n:if ([:typeof \$foIspsAnt]=\"nothing\") do={ :set foIspsAnt \$foIsps; }\r\ \n\r\ \n# Inicializaci\F3n de los ISP caidos anteriormente\r\ \n:if ([:typeof \$foIspsCaidosAnt]=\"nothing\") do={ :set foIspsCaidosAnt {nil}; }\r\ \n\r\ \n\r\ \n\r\ \n# Actualizacion de las capacidades de los ISPs\r\ \n:if (\$foIsps != \$foIspsAnt) do={ /system script run failoverActualizadorCapacidadesISPs; }\r\ \n\r\ \n\r\ \n\r\ \n# Proceso de pruebas de conexi\F3n a internet por los distintos ISPs\r\ \n:foreach rel in=[\$foRelIspInterfaz] do={\r\ \n :set id (\$rel->0);\r\ \n :set interfaz (\$rel->1);\r\ \n \r\ \n :local rping [/ping \$foIpDNS routing-table=\"to_ISP\$id\" interface=\"\$interfaz\" count=\$foNPruebasPing];\r\ \n\r\ \n # Si la respuesta de ping fue 0, entonces el ISP est\E1 caido y se agrega a la lista de foIspsCaidos\r\ \n :if (\$rping=0) do={ :set (\$foIspsCaidos->\"\$id\") \$id; } \r\ \n}\r\ \n\r\ \n\r\ \n# Compara los ISPs caidos actualmente contra los ISPs caidos previamente\r\ \n# Si son iguales evita ejecutar por completo el script\r\ \n:if ( \$foIspsCaidos = \$foIspsCaidosAnt) do={ :exit; }\r\ \n\r\ \n\r\ \n# Si hubo cambios entre los ISPs activos actualmente y los anteriores\r\ \n# se procede a hacer acutalizaci\F3n en las reglas mangle,\r\ \n# en la ruta por defecto y se env\EDa notificaci\F3n de los ISPs caidos\r\ \n\r\ \n# Actualizador de reglas Mangle\r\ \n/system script run failoverActualizadorReglasMangle;\r\ \n\r\ \n\r\ \n######################################################################\r\ \n# Si se llega a este punto es por que hubo cambios en los ISPs caidos\r\ \n######################################################################\r\ \n/system script run failoverActualizadorRutaDefecto;\r\ \n/system script run failoverNotificadorIspsCaidos;\r\ \n\r\ \n\r\ \n# Actualizaci\F3n de los ISPs caidos anteriormente\r\ \n:set foIspsCaidosAnt (\$foIspsCaidos);\r\ \n\r\ \n#:log info \"Fin failover-script\";\r\ \n\r\ \n" add name=failoverActualizadorCapacidadesISPs owner=admin policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ \_Actualizador de capacidades de ISPs\r\ \n\r\ \n:global foIsps;\r\ \n:global foIspsAnt;\r\ \n:global foIspsCaidosAnt;\r\ \n:global foLan;\r\ \n\r\ \n:local idpcc [/ip firewall mangle find comment=\"fo_bandera_pcc\"];\r\ \n:local pasos;\r\ \n\r\ \n# Eliminaci\F3n de las reglas pcc inservibles, a excepci\F3n de la fo_ba\ ndera_pcc\r\ \n:local idsReglasPcc [/ip firewall mangle find per-connection-classifier~\ \"both-addresses\" and comment!=\"fo_bandera_pcc\"];\r\ \n\r\ \n:foreach id in=[\$idsReglasPcc] do={\r\ \n /ip firewall mangle remove [find .id=\$id];\r\ \n}\r\ \n\r\ \n# Calculo de los pasos totales\r\ \n:set pasos 0;\r\ \n:foreach isp in=[\$foIsps] do={\r\ \n :set pasos (\$pasos + (\$isp->1));\r\ \n}\r\ \n\r\ \n# Registro de las nuevas reglas pcc en funci\F3n de los ISPs\r\ \n:local indiceMaestro 0;\r\ \nforeach isp in=[\$foIsps] do={\r\ \n :for i from=1 to=(\$isp->1) step=1 do={\r\ \n :local idIsp (\$isp->0);\r\ \n /ip firewall mangle add action=mark-connection chain=prerouting \ connection-mark=no-mark dst-address-type=!local in-interface-list=LAN new-c\ onnection-mark=(\"ISP\".\$idIsp.\"_conn\") per-connection-classifier=(\"bo\ th-addresses:\".\$pasos.\"/\".\$indiceMaestro)\r\ \n :set indiceMaestro (\$indiceMaestro+1);\r\ \n }\r\ \n}\r\ \n\r\ \n# Movimiento de las reglas pcc a su nueva posici\F3n para mantener la pr\ ioridad\r\ \n:set idsReglasPcc [/ip firewall mangle find per-connection-classifier~\"\ both-addresses\"];\r\ \n:foreach idRegla in=[\$idsReglasPcc] do={\r\ \n if (\$idRegla != \$idpcc ) do={\r\ \n /ip firewall mangle move [find .id=\$idRegla] destination=\$idpc\ c\r\ \n }\r\ \n}\r\ \n\r\ \n\r\ \n# Actualizaci\F3n de los ISP anteriores\r\ \n:set foIspsAnt \$foIsps;\r\ \n:log info \"Se actualizaron las capacidades de los ISPs\";\r\ \n\r\ \n" add name=failoverActualizadorReglasMangle owner=admin policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ \_Actualiador de reglas Mangle\r\ \n\r\ \n:global foIsps;\r\ \n:global foIspsCaidos;\r\ \n\r\ \n:local pasos;\r\ \n:local pasosTmp;\r\ \n:local estaCaido;\r\ \n:local idIsp;\r\ \n:local idsReglas;\r\ \n:local disabledtmp;\r\ \n:local idsTmp;\r\ \n\r\ \n\r\ \n# Calculo de los pasos totales\r\ \n:set pasos 0;\r\ \n:foreach isp in=[\$foIsps] do={\r\ \n :set estaCaido false;\r\ \n\r\ \n :foreach ispCaido in=[\$foIspsCaidos] do={\r\ \n :if (\$isp->0=\$ispCaido) do={\r\ \n :set estaCaido true;\r\ \n }\r\ \n }\r\ \n\r\ \n :if (\$estaCaido=false) do={\r\ \n :set pasos (\$pasos + (\$isp->1));\r\ \n }\r\ \n}\r\ \n#:log info \$pasos;\r\ \n\r\ \n\r\ \n:set pasosTmp 0;\r\ \n:foreach isp in=[\$foIsps] do={\r\ \n :set estaCaido false;\r\ \n :set idIsp (\$isp->0);\r\ \n\r\ \n :foreach ispCaido in=[\$foIspsCaidos] do={\r\ \n :if ((\$isp->0)=\$ispCaido) do={\r\ \n :set estaCaido true;\r\ \n }\r\ \n }\r\ \n\r\ \n # Si el ISP est\E1 ACTIVO se procede a actualizar las reglas con los \ \"pasos\" correctos\r\ \n :if (\$estaCaido=false) do={\r\ \n # Obtenci\F3n de los IDs de las reglas del ISP con new-connection-ma\ rk\r\ \n :set idsReglas [/ip firewall mangle find new-connection-mark=\"ISP\$\ idIsp_conn\" and per-connection-classifier~\"both-addresses\" and comment!\ =\"fo_bandera_pcc\"];\r\ \n\r\ \n # Por cada ID de la regla se procede a asignar el total de pasos y e\ l n\FAmero de paso correspondiente\r\ \n :foreach idRegla in=[\$idsReglas] do={\r\ \n /ip firewall mangle set [find .id=\$idRegla] per-connection-classi\ fier=\"both-addresses:\$pasos/\$pasosTmp\"\r\ \n\r\ \n #Incremento del contador de pasosTmp\r\ \n :set pasosTmp (\$pasosTmp + 1);\r\ \n }\r\ \n\r\ \n # Activaci\F3n de las reglas del ISP activo\r\ \n :set idsTmp [/ip firewall mangle find new-connection-mark=\"ISP\$idI\ sp_conn\" and per-connection-classifier~\"both-addresses\" and comment!=\"\ fo_bandera_pcc\"];\r\ \n :foreach idtmp in [\$idsTmp] do={\r\ \n :set disabledtmp [/ip firewall mangle get \$idtmp disabled];\r\ \n :if ( \$disabledtmp = true ) do={\r\ \n /ip firewall mangle enable \$idtmp;\r\ \n }\r\ \n }\r\ \n }\r\ \n\r\ \n # Si el ISP est\E1 CAIDO se procede a desactivar las reglas\r\ \n :if (\$estaCaido=true) do={\r\ \n :set idsTmp [/ip firewall mangle find new-connection-mark=\"ISP\$idI\ sp_conn\" and per-connection-classifier~\"both-addresses\" and comment!=\"\ fo_bandera_pcc\"];\r\ \n :foreach idtmp in [\$idsTmp] do={\r\ \n :set disabledtmp [/ip firewall mangle get \$idtmp disabled];\r\ \n :if ( \$disabledtmp = false ) do={\r\ \n /ip firewall mangle disable \$idtmp;\r\ \n }\r\ \n }\r\ \n }\r\ \n}\r\ \n\r\ \n" add name=failoverNotificadorIspsCaidos owner=admin policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ \_Notificador de ISPs caidos\r\ \n\r\ \n# Variables globales\r\ \n:global foIspsCaidos;\r\ \n:global foIspsCaidosAnt;\r\ \n:global foCorreoAdministrador;\r\ \n:global foEnvioEmailsNotificacion;\r\ \n\r\ \n:local cadIspsCaidos \"\";\r\ \n:local tiempo;\r\ \n:local fecha;\r\ \n:local bndEnvioNotificacion false;\r\ \n:local identidad [/system identity get name];\r\ \n\r\ \n# Impresi\F3n de los ISPs caidos en el Log\r\ \n:if ( \$foIspsCaidos = {nil} ) do={\r\ \n :log warning \"Todos los ISPs se encuentran activos\";\r\ \n}\r\ \n\r\ \n:if ( \$foIspsCaidos != {nil} ) do={\r\ \n # Impresi\F3n de los ISPs caidos\r\ \n :foreach idIsp in=[\$foIspsCaidos] do={\r\ \n :if ( [:typeof \$idIsp] = \"num\" ) do={\r\ \n :log warning \"ISP\$idIsp est\E1 caido\";\r\ \n :set cadIspsCaidos (\$cadIspsCaidos.\",\".\$idIsp);\r\ \n }\r\ \n }\r\ \n}\r\ \n\r\ \n\r\ \n\r\ \n# Si la bandera de env\EDo de emails de notifaci\F3n est\E1 activa, ento\ nces\r\ \n# se env\EDa el e-mail de notificaci\F3n de ISPs caidos\r\ \n:if ( \$foEnvioEmailsNotificacion = \"si\" ) do={\r\ \n\r\ \n # Envio de correo de notificacion de ISP Caido\r\ \n :if ( \$foCorreoAdministrador != \"\" ) do={\r\ \n :set tiempo [/system clock get time];\r\ \n :set fecha [/system clock get date];\r\ \n\r\ \n # Env\EDo de correo\r\ \n :if ( \$cadIspsCaidos = \"\" ) do={\r\ \n /tool e-mail send to=\$foCorreoAdministrador subject=\"Route\ r Balanceador \$identidad\" body=\"El \$fecha a las \$tiempo todos los ISP\ \_estan activos\" start-tls=yes;\r\ \n }\r\ \n\r\ \n :if ( \$cadIspsCaidos != \"\" ) do={\r\ \n /tool e-mail send to=\$foCorreoAdministrador subject=\"Route\ r Balanceador \$identidad\" body=\"El \$fecha a las \$tiempo los ISP \$cad\ IspsCaidos se encuentran caidos\" start-tls=yes;\r\ \n }\r\ \n\r\ \n :log info \"Se envi\F3 la notificaci\F3n\";\r\ \n :delay 1;\r\ \n }\r\ \n\r\ \n :if ( \$foCorreoAdministrador = \"\" ) do={\r\ \n :log info \"No se envi\F3 la notificaci\F3n porque la variable f\ oCorreoAdministrador esta en blanco\";\r\ \n }\r\ \n}\r\ \n\r\ \n\r\ \n" add name=lanzadorFailover owner=admin policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ \_Script que se encarga de verificar que el failover\r\ \n# no se est\E9 ejecutando previamente para evitar duplicidad de trabajos\ \r\ \n\r\ \n# Obtenci\F3n del ID del failover\r\ \n:local idJobEjecucion [/system script job find script=failover];\r\ \n\r\ \n# Si el script est\E1 en ejecuci\F3n evita lanzar por segunda vez el scr\ ipt\r\ \n:if (\$idJobEjecucion!=\"\" ) do={ :end; }\r\ \n\r\ \n# Si no se est\E1 ejecutando previamente se lanza el script\r\ \n/system script run failover\r\ \n" add name=lanzadorFailoverActualizadorRutaDefecto owner=admin policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ \_Script que se encarga de verificar que el failoverActualizadorRutaDefect\ o\r\ \n# no se est\E9 ejecutando previamente para evitar duplicidad de trabajos\ \r\ \n\r\ \n# Obtenci\F3n del ID del failoverActualizadorRutaDefecto\r\ \n:local idJobEjecucion [/system script job find script=failoverActualizad\ orRutaDefecto];\r\ \n\r\ \n# Si el script est\E1 en ejecuci\F3n evita lanzar por segunda vez el scr\ ipt\r\ \n:if (\$idJobEjecucion!=\"\" ) do={ :end; }\r\ \n\r\ \n# Si no se est\E1 ejecutando previamente se lanza el script\r\ \n/system script run failoverActualizadorRutaDefecto\r\ \n" /system note set note="\ \n\\n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n LL IIIIIII VV VV AAAAAAA UU UU RRRRRRR \ \n LL III VV VV AA AA UU UU RR RR \ \n LL III VV VV AA AA UU UU RRRRRRR \ \n LL III VV VV AAAAAAA UU UU RR RR \ \n LL III VV VV AA AA UU UU RR RR \ \n LLLLLLL IIIIIII VVV AA AA UUUUUUU RR RR \ \n\ \n\ \n www.livaur.com \ \n\ \n_______________________________________________________________\ \n\ \n CONFIGURACIONES EQUIPOS MIKROTIK \ \n_______________________________________________________________\ \n\ \n Para soporte Escribenos en nuestro chat \ \n de nuestra pagina web o al correo redes3@livaur.com \ \n o llamenos al (594) 958 2511 ext. 604 \ \n\ \n" /system scheduler add interval=10s name=foSchedule1 on-event=\ lanzadorFailoverActualizadorRutaDefecto policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ start-date=jan/01/1970 start-time=00:00:00 add interval=10s name=foSchedule2 on-event=lanzadorFailover policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ start-date=jan/01/1970 start-time=00:00:00 # ¡IMPORTANTE! # Los nombres de las interfaces y la cantidad deben coincidir con las de tu router físico
Compact file avoidLoadBalanceV7
Descargar
# Configuración automática generada por SGCM # AvoidLoadBalance # Livaur SRL de CV # Versión de script: 4.0.0 # # Si tienes alguna duda escribenos a @livaur por Facebook Messenger # # Obtención de la versión del router :local version [/system resource get version]; :local versionp1 nil; :local versionp2 nil; :local versionp3 nil; :local posesp nil; :local pospun1 nil; :local pospun2 nil; :set posesp [:find $version " " -1]; :if ([:typeof $posesp] != "nil") do={ :set version [ :pick $version 0 $posesp ]; }; :set pospun1 [:find $version "." -1]; :set pospun2 [:find $version "." $pospun1]; :if ([:typeof $pospun1] != "nil") do={ :set versionp1 [:pick $version 0 $pospun1]; } else={ :set versionp1 $version; }; :if ([:typeof $pospun1] != "nil" && [:typeof $pospun2] != "nil") do={ :set versionp2 [:pick $version ($pospun1+1) $pospun2]; } else={ :if ([:typeof $pospun1] != "nil" && [:typeof $pospun2] = "nil") do={ :set versionp2 [:pick $version ($pospun1+1) [:len $version]]; } }; :if ([:typeof $pospun2] != "nil") do={ :set versionp3 [:pick $version ($pospun2+1) [:len $version]]; }; # fin de obtención de la versión del router # Validación de versión de router compatible :if ( $versionp1 < 7 ) do={ :put ( "La version de Router OS debe ser mayor o igual a la 7.0 " ); :put ( "Tu router tiene la version ".$version." de Router OS." ); :put ( "La version de Router OS no es valida para hacer instalacion."); :exit } else={ :put ( "Version de Router OS ". $version. " valida para hacer instalacion."); }; /interface/ethernet/set [ find name="ether1" ] \ name="ether1_WAN" /interface/ethernet/set [ find name="ether2" ] \ name="ether2_WAN" /interface/ethernet/set [ find name="ether5" ] \ name="ether5_LAN" /interface/list add name=LAN add name=WAN /interface/list/member add interface="ether5_LAN" list=LAN add interface="ether1_WAN" list=WAN add interface="ether2_WAN" list=WAN /ip/pool/add name=poolLAN ranges=172.16.10.2-172.16.10.254 /ip/dhcp-server add address-pool=poolLAN disabled=no interface="ether5_LAN" name=serverLAN /ip/dhcp-server/network add address=172.16.10.0/24 dns-server=8.8.8.8,8.8.4.4 gateway=172.16.10.1 netmask=24 /ip/dns/set allow-remote-requests=yes servers=8.8.8.8 /ip/address/add address=172.16.10.1/24 interface="ether5_LAN" network=172.16.10.0 /routing/table/add name="to_ISP1" fib; /routing/table/add name="to_ISP2" fib; /ip/firewall/mangle add action=mark-routing chain=prerouting \ comment="Sin balanceo" new-routing-mark=to_ISP2 passthrough=no src-address=172.16.10.25 add action=accept chain=prerouting \ dst-address=192.168.250.250 \ in-interface-list=LAN comment="fo_ip_gw1" add action=accept chain=prerouting \ dst-address=192.168.250.250 \ in-interface-list=LAN comment="fo_ip_gw2" add action=mark-connection chain=prerouting connection-mark=no-mark \ in-interface="ether1_WAN" new-connection-mark=ISP1_conn add action=mark-connection chain=prerouting connection-mark=no-mark \ in-interface="ether2_WAN" new-connection-mark=ISP2_conn add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local \ in-interface-list=LAN new-connection-mark=ISP1_conn \ per-connection-classifier=both-addresses:2/0 add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local \ in-interface-list=LAN new-connection-mark=ISP2_conn \ per-connection-classifier=both-addresses:2/1 add action=log chain=prerouting log=no comment=fo_bandera_pcc disabled=yes add action=mark-routing chain=prerouting connection-mark=ISP1_conn \ in-interface-list=LAN new-routing-mark=to_ISP1 passthrough=no add action=mark-routing chain=prerouting connection-mark=ISP2_conn \ in-interface-list=LAN new-routing-mark=to_ISP2 passthrough=no add action=mark-routing chain=output connection-mark=ISP1_conn \ new-routing-mark=to_ISP1 passthrough=no add action=mark-routing chain=output connection-mark=ISP2_conn \ new-routing-mark=to_ISP2 passthrough=no /ip/firewall/nat add action=masquerade chain=srcnat out-interface-list=WAN comment="NAT para los paquetes que salgan por las interfaces WAN" [:parse "/ip/route/add distance=1 gateway=\"192.168.251.251%ether1_WAN\" \ routing-table=\"to_ISP1\"; "] /ip/route/add dst-address=0.0.0.0/0 routing-table=main pref-src=0.0.0.0 gateway=1.1.1.1 \ check-gateway=ping distance=1 scope=30 target-scope=11 suppress-hw-offload=no \ comment="fo_isp1mon" /ip/route/add dst-address=1.1.1.1 routing-table=main gateway=192.168.1.1 \ distance=1 scope=10 target-scope=10 suppress-hw-offload=no \ comment="fo_isp1gtw" [:parse "/ip/route/add distance=1 gateway=\"192.168.251.251%ether2_WAN\" \ routing-table=\"to_ISP2\"; "] /ip/route/add dst-address=0.0.0.0/0 routing-table=main pref-src=0.0.0.0 gateway=8.8.4.4 \ check-gateway=ping distance=1 scope=30 target-scope=11 suppress-hw-offload=no \ comment="fo_isp2mon" /ip/route/add dst-address=8.8.4.4 routing-table=main gateway=192.168.2.1 \ distance=1 scope=10 target-scope=10 suppress-hw-offload=no \ comment="fo_isp2gtw" /ip/dhcp-client add add-default-route=no dhcp-options=hostname,clientid disabled=no interface="ether1_WAN" script=\ ("\r\ \n:local gateway [/ip/dhcp-client get [find interface=\"ether1_WAN\"] gateway];\r\ \n/ip/route \r\ \nset [ find routing-table=\"to_ISP1\" ] gateway=\"\$gateway%ether1_WAN\"; \r\ \nset [ find comment=\"fo_isp1gtw\" ] gateway=\"\$gateway\"; \r\ \n/ip/firewall/mangle \r\ \nset [ find comment=\"fo_ip_gw1\" ] dst-address=\$gateway;") /ip/dhcp-client add add-default-route=no dhcp-options=hostname,clientid disabled=no interface="ether2_WAN" script=\ ("\r\ \n:local gateway [/ip/dhcp-client get [find interface=\"ether2_WAN\"] gateway];\r\ \n/ip/route \r\ \nset [ find routing-table=\"to_ISP2\" ] gateway=\"\$gateway%ether2_WAN\"; \r\ \nset [ find comment=\"fo_isp2gtw\" ] gateway=\"\$gateway\"; \r\ \n/ip/firewall/mangle \r\ \nset [ find comment=\"fo_ip_gw2\" ] dst-address=\$gateway;") /system/identity/set name="Balanceador PCC" /system/script add name=failoverConfig owner=admin policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ \_Correo electr\F3nico del administrador al que llegaran las notificacione\ s de ISPs caidos\r\ \n:global foCorreoAdministrador \"\";\r\ \n\r\ \n# Bandera que indica si se van a enviar correos de notificacion \"si\"/\ \"no\"\r\ \n:global foEnvioEmailsNotificacion \"no\";\r\ \n\r\ \n# Definici\F3n de ISPs y capacidades proporcionales\r\ \n:global foIsps {{1;1};{2;1} };\r\ \n\r\ \n# Relacion de ISPs con Interfaces\r\ \n:global foRelIspInterfaz {{1;\"ether1_WAN\"};{2;\"ether2_WAN\"};};\r\ \n\r\ \n\r\ " add name=failover owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=("#######################################\ ####\r\ \n# Script Failover para router con N ISPs\r\ \n###########################################\r\ \n\r\ \n# Carga de la configuracion\r\ \n/system/script/run failoverConfig;\r\ \n\r\ \n\r\ \n# Declaraci\F3n de variables principales\r\ \n:global foIspsCaidos {nil};\r\ \n:global foIspsCaidosAnt;\r\ \n:global foIspsAnt;\r\ \n:global foIpDNS;\r\ \n:global foIsps;\r\ \n:global foRelIspInterfaz;\r\ \n\r\ \n:local nIsps [:len \$foIsps];\r\ \n:local pasos 0;\r\ \n:local id;\r\ \n:local interfaz;\r\ \n:local inactive;\r\ \n\r\ \n\r\ \n\r\ \n# Inicializaci\F3n de los ISP antiguos\r\ \n:if ([:typeof \$foIspsAnt]=\"nothing\") do={ :set foIspsAnt \$foIsps; }\r\ \n\r\ \n# Inicializaci\F3n de los ISP caidos anteriormente\r\ \n:if ([:typeof \$foIspsCaidosAnt]=\"nothing\") do={ :set foIspsCaidosAnt {nil}; }\r\ \n\r\ \n\r\ \n\r\ \n# Actualizacion de las capacidades de los ISPs\r\ \n:if (\$foIsps != \$foIspsAnt) do={ /system/script/run failoverActualizadorCapacidadesISPs; }\r\ \n\r\ \n\r\ \n\r\ \n# Proceso de pruebas de conexi\F3n a internet por los distintos ISPs\r\ \n:foreach rel in=[\$foRelIspInterfaz] do={\r\ \n :set id (\$rel->0);\r\ \n :set interfaz (\$rel->1);\r\ \n :set inactive [/ip/route/get [/ip/route/find comment=\"fo_isp\$id\".\"mon\"] inactive];\r\ \n\r\ \n # Si el monitor está inactivo, entonces el ISP está caido y se agrega a la lista de foIspsCaidos \n :if (\$inactive) do={ :set (\$foIspsCaidos->\"\$id\") \$id; } \r\ \n}\r\ \n\r\ \n\r\ \n# Compara los ISPs caidos actualmente contra los ISPs caidos previamente\r\ \n# Si son iguales evita ejecutar por completo el script\r\ \n:if ( \$foIspsCaidos = \$foIspsCaidosAnt) do={ :exit; }\r\ \n\r\ \n\r\ \n# Si hubo cambios entre los ISPs activos actualmente y los anteriores\r\ \n# se procede a hacer acutalizaci\F3n en las reglas mangle,\r\ \n# liberar y reiniciar los clientes dhcp de las interfaces wan,\r\ \n# en la ruta por defecto y se env\EDa notificaci\F3n de los ISPs caidos\r\ \n\r\ \n# Liberacion y reinicio de los clientes dhcp de interfaces wan\r\ \n/system/script/run failoverDhcpClientRelease;\r\ \n\r\ \n# Actualizador de reglas Mangle\r\ \n/system/script/run failoverActualizadorReglasMangle;\r\ \n\r\ \n\r\ \n######################################################################\r\ \n# Si se llega a este punto es por que hubo cambios en los ISPs caidos\r\ \n######################################################################\r\ \n/system/script/run failoverNotificadorIspsCaidos;\r\ \n\r\ \n\r\ \n# Actualizaci\F3n de los ISPs caidos anteriormente\r\ \n:set foIspsCaidosAnt (\$foIspsCaidos);\r\ \n\r\ \n#:log info \"Fin failover-script\";\r\ \n\r\ \n") add name=failoverActualizadorCapacidadesISPs owner=admin policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ \_Actualizador de capacidades de ISPs\r\ \n\r\ \n:global foIsps;\r\ \n:global foIspsAnt;\r\ \n:global foIspsCaidosAnt;\r\ \n\r\ \n:local idpcc [/ip/firewall/mangle/find comment=\"fo_bandera_pcc\"];\r\ \n:local pasos;\r\ \n\r\ \n# Eliminaci\F3n de las reglas pcc inservibles, a excepci\F3n de la fo_ba\ ndera_pcc\r\ \n:local idsReglasPcc [/ip/firewall/mangle/find per-connection-classifier~\ \"both-addresses\" and comment!=\"fo_bandera_pcc\"];\r\ \n\r\ \n:foreach id in=[\$idsReglasPcc] do={\r\ \n /ip/firewall/mangle/remove [find .id=\$id];\r\ \n}\r\ \n\r\ \n# Calculo de los pasos totales\r\ \n:set pasos 0;\r\ \n:foreach isp in=[\$foIsps] do={\r\ \n :set pasos (\$pasos + (\$isp->1));\r\ \n}\r\ \n\r\ \n# Registro de las nuevas reglas pcc en funci\F3n de los ISPs\r\ \n:local indiceMaestro 0;\r\ \nforeach isp in=[\$foIsps] do={\r\ \n :for i from=1 to=(\$isp->1) step=1 do={\r\ \n :local idIsp (\$isp->0);\r\ \n /ip/firewall/mangle/add action=mark-connection chain=prerouting \ connection-mark=no-mark dst-address-type=!local in-interface-list=LAN \ new-connection-mark=(\"ISP\".\$idIsp.\"_conn\") \ per-connection-classifier=(\"both-addresses:\".\$pasos.\"/\".\$indiceMaestro) \ \r\ \n :set indiceMaestro (\$indiceMaestro+1);\r\ \n }\r\ \n}\r\ \n\r\ \n# Movimiento de las reglas pcc a su nueva posici\F3n para mantener la pr\ ioridad\r\ \n:set idsReglasPcc [/ip/firewall/mangle/find per-connection-classifier~\"\ both-addresses\"];\r\ \n:foreach idRegla in=[\$idsReglasPcc] do={\r\ \n if (\$idRegla != \$idpcc ) do={\r\ \n /ip/firewall/mangle/move [find .id=\$idRegla] destination=\$idpc\ c\r\ \n }\r\ \n}\r\ \n\r\ \n\r\ \n# Actualizaci\F3n de los ISP anteriores\r\ \n:set foIspsAnt \$foIsps;\r\ \n:log info \"Se actualizaron las capacidades de los ISPs\";\r\ \n\r\ \n" add name=failoverActualizadorReglasMangle owner=admin policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ \_Actualiador de reglas Mangle\r\ \n\r\ \n:global foIsps;\r\ \n:global foIspsCaidos;\r\ \n\r\ \n:local pasos;\r\ \n:local pasosTmp;\r\ \n:local estaCaido;\r\ \n:local idIsp;\r\ \n:local idsReglas;\r\ \n:local disabledtmp;\r\ \n:local idsTmp;\r\ \n\r\ \n\r\ \n# Calculo de los pasos totales\r\ \n:set pasos 0;\r\ \n:foreach isp in=[\$foIsps] do={\r\ \n :set estaCaido false;\r\ \n\r\ \n :foreach ispCaido in=[\$foIspsCaidos] do={\r\ \n :if (\$isp->0=\$ispCaido) do={\r\ \n :set estaCaido true;\r\ \n }\r\ \n }\r\ \n\r\ \n :if (\$estaCaido=false) do={\r\ \n :set pasos (\$pasos + (\$isp->1));\r\ \n }\r\ \n}\r\ \n#:log info \$pasos;\r\ \n\r\ \n\r\ \n:set pasosTmp 0;\r\ \n:foreach isp in=[\$foIsps] do={\r\ \n :set estaCaido false;\r\ \n :set idIsp (\$isp->0);\r\ \n\r\ \n :foreach ispCaido in=[\$foIspsCaidos] do={\r\ \n :if ((\$isp->0)=\$ispCaido) do={\r\ \n :set estaCaido true;\r\ \n }\r\ \n }\r\ \n\r\ \n # Si el ISP est\E1 ACTIVO se procede a actualizar las reglas con los \ \"pasos\" correctos\r\ \n :if (\$estaCaido=false) do={\r\ \n # Obtenci\F3n de los IDs de las reglas del ISP con new-connection-ma\ rk\r\ \n :set idsReglas [/ip/firewall/mangle/find new-connection-mark=\"ISP\$\ idIsp_conn\" and per-connection-classifier~\"both-addresses\" and comment!\ =\"fo_bandera_pcc\"];\r\ \n\r\ \n # Por cada ID de la regla se procede a asignar el total de pasos y e\ l n\FAmero de paso correspondiente\r\ \n :foreach idRegla in=[\$idsReglas] do={\r\ \n /ip/firewall/mangle/set [find .id=\$idRegla] per-connection-classi\ fier=\"both-addresses:\$pasos/\$pasosTmp\"\r\ \n\r\ \n #Incremento del contador de pasosTmp\r\ \n :set pasosTmp (\$pasosTmp + 1);\r\ \n }\r\ \n\r\ \n # Activaci\F3n de las reglas del ISP activo\r\ \n :set idsTmp [/ip/firewall/mangle/find new-connection-mark=\"ISP\$idI\ sp_conn\" and per-connection-classifier~\"both-addresses\" and comment!=\"\ fo_bandera_pcc\"];\r\ \n :foreach idtmp in [\$idsTmp] do={\r\ \n :set disabledtmp [/ip/firewall/mangle/get \$idtmp disabled];\r\ \n :if ( \$disabledtmp = true ) do={\r\ \n /ip/firewall/mangle/enable \$idtmp;\r\ \n }\r\ \n }\r\ \n }\r\ \n\r\ \n # Si el ISP est\E1 CAIDO se procede a desactivar las reglas\r\ \n :if (\$estaCaido=true) do={\r\ \n :set idsTmp [/ip/firewall/mangle/find new-connection-mark=\"ISP\$idI\ sp_conn\" and per-connection-classifier~\"both-addresses\" and comment!=\"\ fo_bandera_pcc\"];\r\ \n :foreach idtmp in [\$idsTmp] do={\r\ \n :set disabledtmp [/ip/firewall/mangle/get \$idtmp disabled];\r\ \n :if ( \$disabledtmp = false ) do={\r\ \n /ip/firewall/mangle/disable \$idtmp;\r\ \n }\r\ \n }\r\ \n }\r\ \n}\r\ \n\r\ \n" add name=failoverDhcpClientRelease owner=admin \ policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ source="# Script que se encarga de liberar y reiniciar el cliente DHCP\r\ \n# para las interfaces WAN que han vuelto a tener servicio de internet\r\ \n:global foIsps;\r\ \n:global foIspsCaidos;\r\ \n:global foIspsCaidosAnt;\r\ \n:global foRelIspInterfaz;\r\ \n\r\ \n# Se obtienen los ISPs que estan activos actualmente\r\ \n:foreach k,isp in=[\$foIsps] do={\r\ \n :local idIsp (\$isp->0);\r\ \n # Si el ISP no est\E1 caido y estuvo caido anteriormente\r\ \n :if ( [:len (\$foIspsCaidos->\$idIsp)] = 0 && [:len (\$foIspsCaidosAnt\ ->\$idIsp)] != 0) do={\r\ \n /ip/dhcp-client/release [find interface=((\$foRelIspInterfaz->\$k)->\ 1)];\r\ \n };\r\ \n};\r\ \n" add name=failoverNotificadorIspsCaidos owner=admin policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=("#\ \_Notificador de ISPs caidos\r\ \n\r\ \n# Variables globales\r\ \n:global foIspsCaidos;\r\ \n:global foIspsCaidosAnt;\r\ \n:global foCorreoAdministrador;\r\ \n:global foEnvioEmailsNotificacion;\r\ \n\r\ \n:local cadIspsCaidos \"\";\r\ \n:local tiempo;\r\ \n:local fecha;\r\ \n:local bndEnvioNotificacion false;\r\ \n:local identidad [/system identity get name];\r\ \n\r\ \n# Impresi\F3n de los ISPs caidos en el Log\r\ \n:if ( \$foIspsCaidos = {nil} ) do={\r\ \n :log warning \"Todos los ISPs se encuentran activos\";\r\ \n}\r\ \n\r\ \n:if ( \$foIspsCaidos != {nil} ) do={\r\ \n # Impresi\F3n de los ISPs caidos\r\ \n :foreach idIsp in=[\$foIspsCaidos] do={\r\ \n :if ( [:typeof \$idIsp] = \"num\" ) do={\r\ \n :log warning \"ISP\$idIsp est\E1 caido\";\r\ \n :set cadIspsCaidos (\$cadIspsCaidos.\",\".\$idIsp);\r\ \n }\r\ \n }\r\ \n}\r\ \n\r\ \n\r\ \n\r\ \n# Si la bandera de env\EDo de emails de notifaci\F3n est\E1 activa, ento\ nces\r\ \n# se env\EDa el e-mail de notificaci\F3n de ISPs caidos\r\ \n:if ( \$foEnvioEmailsNotificacion = \"si\" ) do={\r\ \n\r\ \n # Envio de correo de notificacion de ISP Caido\r\ \n :if ( \$foCorreoAdministrador != \"\" ) do={\r\ \n :set tiempo [/system/clock/get time];\r\ \n :set fecha [/system/clock/get date];\r\ \n\r\ \n # Env\EDo de correo\r\ \n :if ( \$cadIspsCaidos = \"\" ) do={\r\ \n /tool/e-mail/send to=\$foCorreoAdministrador subject=\"Route\ r Balanceador \$identidad\" body=\"El \$fecha a las \$tiempo todos los ISP\ \_estan activos\" tls=starttls;\r\ \n }\r\ \n\r\ \n :if ( \$cadIspsCaidos != \"\" ) do={\r\ \n /tool/e-mail/send to=\$foCorreoAdministrador subject=\"Route\ r Balanceador \$identidad\" body=\"El \$fecha a las \$tiempo los ISP \$cad\ IspsCaidos se encuentran caidos\" tls=starttls;\r\ \n }\r\ \n\r\ \n :log info \"Se envi\F3 la notificaci\F3n\";\r\ \n :delay 1;\r\ \n }\r\ \n\r\ \n :if ( \$foCorreoAdministrador = \"\" ) do={\r\ \n :log info \"No se envi\F3 la notificaci\F3n porque la variable f\ oCorreoAdministrador esta en blanco\";\r\ \n }\r\ \n}\r\ \n\r\ \n\r\ \n") add name=lanzadorFailover owner=admin policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ \_Script que se encarga de verificar que el failover\r\ \n# no se est\E9 ejecutando previamente para evitar duplicidad de trabajos\ \r\ \n\r\ \n# Obtenci\F3n del ID del failover\r\ \n:local idJobEjecucion [/system/script/job/find script=failover];\r\ \n\r\ \n# Si el script est\E1 en ejecuci\F3n evita lanzar por segunda vez el scr\ ipt\r\ \n:if (\$idJobEjecucion!=\"\" ) do={ :end; }\r\ \n\r\ \n# Si no se est\E1 ejecutando previamente se lanza el script\r\ \n/system/script/run failover\r\ \n" /system note set note="\ \n\ \n\ \n\ \n\ \n LL IIIIIII VV VV AAAAAAA UU UU RRRRRRR \ \n LL III VV VV AA AA UU UU RR RR \ \n LL III VV VV AA AA UU UU RRRRRRR \ \n LL III VV VV AAAAAAA UU UU RR RR \ \n LL III VV VV AA AA UU UU RR RR \ \n LLLLLLL IIIIIII VVV AA AA UUUUUUU RR RR \ \n\ \n\ \n https://livaur.com \ \n\ \n_______________________________________________________________ \ \n\ \n CONFIGURACIONES EQUIPOS MIKROTIK \ \n_______________________________________________________________ \ \n\ \n Para soporte Escribenos a @livaur por Facebook Messenger \ \n\ \n" /system/scheduler add interval=10s name=foSchedule1 on-event=lanzadorFailover policy=\ ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ start-date=jan/01/1970 start-time=00:00:00 # ¡IMPORTANTE! # Los nombres de las interfaces y la cantidad deben coincidir con las de tu router físico
COMENTARIOS
Ningún comentario por el momento
Atras
Compartir
Compartir
×
Copiar