Mikrotik Hijack port 53 load-balancing
/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)"
Advertencia
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
El cliente intenta enviar tráfico DNS a cualquier IP.
Si el destino no está permitido,
rawlo marca comonotrack.mangleaplica unrouting-markespecial al tráfico DNS.El tráfico es enviado a una tabla de ruteo personalizada.
La tabla solo permite salida hacia los resolvers autorizados.
Si un resolver cae,
check-gateway=pingconmuta 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.