Uno de los errores mas comunes en ISP MikroTik es limitar a cada cliente a su plan de forma rigida, desperdiciando el ancho de banda de los clientes que no lo estan usando en ese momento. Con Queue Tree y HTB puedes configurar que el enlace se aproveche al maximo: cada cliente tiene velocidad garantizada (CIR), pero si otros clientes estan inactivos, los activos pueden usar su ancho libre automaticamente hasta un maximo definido (MIR). Sin scripts, sin intervencion manual.
CIR (Committed Information Rate) = velocidad minima garantizada siempre, incluso en hora pico. MIR (Maximum Information Rate) = velocidad maxima que puede alcanzar el cliente cuando hay ancho libre en el enlace. En MikroTik: CIR = limit-at, MIR = max-limit en Queue Tree.
1. Como funciona la comparticion dinamica
El mecanismo es el siguiente: tienes un enlace de 100 Mbps con 20 clientes en plan de 10 Mbps cada uno (overbooking 2:1). A las 3 AM solo hay 2 clientes activos. Con limites rigidos cada uno usa maximo 10 Mbps y los 80 Mbps restantes se desperdician. Con comparticion dinamica esos 2 clientes pueden usar hasta 40 o 50 Mbps cada uno.
2. Arquitectura Queue Tree con HTB
La implementacion correcta usa una jerarquia de dos niveles: una cola padre que define el total del enlace, y colas hija (una por cliente o por plan) con limit-at (CIR) y max-limit (MIR).
HTB (Hierarchical Token Bucket) es el algoritmo que hace posible esto: cuando una cola hija no usa su CIR, ese ancho libre queda disponible en el pool de la cola padre, y otras colas hija pueden tomarlo hasta su MIR.
3. Configuracion basica: un plan, multiples clientes
Ejemplo con un enlace de 100 Mbps y clientes en plan de 10 Mbps, con CIR de 5 Mbps garantizados y MIR de 25 Mbps cuando hay disponibilidad:
# PASO 1: Marcar el trafico de cada cliente con mangle # Esto permite que Queue Tree identifique a quien pertenece cada paquete # Marcar conexiones de download (destino = IP del cliente) /ip firewall mangle add chain=forward dst-address=10.10.0.0/24 action=mark-packet new-packet-mark=clientes-down passthrough=no comment="marcar trafico download clientes" # Marcar conexiones de upload (origen = IP del cliente) /ip firewall mangle add chain=forward src-address=10.10.0.0/24 action=mark-packet new-packet-mark=clientes-up passthrough=no comment="marcar trafico upload clientes" # PASO 2: Cola padre global (limita el total del enlace) /queue tree add name=global-down parent=global packet-mark=clientes-down max-limit=100M queue=default comment="limite total descarga enlace WAN" /queue tree add name=global-up parent=global packet-mark=clientes-up max-limit=50M queue=default comment="limite total subida enlace WAN" # PASO 3: Cola hija por cliente (CIR=5M garantizado, MIR=25M maximo) # limit-at = CIR (garantizado aunque este congestionado) # max-limit = MIR (maximo cuando hay ancho libre) /queue tree add name=cliente-001-down parent=global-down dst-address=10.10.0.2/32 limit-at=5M max-limit=25M priority=5 comment="cliente001 down CIR=5M MIR=25M" /queue tree add name=cliente-001-up parent=global-up src-address=10.10.0.2/32 limit-at=2M max-limit=10M priority=5 comment="cliente001 up CIR=2M MIR=10M"
En switches CRS326, CRS354, CRS317 con Marvell L3HW: agregar reglas mangle en chain=forward deshabilita el hardware offloading. Aplica Queue Tree y mangle solo en el router upstream, nunca en el switch CRS que hace forwarding de capa 3.
4. Version con PPPoE: cola por sesion activa
Para clientes PPPoE, lo mas limpio es usar mangle con in-interface apuntando a la interface PPPoE del cliente. La comparticion funciona igual.
# Marcar paquetes por interface PPPoE de entrada (upload del cliente) /ip firewall mangle add chain=forward in-interface=action=mark-packet new-packet-mark=up-cliente001 passthrough=no # Marcar paquetes por interface PPPoE de salida (download del cliente) /ip firewall mangle add chain=forward out-interface= action=mark-packet new-packet-mark=down-cliente001 passthrough=no # Cola hija para ese cliente PPPoE /queue tree add name=pppoe-cliente001-down parent=global-down packet-mark=down-cliente001 limit-at=5M max-limit=25M comment="pppoe cliente001 download" /queue tree add name=pppoe-cliente001-up parent=global-up packet-mark=up-cliente001 limit-at=2M max-limit=10M comment="pppoe cliente001 upload"
5. Version escalable: PCQ con comparticion automatica
Si tienes muchos clientes y no quieres crear colas individuales, PCQ con pcq-rate hace comparticion automatica. Cada IP detectada recibe una sub-cola que puede usar hasta pcq-rate cuando hay disponibilidad, o menos si el enlace esta saturado.
# Crear tipos de cola PCQ # pcq-rate = MIR por cliente cuando el enlace tiene capacidad # Si el enlace se satura, PCQ divide equitativamente entre activos /queue type add name=pcq-download-isp kind=pcq pcq-classifier=dst-address pcq-rate=20M pcq-burst-rate=30M pcq-burst-threshold=15M pcq-burst-time=10s pcq-limit=200KiB pcq-total-limit=20000KiB comment="PCQ download: max 20M por cliente con burst a 30M" /queue type add name=pcq-upload-isp kind=pcq pcq-classifier=src-address pcq-rate=8M pcq-burst-rate=12M pcq-burst-threshold=6M pcq-burst-time=10s pcq-limit=100KiB pcq-total-limit=10000KiB comment="PCQ upload: max 8M por cliente con burst a 12M" # Aplicar al enlace WAN con el limite total real del ISP /queue simple add name=isp-global-pcq target=0.0.0.0/0 interface=ether1-wan queue=pcq-download-isp/pcq-upload-isp max-limit=100M/50M comment="QoS global ISP con comparticion PCQ"
Usa PCQ cuando quieres comparticion automatica sin configurar colas por cliente. Es simple y escala a miles de clientes. Usa Queue Tree con HTB cuando necesitas CIR garantizado por cliente (compromiso de SLA) y diferentes niveles de prioridad por tipo de cliente (residencial vs corporativo).
6. Multiples planes con comparticion inter-plan
El escenario real de un ISP: tienes plan residencial (10M) y plan corporativo (50M). Los corporativos tienen prioridad y CIR mas alto, pero el ancho libre de cualquier plan puede ser aprovechado por todos.
# Cola raiz del enlace WAN (100 Mbps total) /queue tree add name=wan-total-down parent=global max-limit=100M comment="enlace WAN total descarga" # Sub-cola plan corporativo (prioridad alta, CIR 30M del enlace) /queue tree add name=plan-corp-down parent=wan-total-down limit-at=30M max-limit=100M priority=1 comment="plan corporativo: 30M garantizados, hasta 100M libre" # Sub-cola plan residencial (prioridad normal, CIR 20M del enlace) /queue tree add name=plan-resid-down parent=wan-total-down limit-at=20M max-limit=100M priority=5 comment="plan residencial: 20M garantizados, hasta 100M libre" # Colas hija corporativas (cada cliente: CIR 10M, MIR 50M) /queue tree add name=corp-cliente-a-down parent=plan-corp-down dst-address=10.10.1.2/32 limit-at=10M max-limit=50M priority=1 # Colas hija residenciales (cada cliente: CIR 3M, MIR 20M) /queue tree add name=resid-cliente-01-down parent=plan-resid-down dst-address=10.10.0.2/32 limit-at=3M max-limit=20M priority=5
7. Calcular CIR/MIR segun tu enlace y clientes
| Enlace | Clientes | Plan vendido | CIR recomendado | MIR recomendado | Overbooking |
|---|---|---|---|---|---|
| 100 Mbps | 20 | 10 Mbps | 5 Mbps (50%) | 25 Mbps (2.5x) | 2:1 |
| 100 Mbps | 40 | 10 Mbps | 2.5 Mbps (25%) | 20 Mbps (2x) | 4:1 |
| 200 Mbps | 30 | 20 Mbps | 8 Mbps (40%) | 40 Mbps (2x) | 3:1 |
| 500 Mbps | 100 | 10 Mbps | 3 Mbps (30%) | 20 Mbps (2x) | 2:1 |
Regla practica: CIR = 30-50% del plan vendido. MIR = 2x a 3x el plan vendido. El overbooking sostenible para WISP residencial es 3:1 a 4:1. Para clientes corporativos, 1.5:1 maximo.
8. Verificar que la comparticion funciona
# Ver todas las colas con rate actual vs limite /queue tree print stats # Ver una cola especifica en tiempo real (cada segundo) /queue tree monitor [find name=cliente-001-down] # Verificar que clientes inactivos tienen rate=0 y los activos superan su CIR /queue tree print stats where rate>0 # Ver cuanto del enlace total esta siendo usado /queue tree print stats where name=global-down # Ver estadisticas de mangle (confirmar que el trafico se esta marcando) /ip firewall mangle print stats # Ver throughput actual de la interface WAN /interface monitor-traffic ether1-wan
En /queue tree print stats, si ves clientes con rate mayor que su limit-at durante periodos de baja demanda, la comparticion esta funcionando correctamente. Si todos los clientes activos siempre muestran exactamente su limit-at, HTB no esta distribuyendo el excedente — revisa que max-limit sea mayor que limit-at.
Conclusion
La comparticion dinamica de ancho de banda es la diferencia entre un ISP que desperdicia su enlace y uno que maximiza la experiencia de cada cliente. Con Queue Tree y HTB, MikroTik hace este trabajo automaticamente: garantiza el CIR cuando el enlace esta saturado, y regala el ancho libre a quien lo necesite cuando no lo esta. El resultado es una red mas eficiente, clientes mas satisfechos y mejor aprovechamiento de la inversion en transit.
Optimizamos el QoS de tu red ISP
Disenamos la jerarquia de colas correcta para tu enlace, clientes y planes de servicio.
Conocer el soporte MikroTik remoto o solicita una evaluación gratuita →