Configuración de MikroTik
Ajustes de la conexión a la API de MikroTik RouterOS.
Conexión
Sección titulada «Conexión»mikrotik.address Obligatorio
Sección titulada «mikrotik.address »Env: MIKROTIK_HOST · Por defecto: — (obligatorio)
Dirección de la API de RouterOS en formato host:port. No tiene valor por defecto: el bouncer termina con mikrotik.address is required si el valor está vacío. El 192.168.0.1:8728 que se usa más abajo es el valor de ejemplo incluido en config/cs-routeros-bouncer.yaml, no un valor por defecto.
- Puerto
8728— API en texto plano - Puerto
8729— API cifrada con TLS
mikrotik: address: "192.168.0.1:8728"mikrotik.username Obligatorio
Sección titulada «mikrotik.username »Env: MIKROTIK_USER · Por defecto: — (obligatorio)
El nombre de usuario de la API de RouterOS. No tiene valor por defecto: el bouncer termina con mikrotik.username is required si el valor está vacío. El nombre crowdsec es el valor de ejemplo incluido en config/cs-routeros-bouncer.yaml, no un valor por defecto. Usa un usuario dedicado con permisos mínimos. Consulta Configuración del router para crear el usuario.
mikrotik.password Obligatorio
Sección titulada «mikrotik.password »Env: MIKROTIK_PASS · Por defecto: — (obligatorio)
La contraseña de la API de RouterOS.
mikrotik.tls Opcional
Sección titulada «mikrotik.tls »Env: MIKROTIK_TLS · Por defecto: false
Habilita TLS para la conexión a la API de RouterOS. Requiere el servicio api-ssl en el router (puerto 8729).
mikrotik: address: "192.168.0.1:8729" tls: truemikrotik.tls_insecure Opcional
Sección titulada «mikrotik.tls_insecure »Env: MIKROTIK_TLS_INSECURE · Por defecto: false
Omite la verificación del certificado TLS. Solo es necesario cuando el router usa un certificado autofirmado.
Tiempos de espera
Sección titulada «Tiempos de espera»mikrotik.connection_timeout Opcional
Sección titulada «mikrotik.connection_timeout »Env: MIKROTIK_CONN_TIMEOUT · Por defecto: 10s
Tiempo máximo para conectar e iniciar sesión en la API, al arrancar y en cada reconexión; 0 significa sin límite. Usa el formato de duración de Go.
mikrotik.command_timeout Opcional
Sección titulada «mikrotik.command_timeout »Env: MIKROTIK_CMD_TIMEOUT · Por defecto: 30s
Tiempo máximo de espera al router mientras responde a un comando de la API: hasta que empieza la respuesta, y entre dos partes de una respuesta larga. Un router que deja de responder hace fallar el comando; una respuesta que sigue llegando, como una address-list grande en un router lento, no se corta. Auméntalo si tu router tarda en empezar a responder.
Pool de conexiones
Sección titulada «Pool de conexiones»mikrotik.pool_size Opcional
Sección titulada «mikrotik.pool_size »Env: MIKROTIK_POOL_SIZE · Por defecto: 4
Número de sesiones de la API de RouterOS que el bouncer puede usar para el trabajo en paralelo, como las eliminaciones de la reconciliación. Un valor más alto aumenta el rendimiento cuando la reconciliación tiene que borrar muchas entradas obsoletas del address-list, y con bulk_add_method: api también cuando tiene muchas que añadir por un enlace con latencia; en la LAN del router una sola sesión añade más rápido, y cada sesión extra ocupa unos 1,7 MiB de RAM del router. Las decisiones en vivo siempre usan la conexión principal, así que no se ven afectadas.
- Rango válido: 1–20
- Limitación automática: al arrancar, el bouncer consulta el límite
max-sessionsdel servicio API del router y reduce automáticamente el tamaño efectivo del pool para que nunca superemax-sessions − 2(reservando conexiones para el cliente principal y herramientas externas como WinBox).
mikrotik: pool_size: 8 # Mayor paralelismo para las eliminaciones de la reconciliaciónComprobar el límite del router
Sección titulada «Comprobar el límite del router»El servicio API de RouterOS tiene un ajuste max-sessions que limita las conexiones simultáneas. El valor de fábrica es 20.
# Comprobar el límite actual/ip/service/print where name=api
# Aumentarlo (el valor máximo admitido es 1000)/ip/service/set api max-sessions=1000Método de adición masiva
Sección titulada «Método de adición masiva»mikrotik.bulk_add_method Opcional
Sección titulada «mikrotik.bulk_add_method »Env: MIKROTIK_BULK_ADD_METHOD · Por defecto: script
Cómo añade la reconciliación (al arrancar y cada crowdsec.reconciliation_interval) las entradas del address-list que le faltan al router. Las decisiones en vivo no se ven afectadas: siempre se añaden con una llamada a la API cada una.
script(por defecto): el bouncer envía hasta 100 adiciones como un único script de RouterOS. En RouterOS 7.8rc1 y posteriores es una sola llamada a/executeque ejecuta el script de forma síncrona: no se guarda nada en el router y nada llega a su log. En versiones anteriores, y para un bloque que/executeno puede ejecutar (por encima de su límite de 64 kB, o en un router que resulta no tenerlo), el bouncer crea un/system/scripttemporal, lo ejecuta y lo vuelve a eliminar. En ambos casos los viajes de ida y vuelta que cuesta un bloque no dependen de cuántas entradas tenga: uno mediante/executey cuatro como script guardado. Por eso la latencia hasta el router pesa mucho menos que conapi, que paga un viaje por entrada. Una adición que el script no puede hacer se notifica mediante/executey se reintenta con su propia llamada a la API; si un script falla, ese bloque se reintenta con una llamada por entrada.api: cada entrada se añade con su propia llamada a la API, y las llamadas se reparten entre las conexiones del pool (pool_size), o van una tras otra por la conexión principal cuando el pool no se pudo abrir. Nunca se crea un script, y la configuración del router no se toca.
En RouterOS anterior a 7.8rc1, RouterOS registra cada script guardado con su código completo al crearlo, una auditoría de /system/script muestra los scripts del bouncer apareciendo y desapareciendo, y cada alta y baja es un cambio de configuración que RouterOS guarda; api evita todo eso. A partir de 7.8rc1, script tampoco deja nada de eso, siempre que /execute ejecute el bloque; la vuelta al script guardado descrita arriba sí lo deja. api sigue sin ejecutar ningún script, y guarda en caché el id de cada entrada que añade, así que un unban en vivo justo después de una pasada de reconciliación elimina la entrada sin buscarla antes. Las entradas del address-list con timeout, que es en lo que se convierten las decisiones, son dinámicas y se quedan en memoria en ambos casos.
mikrotik: bulk_add_method: api pool_size: 4 # las adiciones se reparten por el pool: ayuda con un enlace con latencia, no en la LAN del routerCPU del router
Sección titulada «CPU del router»mikrotik.cpu_limit Opcional
Sección titulada «mikrotik.cpu_limit »Env: MIKROTIK_CPU_LIMIT · Por defecto: 80
La carga de CPU del router, en porcentaje de todos sus núcleos, a partir de la cual el bouncer baja el ritmo de sus reconciliaciones. Mientras la carga está en ese valor o por encima, el bouncer hace una pausa antes de cada bloque de trabajo (un script de 100 altas, 100 altas o bajas sueltas, una búsqueda de duplicados) y usa una sola conexión de la API cada vez. La pausa empieza en 200 ms, se duplica por cada segundo ocupado hasta 5 s y se reduce a la mitad por cada segundo en que la carga está 10 puntos por debajo del límite (o por debajo de la mitad del límite, si es más bajo), hasta volver a pleno ritmo. Una pasada periódica también espera hasta un minuto a que baje la carga antes de leer la address-list. Los baneos y desbaneos en vivo no se frenan nunca, y se aplican mientras corre una pasada, frenada o no, salvo un desbaneo de una dirección que la pasada ya tenía previsto añadir, que se aplica cuando termina la pasada. Tampoco se frena el apagado. 0 lo desactiva.
La carga es el propio cpu-load de RouterOS: la media de todos los núcleos durante el último segundo, leída como mucho una vez por segundo mientras hay trabajo masivo. Un solo segundo ocupado, como las tareas periódicas del propio router, no frena nada: hacen falta dos seguidos.
mikrotik: cpu_limit: 80