Mikrotik Hijack porta 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)"

Aviso

Onde diz address devem ser colocados os IPv4 e IPv6 dos RPZ. Onde diz gateway devem ser colocados os IPv4 e IPv6 dos RPZ. Esses endereços podem ser encontrados no painel de gestão do PDNS.

MikroTik – Redirecionamento DNS com PBR (Policy Based Routing)

Este esquema força e otimiza o tráfego DNS (porta 53) através do uso de raw, mangle e tabelas de roteamento dedicadas. Seu objetivo é garantir que todas as consultas DNS saiam apenas pelos resolvers autorizados, tanto em IPv4 quanto em IPv6, evitando bypasses e permitindo failover em caso de queda de servidores.

Listas de endereços permitidos

As listas allowed_dns_servers e allowed_dns_servers_v6 contêm os únicos resolvers para os quais é permitido enviar tráfego DNS. Todo tráfego DNS que tenha como destino um IP fora dessas listas será interceptado e processado.

Raw: evitar o rastreamento de conexão

As regras em /ip firewall raw marcam como notrack qualquer tráfego DNS (UDP ou TCP, porta 53) cujo destino não seja um dos resolvers permitidos. Isso desativa o connection tracking para essas conexões, permitindo que as regras de marcação em mangle sejam executadas antes e sem interferências do firewall.

Mangle: marcação para Policy Based Routing

Em /ip firewall mangle o tráfego DNS é marcado com um routing-mark específico (dns-pbr para IPv4 e dns-pbr-v6 para IPv6). Apenas o tráfego em estado untracked é marcado, ou seja, aquele que foi previamente interceptado pelas regras de raw.

Ao aplicar este routing-mark, o roteador sabe que esse tráfego deve ser processado por uma tabela de roteamento diferente.

Tabelas de roteamento dedicadas

São criadas tabelas de roteamento personalizadas (dns-pbr e dns-pbr-v6), que contêm rotas padrão para os resolvers autorizados. Cada tabela inclui duas rotas: uma para cada resolver disponível.

As rotas utilizam check-gateway=ping. Isso permite que, caso um resolver deixe de responder, o MikroTik detecte automaticamente e utilize a outra rota como failover.

Resumo do fluxo

  1. O cliente tenta enviar tráfego DNS para qualquer IP.

  2. Se o destino não estiver permitido, raw o marca como notrack.

  3. mangle aplica um routing-mark especial ao tráfego DNS.

  4. O tráfego é enviado para uma tabela de roteamento personalizada.

  5. A tabela permite saída apenas para os resolvers autorizados.

  6. Se um resolver cair, check-gateway=ping alterna automaticamente para o outro.

Com este mecanismo garante-se que: - todo o DNS saia obrigatoriamente por resolvers seguros, - seja evitado o uso de DNS externos, - exista redundância automática, - IPv4 e IPv6 sejam tratados de forma consistente.