Mikrotik Hijack port 53 load-balancing ====================================== .. code-block:: /ip firewall address-list add list=allowed_dns_servers address=IpV4-Resolver1 comment="RPZ Resolver 1" add list=allowed_dns_servers address=IpV4-Resolver2 comment="RPZ Resolver 2" /ipv6 firewall address-list add list=allowed_dns_servers_v6 address=IpV6-Resolver1 comment="IPv6 Resolver 1" add list=allowed_dns_servers_v6 address=IpV6-Resolver2 comment="IPv6 Resolver 2" /routing table add name=dns-pbr fib add name=dns-pbr-v6 fib /ip firewall raw add chain=prerouting dst-address-list=!allowed_dns_servers protocol=udp dst-port=53 action=notrack comment="NoTrack IPv4 DNS Redirection" add chain=prerouting dst-address-list=!allowed_dns_servers protocol=tcp dst-port=53 action=notrack comment="NoTrack IPv4 DNS Redirection" /ipv6 firewall raw add chain=prerouting dst-address-list=!allowed_dns_servers_v6 protocol=udp dst-port=53 action=notrack comment="NoTrack IPv6 DNS Redirection" add chain=prerouting dst-address-list=!allowed_dns_servers_v6 protocol=tcp dst-port=53 action=notrack comment="NoTrack IPv6 DNS Redirection" /ip firewall mangle add chain=prerouting connection-state=untracked protocol=udp dst-port=53 action=mark-routing new-routing-mark=dns-pbr passthrough=no comment="Route UDP DNS via PBR" add chain=prerouting connection-state=untracked protocol=tcp dst-port=53 action=mark-routing new-routing-mark=dns-pbr passthrough=no comment="Route TCP DNS via PBR" /ipv6 firewall mangle add chain=prerouting connection-state=untracked protocol=udp dst-port=53 action=mark-routing new-routing-mark=dns-pbr-v6 passthrough=no comment="Route IPv6 UDP DNS via PBR" add chain=prerouting connection-state=untracked protocol=tcp dst-port=53 action=mark-routing new-routing-mark=dns-pbr-v6 passthrough=no comment="Route IPv6 TCP DNS via PBR" /ip route add dst-address=0.0.0.0/0 gateway=IpV4-Resolver1 routing-table=dns-pbr check-gateway=ping comment="Redirect to Resolver 1 (Ping Check)" add dst-address=0.0.0.0/0 gateway=IpV4-Resolver2 routing-table=dns-pbr check-gateway=ping comment="Redirect to Resolver 2 (Ping Check)" /ipv6 route add dst-address=::/0 gateway=IpV6-Resolver1 routing-table=dns-pbr-v6 check-gateway=ping comment="Redirect to IPv6 Resolver 1 (Ping Check)" add dst-address=::/0 gateway=IpV6-Resolver2 routing-table=dns-pbr-v6 check-gateway=ping comment="Redirect to IPv6 Resolver 2 (Ping Check)" .. warning:: Donde dice **address** hay que poner las IpV4 e IpV6 que tienen los RPZ. Donde dice **gateway** hay que poner las IpV4 e IpV6 que tienen los RPZ. Las mismas las encuentran en el panel de gestios PDNS. MikroTik – Redirección DNS con PBR (Policy Based Routing) --------------------------------------------------------- Este esquema fuerza y optimiza el tráfico DNS (puerto 53) mediante el uso de ``raw``, ``mangle`` y tablas de ruteo dedicadas. Su objetivo es asegurar que todas las consultas DNS salgan únicamente por los resolvers autorizados, tanto en IPv4 como en IPv6, evitando bypasses y permitiendo failover por caída de servidores. Listas de direcciones permitidas ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Las listas ``allowed_dns_servers`` y ``allowed_dns_servers_v6`` contienen los únicos resolvers a los que se permite enviar tráfico DNS. Todo DNS que tenga como destino una IP fuera de estas listas será interceptado y procesado. Raw: evitar el seguimiento de conexión ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Las reglas en ``/ip firewall raw`` marcan como ``notrack`` cualquier tráfico DNS (UDP o TCP, puerto 53) cuyo destino **no** sea uno de los resolvers permitidos. Esto desactiva el connection tracking para estas conexiones, lo que permite que las reglas de marcado en ``mangle`` se ejecuten antes y sin interferencias del firewall. Mangle: marcado para Policy Based Routing ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ En ``/ip firewall mangle`` se marca el tráfico DNS con un ``routing-mark`` específico (``dns-pbr`` para IPv4 y ``dns-pbr-v6`` para IPv6). Solo se marca el tráfico en estado ``untracked``, es decir, el que fue previamente interceptado por las reglas de ``raw``. Al aplicar este ``routing-mark``, el router sabe que ese tráfico debe ser procesado por una tabla de ruteo diferente. Tablas de ruteo dedicadas ^^^^^^^^^^^^^^^^^^^^^^^^^ Se crean tablas de ruteo personalizadas (``dns-pbr`` y ``dns-pbr-v6``), que contienen rutas por defecto hacia los resolvers autorizados. Cada tabla incluye dos rutas: una por cada resolver disponible. Las rutas utilizan ``check-gateway=ping``. Esto permite que, si un resolver deja de responder, MikroTik lo detecte automáticamente y utilice la otra ruta como failover. Resumen del flujo ^^^^^^^^^^^^^^^^^ 1. El cliente intenta enviar tráfico DNS a cualquier IP. 2. Si el destino no está permitido, ``raw`` lo marca como ``notrack``. 3. ``mangle`` aplica un ``routing-mark`` especial al tráfico DNS. 4. El tráfico es enviado a una tabla de ruteo personalizada. 5. La tabla solo permite salida hacia los resolvers autorizados. 6. Si un resolver cae, ``check-gateway=ping`` conmuta automáticamente al otro. Con este mecanismo se garantiza que: - todo el DNS sale sí o sí por resolvers seguros, - se evita el uso de DNS externos, - hay redundancia automática, - IPv4 e IPv6 son manejados de forma consistente.