Balanceo 2 Lineas + Filelover Nuevo
Balanceo 2 Lineas + Filelover Nuevo
/ip pool
add name=poolOficina ranges=192.168.100.100-192.168.100.190
/ip dhcp-server
add address-pool=poolOficina disabled=no interface=ether5 name=server1
/ip dns
set allow-remote-requests=yes servers=200.48.225.130,200.48.225.146
/ip address
add address=192.168.1.23/24 comment="IPs para puertos WAN" interface=ether1
network=192.168.1.0
add address=192.168.2.23/24 interface=ether2 network=192.168.2.0
add address=192.168.100.253/24 comment="IP para puerto LAN" interface=ether5
network=192.168.100.0
/ip route
add distance=1 gateway=192.168.1.1 routing-mark=to_ISP1
add distance=1 gateway=192.168.2.1 routing-mark=to_ISP2
/system scheduler
add interval=30s name=schedule1 on-event=failover
policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-
date=nov/01/2017 start-time=00:00:00
/system script
add name=failover owner=admin
policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon
source="#:log info \"Inicio failover para router con 2 ISPs\";\r\
\n\r\
\n:global ispsCaidosAnt;\r\
\n\r\
\n# PARA TRABAJAR CON MULTIPLES ISPS DE VELOCIDADES DIFERENTES\r\
\n# es necesario usar el sistema SGCM de Livaur, ya que genera reglas
adicionales,\r\
\n# se encuentra en el link: https://www.livaur.com/sgcm \r\
\n# \r\
\n# {{ID:nPasos}; {ID:nPasos}};\r\
\n#\r\
\n#\r\
\n:local isps {{1;1}; {2;1} };\r\
\n:local pasos 0;\r\
\n:local ispsCaidos;\r\
\n\r\
\n# Cantidad de pruebas ping que se lanzaran a la IP externa para determinar
si\r\
\n# el ISP est\E1 caido\r\
\n:local nPruebasPing 5;\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:local ipExterna \"200.48.225.130\";\r\
\n\r\
\n# Inicializaci\F3n de los ISP caidos anteriormente\r\
\n:if ([:typeof \$ispsCaidosAnt]=\"nothing\") do={ :set ispsCaidosAnt
{nil}; }\r\
\n\r\
\n\r\
\n# Inicializaci\F3n de los ISPs caidos\r\
\n:if ([:typeof \$ispsCaidos]=\"nothing\") do={ :set ispsCaidos {nil}; }\r\
\n\r\
\n# Proceso de pruebas de conexi\F3n a internet por los distintos ISPs\r\
\n:foreach isp in=[\$isps] do={\r\
\n #:log info (\$isp->1);\r\
\n :local indiceIsp (\$isp->0);\r\
\n\r\
\n :local rping [/ping \$ipExterna routing-table=\"to_ISP\$indiceIsp\" count=\
$nPruebasPing];\r\
\n\r\
\n # Si la respuesta de ping fue 0, entonces el ISP est\E1 caido y se agrega a
la lista de ispsCaidos\r\
\n :if (\$rping=0) do={\r\
\n :set (\$ispsCaidos->\"\$indiceIsp\") \$indiceIsp;\r\
\n :log info \"ISP\$indiceIsp caido\";\r\
\n }\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 ( \$ispsCaidos = \$ispsCaidosAnt) do={\r\
\n :exit;\r\
\n}\r\
\n# Si son diferentes, se actualizan los ispsCaidosAnt\r\
\n:if ( \$ispsCaidos != \$ispsCaidosAnt ) do={\r\
\n :set ispsCaidosAnt (\$ispsCaidos);\r\
\n}\r\
\n\r\
\n\r\
\n# C\E1lculo de los pasos totales\r\
\n:foreach isp in=[\$isps] do={\r\
\n :local estaCaido false;\r\
\n\r\
\n :foreach ispCaido in=[\$ispsCaidos] 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# Desactivacion de las mark_connection de ISPs caidos\r\
\n:foreach isp in=[\$ispsCaidos] do={\r\
\n /ip firewall mangle disable [find new-connection-mark=\"ISP\$isp_conn\" and
per-connection-classifier~\"both-addresses\"];\r\
\n}\r\
\n\r\
\n\r\
\n# Actualizaci\F3n de los pasos en funci\F3n de los ISPs activos\r\
\n:local pasosTmp 0;\r\
\n:foreach isp in=[\$isps] do={\r\
\n :local estaCaido false;\r\
\n :local idIsp (\$isp->0);\r\
\n\r\
\n :foreach ispCaido in=[\$ispsCaidos] do={\r\
\n :if ((\$isp->0)=\$ispCaido) do={\r\
\n :set estaCaido true;\r\
\n }\r\
\n }\r\
\n\r\
\n # Si el ISP no est\E1 caido se procede a actualizar las reglas con
los \"pasos\" correctos\r\
\n :if (\$estaCaido=false) do={\r\
\n # Desactivar las reglas del ISP activo para hacer la actualizacion\r\
\n /ip firewall mangle disable [find new-connection-mark=\"ISP\$idIsp_conn\"
and per-connection-classifier~\"both-addresses\"];\r\
\n\r\
\n # Obtenci\F3n de los IDs de las reglas del ISP con new-connection-mark\r\
\n :local idsReglas [/ip firewall mangle find new-connection-mark=\"ISP\
$idIsp_conn\" and per-connection-classifier~\"both-addresses\"];\r\
\n\r\
\n # Por cada ID de la regla se procede a asignar el total de pasos y el
n\FAmero de paso correspondiente\r\
\n :foreach idRegla in=[\$idsReglas] do={\r\
\n /ip firewall mangle set [find .id=\$idRegla] per-connection-
classifier=\"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 /ip firewall mangle enable [find new-connection-mark=\"ISP\$idIsp_conn\"
and per-connection-classifier~\"both-addresses\"];\r\
\n }\r\
\n}\r\
\n\r\
\n\r\
\n#:log info \"Fin failover-script\";\r\
\n"