El problema real: 20 routers, 20 veces el mismo trabajo
Imaginá este escenario: tu ISP tiene 20 routers Mikrotik distribuidos en distintos nodos. Un cliente se queja de que hay contenido inapropiado accesible en la red, o el municipio te pide bloquear sitios de apuestas online. ¿Qué hacés?
La respuesta manual es conectarse a cada router, aplicar las reglas de firewall o DNS, verificar que funcionan y repetir 20 veces. Si después necesitás actualizar la lista, volvés a empezar. Es ineficiente, propenso a errores y no escala.
Los métodos disponibles en Mikrotik
Mikrotik ofrece varias formas de bloquear contenido. Cada una tiene sus ventajas y limitaciones:
1. DNS estático (el más simple)
Consiste en redirigir las consultas DNS de los dominios bloqueados a una IP inexistente o a una página de bloqueo propia.
/ip dns static add name="facebook.com" address=0.0.0.0
/ip dns static add name="*.facebook.com" address=0.0.0.0Ventaja: Simple y liviano. Desventaja: No funciona si el cliente usa DNS propio (8.8.8.8, etc.).
2. Firewall Layer 7 (más potente, más costoso)
Inspecciona el contenido de los paquetes para identificar patrones. Puede bloquear aunque el cliente use DNS propio, pero consume mucha CPU.
/ip firewall layer7-protocol add name=facebook \
regexp="^.+(facebook\\.com).*\$"
/ip firewall filter add chain=forward \
layer7-protocol=facebook action=dropLayer 7 inspecciona cada paquete. En routers con muchos clientes puede generar una carga de CPU significativa. No recomendado para listas grandes.
3. Redirigir todo el DNS (el más robusto)
Forzar todo el tráfico DNS del cliente hacia el DNS del router, sin importar qué servidor configure el cliente. Así el bloqueo por DNS siempre funciona.
/ip firewall nat add chain=dstnat protocol=udp \
dst-port=53 action=redirect to-ports=53 \
comment="Redirigir DNS al router"
/ip firewall nat add chain=dstnat protocol=tcp \
dst-port=53 action=redirect to-ports=53La combinación más efectiva es redirigir todo el DNS al router (para que no pueda evadirse) + DNS estático para los dominios bloqueados. Es liviana y efectiva para la mayoría de los casos.
El problema de escala: actualizar 20 routers
El método DNS + redirección funciona bien en un router. El problema es cuando tenés 20. Cada vez que querés agregar o quitar un dominio de la lista tenés que:
- Conectarte a cada router por Winbox o SSH
- Aplicar el cambio manualmente
- Verificar que funcionó
- Repetir 19 veces más
Hay una alternativa más inteligente: usar un script centralizado que se ejecute en todos los routers simultáneamente vía la API de Mikrotik. Lo vemos a continuación.
Solución avanzada: API de Mikrotik
Mikrotik tiene una API que permite ejecutar comandos de forma remota desde un servidor externo. Con un script PHP o Python podés conectarte a múltiples routers y aplicar cambios en todos a la vez.
Primero habilitá la API en cada Mikrotik:
/ip service set api disabled=no port=8728
/ip service set api-ssl disabled=no port=8729Luego, desde tu servidor, podés usar la librería RouterOS API para conectarte y ejecutar comandos en todos los routers de tu lista:
// Ejemplo conceptual en PHP
foreach ($routers as $router) {
$api = new RouterOsApi($router['ip']);
$api->login($router['user'], $router['pass']);
// Agregar dominio bloqueado
$api->write('/ip/dns/static/add', [
'name' => 'sitio-bloqueado.com',
'address' => '0.0.0.0'
]);
$api->disconnect();
}La clave es centralizar: un script (o un panel) donde agregás el dominio una sola vez y se aplica solo a todos los Mikrotik que tengas registrados, con historial de cambios y logs de acceso. Eso convierte 20 tareas manuales en una.
¿Qué pasa con HTTPS?
El bloqueo por DNS funciona tanto para HTTP como HTTPS, porque la consulta DNS ocurre antes de que se establezca la conexión cifrada. Si el dominio resuelve a 0.0.0.0, el navegador no puede conectarse, independientemente del protocolo.
Sin embargo, no funciona con DNS over HTTPS (DoH) que usan algunos navegadores modernos como Firefox por defecto. Para bloquearlo también:
// Bloquear DNS over HTTPS (puerto 443 a servidores DoH conocidos)
/ip firewall address-list add list=doh-servers address=8.8.8.8
/ip firewall address-list add list=doh-servers address=1.1.1.1
/ip firewall address-list add list=doh-servers address=9.9.9.9
/ip firewall filter add chain=forward dst-address-list=doh-servers \
dst-port=443 protocol=tcp action=drop \
comment="Bloquear DoH"Resumen: qué método usar según tu caso
| Método | Efectividad | CPU | Escala |
|---|---|---|---|
| DNS estático | Media | Baja | Manual |
| DNS + redirección | Alta | Baja | Manual |
| Layer 7 | Alta | Alta | Manual |
| API centralizada (script propio) | Alta | Baja | Automática ✓ |
Nuestras guías de Mikrotik + OLT van al grano con las mismas recetas que usamos en producción. Configurá tu red desde cero, paso a paso.
Ver las guías →