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
O cliente tenta enviar tráfego DNS para qualquer IP.
Se o destino não estiver permitido,
rawo marca comonotrack.mangleaplica umrouting-markespecial ao tráfego DNS.O tráfego é enviado para uma tabela de roteamento personalizada.
A tabela permite saída apenas para os resolvers autorizados.
Se um resolver cair,
check-gateway=pingalterna 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.