MANUAL: Mikrotik, colección de scripting

Tengo esta duda sobre el uso de variables en los scripts.

¿Se puede invocar el valor de un campo por medio de una variable directa del sistema sin necesidad de crear una manualmente?

Script SendEmailFunction por @diamuxin

# Módulo para utilizar una cuenta Gmail para enviar emails.​

# Variables
:local SendFrom "correo-remitente@gmail.com";
:local PasswordMail "MyStrongPassword";
:local SmtpServer 173.194.76.108;
:local UserName "Router MikroTik";
:local SmtpPort 587;
:local UseTLS "yes";

Ejemplo: En Tools -> Email Setting, si hemos configurado los valores de Server, Port Start TLS, etc... llamarlos directamente en los scripts sin tener que crear variables manuales para tal fin.

Ver el adjunto 84825

Saludos!

Me pierdo un poco en esto... yo tengo configurado mi correo en la GUI del mikrotik... necesito tener mi datos tambien en plano en el scipt de envio? no puedo llamar a las variables locales de sistema?
 
Me pierdo un poco en esto... yo tengo configurado mi correo en la GUI del mikrotik... necesito tener mi datos tambien en plano en el scipt de envio? no puedo llamar a las variables locales de sistema?
En cada sitio va una cosa. En los settings del mail configuras tu cuenta de correo. Con tu usuario y la contraseña de la cuenta de aplicación que comenté antes.

Captura de pantalla 2021-08-17 a las 16.57.26.png


Hecho esto, desde cualquier script, invocas la función de envío de mail. Para hacerlo, necesitas pasarle a la función el correo del destinatario (que puedes ser tú mismo o cualquier otro correo), el asunto y el cuerpo del mensaje. Tipo esto:

Código:
/tool e-mail send to=quiensea@gmail.com subject="New cloud backup created for $[/system identity get name] router" body="A new cloud backup has been created at $[/system clock get time] on $[/system clock get date]."

Saludos!
 
Como siempre, genial @pokoyo!

Os paso un script que conseguí hace tiempo (no recuerdo donde) que crea un reporte de IP's para posteriormente crear una regla en RAW que bloquee la citada lista, por si puede ser de utilidad:

Código:
delay 15
ip firewall address-list
:local update do={
:do {
:local data ([:tool fetch url=$url output=user as-value]->"data")
:local array [find dynamic list=blacklist]
:foreach value in=$array do={:set array (array,[get $value address])}
:while ([:len $data]!=0) do={
:if ([:pick $data 0 [:find $data "\n"]]~"^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}") do={
:local ip ([:pick $data 0 [:find $data $delimiter]].$cidr)
:do {add list=blacklist address=$ip comment=$description timeout=1d} on-error={
:do {set ($array->([:find $array $ip]-[:len $array]/2)) timeout=1d} on-error={}
}
}
:set data [:pick $data ([:find $data "\n"]+1) [:len $data]]
}
} on-error={:log warning "Address list <$description> update failed"}
}
$update url=http://feeds.dshield.org/block.txt description=DShield delimiter=("\t") cidr=/24
$update url=http://www.spamhaus.org/drop/drop.txt description="Spamhaus DROP" delimiter=("\_")
$update url=http://www.spamhaus.org/drop/edrop.txt description="Spamhaus EDROP" delimiter=("\_")
$update url=https://sslbl.abuse.ch/blacklist/sslipblacklist.txt description="Abuse.ch SSLBL" delimiter=("\r")
$update url=https://raw.githubusercontent.com/ktsaou/blocklist-ipsets/master/firehol_level2.netset description="FireHOL Level2" delimiter=("\n")
$update url=https://lists.blocklist.de/lists/all.txt description="BlockList.de" delimiter=("\n")

Saludos!
lo he ejecutado hace unos 15 minutos y sigo sin ver la regla creada... hay algun log para revisar?
 
Hola, desde Tools -> Email, si tienes tu cuenta bien configurada, haz una prueba de envío. Si te falla revisa la configuración de tu cuenta de Google a ver si tiene alguna restricción al haber realizado varios envíos muy seguidos, hay que probar, siempre puedes crear una nueva cuenta email de Google y probar desde ésta.

S@lu2.
Hola @dimuxin desde Tools -> Email, lo envía perfectamente con cuentas de Gmail, pero con la función que implementaste tú que me gusta mucho no funciona con las mismas cuentas de gmail que en tools -> email si funcionan, pero si en tú función meto una cuenta de hotmail, funciona perfectamente la función. Cosas inexplicables que a veces por inexperiencia o por estar obcecado no se solucionan. Gracias.

Saludos
 
Las posibilidades de los scripts son enormes, pero veo un gran inconveniente. Haría falta disponer de un editor de código que reconozca la sintaxis a la hora de programarlos. Sería de mucha utilidad para aprender. No me gusta sólo copiar y pegar.

¿Conocéis alguno?

Saludos.
 
Las posibilidades de los scripts son enormes, pero veo un gran inconveniente. Haría falta disponer de un editor de código que reconozca la sintaxis a la hora de programarlos. Sería de mucha utilidad para aprender. No me gusta sólo copiar y pegar.

¿Conocéis alguno?

Saludos.
Yo utilizo Visual Studio Code con la extensión instalada "RouterOS Syntax Highlighting".

1629286331876.png


S@lu2.
 
Hola @dimuxin desde Tools -> Email, lo envía perfectamente con cuentas de Gmail, pero con la función que implementaste tú que me gusta mucho no funciona con las mismas cuentas de gmail que en tools -> email si funcionan, pero si en tú función meto una cuenta de hotmail, funciona perfectamente la función. Cosas inexplicables que a veces por inexperiencia o por estar obcecado no se solucionan. Gracias.

Saludos
Supongo que aquí habrás puesto tu email a donde quieres que te lleguen los correos, verdad?

1629286552065.png


Si lo has puesto bien no se me ocurre otra cosa, porque los scripts los pruebo antes de publicarlos.

S@lu2.
 

Script para informar cuando un usuario se ha logueado en el router (1/2)​

Este script recupera las sesiones activas realizadas por cualquier vía, como winbox, ssh, etc. y envía un correo electrónico al administrador informando del número de sesiones activas.

Requiere permisos: read, write, policy, test.
Programar la llamada al script cada 10-15 min (a gusto de cada usuario)

Bash:
# written by Sergei Eremenko (https://github.com/SmartFinn)
# modified by @diamuxin

:global TokensOfLoggedUsers
# :local emailAddress "destinatario@gmail.com"
:local token
:local tokenList
:local newSession
:local msgBody ""

/user active {
  :foreach session in=[find via!="api"] do={
    :set token ([get $session name]."-".[get $session via]."-".[get $session when]);
    :set tokenList ($token.",".$tokenList);
    :set newSession true;
    :foreach savedToken in=$TokensOfLoggedUsers do={
      :if ($savedToken = $token) do={
        :set newSession false;
      }
    };
    :if ($newSession) do={
      :set msgBody ($msgBody.[get $session name]." logged in from ".[get $session address]);
      :set msgBody ($msgBody." via ".[get $session via]." at ".[get $session when]."\r\n");
    }
  }
};
if ($msgBody != "") do={
  :local msgSubj ("New user(s) logged in to ".[/system identity get name]);
  :set msgBody ($msgBody."\r\n"."At ".[/system clock get time]);
  :set msgBody ($msgBody.", ".[/user active print count-only]." management session(s)");
  :set msgBody ($msgBody." is active on ".[/system identity get name]);
# La siguiente línea del script original se sustituye por el módulo Email
# /tool e-mail send to=$emailAddress subject=$msgSubj body=$msgBody;

# START Send Email Module
  :local SendTo "destinatario@gmail.com";
  :local Subject $msgSubj;
  :local MessageText $msgBody;
  :local FileName "";
  :local SendEmail [:parse [/system script get SendEmailFunction source]];
  $SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
# END Send Email Module

};

:set TokensOfLoggedUsers [:toarray $tokenList];

Recibimos un email como este:

Ver el adjunto 85332

Script para informar sobre intentos fallidos de Login y bloquea la IP (2/2)​

Como continuación al anterior script, el siguiente script informa por correo electrónico sobre los intentos fallidos de Login (configurable, en este caso con más de 2 intentos) y acto seguido mete las IPs "atacantes" en una lista de direcciones y se bloquea el acceso al router a través de una regla de firewall.

Creamos una regla específica de Logging que recopila los topics "critical,system,error" que provocan cada evento de fallo de login.

Bash:
/system logging action
add name=failedauth target=memory
/system logging
add action=failedauth topics=critical,system,error

Creamos un script con el nombre: CheckFailureLoginUser

Bash:
:local logBuffer "failedauth"
:local failthreshold 2
:local blocklist "Lst_AttemptLoginIP"
:local GTime [:pick [/system clock get time] 0 8]
:local DeviceName [/system identity get name];

# ----------------------------------------------------------------------------------------

:local attackiparray {0}
:local attackcountarray {0}
:local logEntryTopics
:local logEntryTime
:local logEntryMessage
:local clearedbuf
:local lines
:local datetime [/system clock get date]
:set clearedbuf 0

:local i 0
:foreach rule in=[/log print as-value where buffer=($logBuffer)] do={
# Now all data is collected in memory..

# Clear log buffer right away so new entries come in
   :if ($clearedbuf = 0) do={
      /system logging action {
         :set lines [get ($logBuffer) memory-lines]
         set ($logBuffer) memory-lines 1
         set ($logBuffer) memory-lines $lines
      }
      :set clearedbuf 1
   }
# End clear log buffer

   :set logEntryTime ""
   :set logEntryTopics ""
   :set logEntryMessage ""

:set logEntryTime ($rule->"time")
:set logEntryTopics ($rule->"topics")
:set logEntryMessage ($rule->"message")

:if ($logEntryMessage~"login failure") do={

:local attackip [:pick $logEntryMessage ([:find $logEntryMessage "from "]+5) ([:find $logEntryMessage " via"])]

:local x 0
:foreach ip in=$attackiparray do={
  :if ($ip = $attackip) do={
    :set ($attackcountarray->$x) (($attackcountarray->$x)+1)
  } else={
    :set ($attackiparray->$i) $attackip
    :set ($attackcountarray->$i) 1
  }
:set x ($x+1)
}
}
:set i ($i+1)
# end foreach rule
}
:local z 0
:foreach ip in=$attackiparray do={
  :if ($attackcountarray->$z > $failthreshold) do={
    :set ($attackcountarray->$z) 0
    /ip firewall address-list add address=($attackiparray->$z) list=$blocklist
   
    # START Send Email Module
    :local SendTo "destinatario@gmail.com";
    :local Subject "\E2\9A\A0 MikroTik alert on $datetime";
    :local MessageText "Your Router ($DeviceName) is attempt login by: $attackiparray at $GTime. Now it has been add to block list.";
    :local FileName "";
    :local SendEmail [:parse [/system script get SendEmailFunction source]];
    $SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
    # END Send Email Module
   
  }
:set ($attackcountarray->$z) 0
:set z ($z+1)
}

Creamos la programación del script con el mismo nombre: CheckFailureLoginUser (aunque puedes llamarlo como quieras)

Bash:
/system scheduler
add interval=20s name=CheckFailureLoginUser on-event=CheckFailureLoginUser \
policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
start-date=aug/18/2021 start-time=12:00:00

Por último la regla de firewall que bloquea los accesos de la address list: Lst_AttemptLoginIP

Bash:
# in-interface: asignar la interface WAN, en mi caso "pppoe-out1", puede ser también "ether1", etc.
/ip firewall filter
add action=drop chain=input comment="Drop Attempt Login User" disabled=yes src-address-list=Lst_AttemptLoginIP

Cuando el script detecta (se ejecuta cada 20s) que hay varios intentos fallidos de Login (>2) bloquea la IP y nos informa con un correo electrónico como este:

Ver el adjunto 85374

Modificado el post original, añadiendo un segundo script relacionado con el logueo en el router:
Script para informar sobre intentos fallidos de Login y bloquea la IP (2/2)

S@lu2.
 

Script para subir las estadísticas del router a dweet.io​

Después podemos usar esos datos para crear un panel de control web con indicadores y gráficos en freeboard.io.

AVISO: los feeds de datos de dweet.io son públicos, así que debes conocerlo antes de enviar datos confidenciales a dweet.io. Tienen cuentas comerciales en las que puede bloquear (hacer privados) los feeds de datos. Los paneles de freeboard.io son públicos de forma predeterminada, pero se pueden convertir en privados. Además, este script se proporciona tal cual, utilícelo bajo su propio riesgo.

1. Instale el script con el siguiente código y nómbrelo como "dweet-stats".

Bash:
#
#   This script has two parts:  1) RouterOS statistics collector 2) Push router stats up to dweet.io
#
#   This script can be adapted to send the collected statistics to any NMS system that supports
#    receiving data via http get/post requests.
#
#   Tested on RouterOS v6.48.3
#   Learn more about this script and dweet.io by reading...
#   http://jcutrer.com/howto/networking/mikrotik/mikrotik-script-dweet-io-stats
#
#   Script Revision:  1.0.2
#   Author Name:     Jonathan Cutrer
#   Modified by:     @diamuxin
#

#
# Begin Setup
#
:local interfaceWAN         "pppoe-out1";
:local interfaceWLAN        "wlan1-2G";
:local interfaceWLAN2       "wlan2-5G";
:local interfaceWLANGuest   "wlan3-guest";
:local prefix               "mikrotik-stats";
:local dweetURL             "https://dweet.io/dweet/for/";
:local dataParams;

#
# Collection Groups
# Define what gets groups of statistics get collected and sent
#
:local enBoard true
:local enPerf true
:local enHealth true
:local enRouter true
:local enRouting true
:local enFirewall true
:local enWireless true
:local enVPN true
#
# End Setup


#
# Collect Stats: Board
#
:local boardData; :local identity; :local model; :local serial;
if ( $enBoard ) do={
:put "Collecting Board data..."
    :set identity             [/system identity get name];
    :set model                [/system routerboard get model];
    :set serial         [/system routerboard get serial-number];
    :set boardData        "identity=$identity&model=$model&serial=$serial"
    :set dataParams $boardData;

}

# Set the thing name
:local thing          "$prefix-$serial"

#
# Collect Stats: Perf
#
:local perfData; :local cpuLoad; :local memFree; :local uptime;
if ( $enPerf ) do={
    :put "Collecting Performance data..."
    :delay 5
    :set cpuLoad [/system resource get cpu-load];
    :set memFree [/system resource get free-memory];
    :set uptime [/system resource get uptime];
    :set perfData "cpu-load=$cpuLoad&uptime=$uptime&mem-free=$memFree"
    :set dataParams ( $dataParams . "&" . $perfData);
}

#
# Collect Stats: Health
#
:local healthData; :local volts; :local amps; :local watts; :local temp; :local cpuTemp; :local fanSpeed;
if ( $enHealth ) do={
    :put "Collecting Health data..."
    :set volts [/system health get voltage];
    :set amps [/system health get current];
    :set watts [/system health get power-consumption];
    :set temp [/system health get temperature];
    :set cpuTemp [/system health get cpu-temperature];
    :set fanSpeed [/system health get fan1-speed];
    :set healthData "volts=$volts&amps=$amps&watts=$watts&temp=$temp&cpu-temp=$cpuTemp&fan-speed=$fanSpeed"
    :set dataParams ( $dataParams . "&" . $healthData);
}


#
# Collect Stats: Router
#
:local routerData; :local ipRoutes;
if ( $enRouter ) do={
    :put "Collecting Router data..."
    :set ipRoutes [:len [/ip route find]];
    :set routerData  "ip-routes=$ipRoutes"
    :set dataParams ( $dataParams . "&" . $routerData);
}

#
# Collect Stats: Routing
#
:local routingData; :local bgpPeers; :local ospfNeighbors;
if ( $enRouting ) do={
    : put "Collecting Routing Protocol data..." ;
    :set bgpPeers [:len [/routing bgp peer find]];
    :set ospfNeighbors [:len [/routing ospf neighbor find]];
    :set routingData  "bgp-peers=$bgpPeers&ospf-neighbors=$ospfNeighbors";
    :set dataParams ( $dataParams . "&" . $routingData);
}

#
# Collect Stats: Wireless
#
:local wirelessData; :local wlan2G; :local wlan5G; :local wlanGuests;
if ( $enWireless ) do={
    :put "Collecting Wireless data...";
    :set wlan2G [/interface wireless registration-table print count-only where interface="$interfaceWLAN"];
    :set wlan5G [/interface wireless registration-table print count-only where interface="$interfaceWLAN2"];
    :set wlanGuests [/interface wireless registration-table print count-only where interface="$interfaceWLANGuest"];
    :set wirelessData "wlan-2g=$wlan2G&wlan-5g=$wlan5G&wlan-guests=$wlanGuests";
    :set dataParams ( $dataParams . "&" . $wirelessData);
}

#
# Collect Stats: Firewall
#
:local firewallData; :local ipFwConx;
if ( $enFirewall ) do={
    :put "Collecting Firewall data...";
    :set ipFwConx [/ip firewall connection tracking get total-entries];
    :set firewallData "ip-fw-conx=$ipFwConx";
    :set dataParams ( $dataParams . "&" . $firewallData);
}

#
# Collect Stats: VPN
#
:local vpnData; :local vpnPppConx; :local vpnIpsecPeers; :local vpnIpsecPolicy;
if ( $enFirewall ) do={
    :put "Collecting VPN data...";
    :set vpnPppConx [:len [/ppp active find]];
    :set vpnIpsecPeers [:len [/ip ipsec active-peers find]];
    :set vpnIpsecPolicy [:len [/ip ipsec policy find]];
    :set vpnData "vpn-ppp-conx=$vpnPppConx&vpn-ipsec-peers=$vpnIpsecPeers&vpn-ipsec-policys=$vpnIpsecPolicy";
    :set dataParams ( $dataParams . "&" . $vpnData);
}


#
# Test Output of Collected Data
#
:put $boardData
:put $perfData
:put $healthData
:put $routerData
:put $routingData
:put $wirelessData
:put $firewallData
:put $vpnData


#
# Build the Final Request URL
#
:local finalURL;
:set finalURL "$dweetURL$thing?$dataParams"

# print the final url
:put $finalURL


#
# Push data to dweet.io
#
/tool fetch url="$finalURL" mode=https keep-result=no

# end of script

Antes de crear el script, tiene que configurar sección "Setup" y asegurarse de que se ejecute sin errores:

Código:
/system script run dweet-stats

El nombre de mi interfaz WAN es "pppoe-out1" pero otras configuraciones de RouterOS lo nombran como "ether1", "ether1-gateway" o puede que esté usando una interfaz diferente para tu puerto WAN. El script también asume que su interfaz inalámbrica se llama "wlan1-2G", otra llamada "wlan2-5G" y una interfaz de invitados "wlan3-guest".

Si tiene problemas o no tiene interfaces wireless en su router, simplemente comente esas líneas y ajuste la variable "finalurl" para excluir esos datos.

2. Prueba el script

a) En WinBox, haga clic en New Terminal
b) Pegar el comando:

Código:
/system script run dweet-stats

La respuesta debe ser sin errores y similar a esto:

Código:
Collecting Board data...
Collecting Performance data...
Collecting Health data...
Collecting Router data...
Collecting Routing Protocol data...
Collecting Wireless data...
0
6
1
Collecting Firewall data...
Collecting VPN data...
identity=mikrotik&model=RBD52G-5HacD2HnD&serial=DXXXXXXXXXXA
cpu-load=0&uptime=2d05:58:26&mem-free=73080832
volts=&amps=&watts=&temp=&cpu-temp=&fan-speed=
ip-routes=7
bgp-peers=0&ospf-neighbors=0
wlan-2g=0&wlan-5g=6&wlan-guests=1
ip-fw-conx=108
vpn-ppp-conx=0&vpn-ipsec-peers=1&vpn-ipsec-policys=5
https://dweet.io/dweet/for/apartamento-stats-DXXXXXXXXXXA?identity=mikrotik&model=RBD52G-5HacD2HnD&serial=DXXXXXXXXXXA&cpu-load=0&uptime=2d05:58:26&mem-free=73080832&volts=&amps=&watts=&temp=&cpu-temp=&fan-speed=&ip-routes=7&bgp-peers=0&ospf-neighbors=0&wlan-2g=0&wlan-5g=6&wlan-guests=1&ip-fw-conx=108&vpn-ppp-conx=0&vpn-ipsec-peers=1&vpn-ipsec-policys=5
      status: finished
  downloaded: 0KiBC-z pause]
       total: 0KiB
    duration: 0s

3. Programa el script

Bash:
/system scheduler
add interval=60s name=dweet-stats on-event=dweet-stats \
policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
start-date=Aug/30/2021 start-time=00:00:00

4. Comprobar las estadísticas de tu router en dweet.io

La dirección que debes teclear sería algo así: http://dweet.io/follow/mikrotik-stats-<serial-number>

Por ejemplo: http://dweet.io/follow/mikrotik-stats-3E2E02190C64

1629745694583.png


5. Datos en formato RAW

También puede ver los datos en texto plano antes de procesar haciendo clic en la pestaña RAW.

1629745807319.png


6. Podemos trabajar con los datos de dweet para crear un panel con freeboard.io.

1629745850300.png


Para crear su propio Dashboard, puede hacer clic en el botón naranja en dweet.io o puede clonarlo en mi Dashboard y cambiar la fuente de datos de dweet.io.

1629745988730.png


S@lu2.
 
Última edición:
SCRIPT QUE TOMA LAS MACs AGREGADAS EN IP BINDINGS, LES DA IP FIJA Y UN RATE-LIMIT de 5M

:foreach ENTRADA in=[/ip hotspot host find where bypassed ] do={
:local MAC [/ip hotspot host get number=$ENTRADA mac-address];
:local COMENTARIO [/ip hotspot host get number=$ENTRADA comment];
:local IP [/ip hotspot host get number=$ENTRADA address];
:local ESTATICA "ESTATICA"

:if ( [/ip dhcp-server lease find where dynamic=yes and mac-address=$MAC]!="") do={
:local NUMERO [/ip dhcp-server lease find where mac-address=$MAC]
/ip dhcp-server lease make-static numbers=$NUMERO
/ip dhcp-server lease set number=$NUMERO rate-limit="5M"
set ESTATICA "CONVERTIDA A ESTATICA, RATE LIMIT 5M"
}

:log info "Entrada IP Bindings: $IP, MAC: $MAC, COMMENT: $COMENTARIO, TIPO IP: $ESTATICA"
}
 
SCRIPT QUE TOMA LAS MACs AGREGADAS EN IP BINDINGS, LES DA IP FIJA Y UN RATE-LIMIT de 5M
Hostias, este script es un poco destroyer. No sería muchísimo más sencillo hacer una cola general para el segmento de red que uses como hotspot, y darle un ancho de banda máximo, a repartir equitativamente entre el número de usuarios conectados? Algo así, suponiendo que tu hotspot trabaja con la subred 192.168.80.0/24
Código:
/queue simple
add max-limit=25M/100M name=hotspot queue=\
    pcq-upload-default/pcq-download-default target=192.168.80.0/24

Ir uno a uno creando leases estáticos y creando una cola para ellos... no lo veo.

Saludos!
 
Hostias, este script es un poco destroyer. No sería muchísimo más sencillo hacer una cola general para el segmento de red que uses como hotspot, y darle un ancho de banda máximo, a repartir equitativamente entre el número de usuarios conectados? Algo así, suponiendo que tu hotspot trabaja con la subred 192.168.80.0/24
Código:
/queue simple
add max-limit=25M/100M name=hotspot queue=\
    pcq-upload-default/pcq-download-default target=192.168.80.0/24

Ir uno a uno creando leases estáticos y creando una cola para ellos... no lo veo.

Saludos!
El tema es que en el segmento de red del hotspot tengo clientes que si han de pasar por el hotspot y tienen un rate distinto a los usuarios que se saltan el hotspot (Ip bindings). Estuve mirando y no se me ocurrió otra manera de limitar la velocidad de forma automatica en las macs que se van agragando a ip bindings. Ten en cuenta que estoy hablando de hoteles con cientos de usuarios pasando por el hotspot, y unas decenas que van cambiando constantemente en ip bindings. Hacerlo manualamente no es viable.

De todas maneras estoy aprendiendo, cualquier consejo es más que bienvenido.

Saludos
 
El tema es que en el segmento de red del hotspot tengo clientes que si han de pasar por el hotspot y tienen un rate distinto a los usuarios que se saltan el hotspot (Ip bindings). Estuve mirando y no se me ocurrió otra manera de limitar la velocidad de forma automatica en las macs que se van agragando a ip bindings. Ten en cuenta que estoy hablando de hoteles con cientos de usuarios pasando por el hotspot, y unas decenas que van cambiando constantemente en ip bindings. Hacerlo manualamente no es viable.

De todas maneras estoy aprendiendo, cualquier consejo es más que bienvenido.

Saludos
Ummm; le doy una pensada y te digo, a ver si se me ocurre una manera más ortodoxa de hacerlo.

Saludos!
 
Compi @5.1, te importaría abrir un hilo nuevo con esta cuestión en concreto, y adjuntar un export de la configuración de tu equipo? Por no arrancar aquí mismo una discusión que nada tiene que ver con este hilo. Estoy seguro de que hay una manera de hacer lo que quieres, sin necesidad de recurrir a un script, simplemente categorizando los clientes del hotspot en distintos perfiles, y con distinto tipo de colas.

Saludos!
 
  • Like
Reactions: 5.1
@pokoyo
Buenas....tenia un problema cada vez que cambiaba la ip publica de mi proveedor y era que metia la interfaz pppoe en la lista de interfaces de la LAN cuando solo debía estar en la lista de WAN (esto, debido a la configuración del firewal permitía ataques por winBox al mikrotik, que aunque no tenian efecto, al menos, eran molestos). Como nadie me dio solucion os detallo script que ejecuta cada minuto y elimina la citada interfaz de la lista de LAN. El script: if ([/interface list member print count-only where interface=pppoe-out2 list =LAN]=1) do={/interface list member remove numbers=[find where interface=pppoe-out2 list =LAN]} ... espero le sirva a alguien... PAZ Y VIVA EL BETIS
 
@pokoyo
Buenas....tenia un problema cada vez que cambiaba la ip publica de mi proveedor y era que metia la interfaz pppoe en la lista de interfaces de la LAN cuando solo debía estar en la lista de WAN (esto, debido a la configuración del firewal permitía ataques por winBox al mikrotik, que aunque no tenian efecto, al menos, eran molestos). Como nadie me dio solucion os detallo script que ejecuta cada minuto y elimina la citada interfaz de la lista de LAN. El script: if ([/interface list member print count-only where interface=pppoe-out2 list =LAN]=1) do={/interface list member remove numbers=[find where interface=pppoe-out2 list =LAN]} ... espero le sirva a alguien... PAZ Y VIVA EL BETIS
Eso, ¿relativo a algún script que hay en ese hilo, o a algo tuyo propio?

Saludos!
 
@pokoyo
Buenas....tenia un problema cada vez que cambiaba la ip publica de mi proveedor y era que metia la interfaz pppoe en la lista de interfaces de la LAN cuando solo debía estar en la lista de WAN (esto, debido a la configuración del firewal permitía ataques por winBox al mikrotik, que aunque no tenian efecto, al menos, eran molestos). Como nadie me dio solucion os detallo script que ejecuta cada minuto y elimina la citada interfaz de la lista de LAN. El script: if ([/interface list member print count-only where interface=pppoe-out2 list =LAN]=1) do={/interface list member remove numbers=[find where interface=pppoe-out2 list =LAN]} ... espero le sirva a alguien... PAZ Y VIVA EL BETIS
No entiendo muy bien por qué tuviste que crear un script para borrar la interfaz "pppoe-out2". ¿Quién crea esa interfaz? Lo normal es que si tienes sólo un operador, en la configuración inicial de cualquier Mikrotik se cree por defecto la interfaz "pppoe-out1" (si lo requiere tu ISP), la añades a tu "Interface List WAN" y esa ya no hay que tocarla más.

S@lu2.
 
No entiendo muy bien por qué tuviste que crear un script para borrar la interfaz "pppoe-out2". ¿Quién crea esa interfaz? Lo normal es que si tienes sólo un operador, en la configuración inicial de cualquier Mikrotik se cree por defecto la interfaz "pppoe-out1" (si lo requiere tu ISP), la añades a tu "Interface List WAN" y esa ya no hay que tocarla más.

S@lu2Buen
Buenas....esa interfaz esta dentro de los mienbros de la lista de interfaces WAN, que es donde debe de estar, pero lo que pasa es que cada vez que cambia mi ip (reinicio router o cualquier evento que haga cambiar mi ip) lo mete además en la Interface List LAN y queda como mienbro de la Interface List WAN y de la Interface List LAN. Esta última es la que no sé porque se crea (creo que la mete como interfaz dinámica)... al meterse en la Interface List LAN, en consonancia con la regla del firewall que solo permite entrar a winbox via LAN, consecuentemente permite intentos de entrada a Winbox por esa interfaz. El script lo que hace es comprobar cada minuto que esa interfaz no este en la Interface List LAN, y si lo esta, la elimina.
 
Última edición:
Buenas....esa interfaz esta dentro de los mienbros de la lista de interfaces WAN, que es donde debe de estar, pero lo que pasa es que cada vez que cambia mi ip (reinicio router o cualquier evento que haga cambiar mi ip) lo mete además en la Interface List LAN y queda como mienbro de la Interface List WAN y de la Interface List LAN. Esta última es la que no sé porque se crea (creo que la mete como interfaz dinámica)... al meterse en la Interface List LAN, en consonancia con la regla del firewall que solo permite entrar a winbox via LAN, consecuentemente permite intentos de entrada a Winbox por esa interfaz. El script lo que hace es comprobar cada minuto que esa interfaz no este en la Interface List LAN, y si lo esta, la elimina.
Si está entrando en esa lista de manera dinámica, es que tienes mal el profile. Edítalo y simplemente no selecciones ninguna lista, y evitarás que se meta en la lista LAN al reconectar. No necesitas ningún script para eso.

Saludos!
 
Arriba