Ir para o conteúdo

DNSao

DNSao Logo

DNSao é um encaminhador DNS leve, cache, sinkhole e dashboard de métricas para sua rede


O Que O DNSao Faz

O DNSao roda como servidor DNS para sua LAN, homelab ou pequeno servidor. Os dispositivos enviam queries DNS para o DNSao, e o DNSao decide como respondê-las:

dispositivo cliente -> DNSao -> mapeamento local / blocklist / cache -> resolvedor upstream

Na prática, isso significa que o DNSao pode:

  • Encaminhar queries DNS para um ou mais resolvedores upstream usando UDP, DNS-over-TLS ou DNS-over-HTTPS
  • Cachear respostas respeitando TTL e reaquecer entradas usadas com frequência antes que expirem
  • Bloquear domínios de blocklists baixadas e liberar domínios através de allowlists
  • Resolver nomes locais diretamente, incluindo mapeamentos de homelab como nas.home ou *.lab.home
  • Roteiar clientes diferentes por upstreams ou listas diferentes usando grupos
  • Mostrar métricas de DNS, upstream, cache, queries e JVM em um dashboard integrado

Casos De Uso Comuns

  • DNS para rede doméstica: aponte a configuração DNS do DHCP do roteador para o DNSao e deixe todos os dispositivos usarem o serviço.
  • Encaminhamento orientado à privacidade: use upstreams DoT ou DoH no lugar de DNS upstream UDP aberto.
  • DNS sinkhole: bloqueie domínios de anúncios, trackers ou malware usando blocklists remotas.
  • Nomes de homelab: mapeie serviços locais para nomes estáveis sem rodar um servidor DNS autoritativo separado.
  • Observabilidade de DNS: inspecione histórico de queries, taxa de cache hit, latência de upstreams e saúde da JVM no dashboard.

Público-Alvo

O DNSao é para usuários técnicos que querem mais controle sobre o comportamento DNS em uma LAN, homelab ou pequeno servidor.

  • Usuários que querem bloqueio de anúncios na rede inteira: use blocklists e allowlists DNS para fazer a filtragem uma vez na camada DNS em vez de em cada dispositivo.
  • Usuários que querem transporte DNS upstream privado: encaminhe queries para resolvedores upstream via DoT ou DoH para reduzir sniffing de queries DNS entre o DNSao e o resolvedor. Veja DNS Criptografado para detalhes.
  • Usuários que querem resolução DNS mais rápida: faça cache local respeitando TTL, rewarm de entradas frequentes e, opcionalmente, dispute múltiplos upstreams pela resposta mais rápida.
  • Usuários que querem regras robustas de DNS na LAN: defina mapeamentos locais, wildcards DNS padrão, grupos por cliente, listas por grupo e upstreams por grupo.
  • Usuários que querem alta disponibilidade simples: rode mais de uma instância do DNSao com o mesmo application.yml e anuncie ambas via DNS do roteador/DHCP. Não há necessidade de cluster ou eleição de líder.
  • Usuários de homelab e self-hosting: nomeie serviços internos como nas.home, grafana.lab ou *.lab.home sem rodar um DNS autoritativo separado.
  • Usuários que querem observabilidade DNS: inspecione histórico de queries, comportamento do cache, distribuição por upstream, latência de upstreams e saúde da JVM no dashboard.
  • Usuários que querem uma stack DNS pequena e compreensível: configure um arquivo YAML e rode via Docker, systemd ou um JAR Java.
  • Usuários que precisam de comportamento DNS diferente por cliente: aplique bloqueio mais rígido para TVs ou IoT, upstreams diferentes para clientes específicos e regras customizadas por grupo.

Se você está avaliando o DNSao contra Pi-hole, AdGuard Home ou Technitium DNS Server, veja Comparações.

Funcionalidades Principais

  • Modos de servidor DNS UDP, TCP e HTTP
  • Resolvedores upstream UDP, DoT e DoH
  • Consulta paralela a upstreams com seleção da resposta mais rápida
  • Cache consciente de TTL com cache negativo e rewarm assíncrono
  • Políticas DNSSEC-aware: off, simple e rigid
  • Mapeamentos locais com wildcards DNS padrão de um único rótulo
  • Blocklists, allowlists e grupos de clientes
  • Métricas e histórico de queries persistidos em SQLite por padrão
  • Dashboard integrado para sumário, histórico de queries, estatísticas de upstream e VM stats
  • Configuração em um único arquivo YAML
  • Opções de instalação via Docker, script systemd e JAR manual

Objetivo

Outras ferramentas DNS normalmente focam em uma função: sinkhole, encaminhamento criptografado, cache ou métricas. O DNSao combina essas funções em um serviço pequeno configurado por um único arquivo application.yml.

Ele não é um servidor DNS autoritativo e não pretende substituir um resolvedor recursivo completo. Ele é um resolvedor encaminhador: clientes perguntam ao DNSao, e o DNSao responde a partir de regras locais/cache ou encaminha a query para upstreams.


Todo o código está disponível no GitHub do projeto, incluindo últimas releases e documentação de desenvolvimento.

Comece Pelo Início Rápido

Veja as opções de instalação

Screenshots

Sumário De Queries

summary

Gráfico Com Queries Por Horário

timeline graph

Distribuição De Upstreams

upstream distribution

Comece Pelo Início Rápido

Benchmarks

Benchmarks de DNS podem ser um pouco injustos, porque depois da rajada inicial e de todos os domínios estarem cacheados, o exercício vira medir quão rápido a CPU consegue buscar algo da memória e empacotar corretamente a resposta. Ainda assim, algumas pessoas podem achar útil, então seguem testes usando dnsperf e uma lista de 250 domínios.

Primeiro em um LXC com um core de uma CPU recente (i5-12400), onde 10000 queries por segundo resulta em 100% de sucesso:

avital@texugo:~/temp$ dnsperf -s dnsao1.intranet -d domains.txt -l 1200 -Q 10000
DNS Performance Testing Tool
Version 2.14.0

[Status] Command line: dnsperf -s dnsao1.intranet -d domains.txt -l 1200 -Q 10000
[Status] Sending queries (to 192.168.68.128:53)
[Status] Started at: Sat Oct 25 10:30:23 2025
[Status] Stopping after 1200.000000 seconds
[Status] Testing complete (time limit)

Statistics:

  Queries sent:         11997016
  Queries completed:    11997016 (100.00%)
  Queries lost:         0 (0.00%)

  Response codes:       NOERROR 10993096 (91.63%), NXDOMAIN 1003920 (8.37%)
  Average packet size:  request 30, response 267
  Run time (s):         1200.000091
  Queries per second:   9997.512575

  Average Latency (s):  0.000414 (min 0.000093, max 0.503841)
  Latency StdDev (s):   0.001498

E este em um Raspberry Pi 3, com a mesma lista domains.txt. Ao chegar em 100 queries por segundo, ele começa a mostrar seus limites:

avital@texugo:~/temp$ dnsperf -s dnsao2.intranet -d domains.txt -l 1200 -Q 50
DNS Performance Testing Tool
Version 2.14.0

[Status] Command line: dnsperf -s dnsao2.intranet -d domains.txt -l 1200 -Q 50
[Status] Sending queries (to 192.168.15.50:53)
[Status] Started at: Sat Oct 25 12:28:45 2025
[Status] Stopping after 1200.000000 seconds
[Status] Testing complete (time limit)

Statistics:

  Queries sent:         60000
  Queries completed:    60000 (100.00%)
  Queries lost:         0 (0.00%)

  Response codes:       NOERROR 51968 (86.61%), NXDOMAIN 8032 (13.39%)
  Average packet size:  request 30, response 297
  Run time (s):         1200.000098
  Queries per second:   49.999996

  Average Latency (s):  0.004377 (min 0.001777, max 0.258354)
  Latency StdDev (s):   0.004117


avital@texugo:~/temp$ dnsperf -s dnsao2.intranet -d domains.txt -l 1200 -Q 100
DNS Performance Testing Tool
Version 2.14.0

[Status] Command line: dnsperf -s dnsao2.intranet -d domains.txt -l 1200 -Q 100
[Status] Sending queries (to 192.168.15.50:53)
[Status] Started at: Sat Oct 25 12:54:28 2025
[Status] Stopping after 1200.000000 seconds
Warning: received a response with an unexpected (maybe timed out) id: 24603
[Timeout] Query timed out: msg id 24602
[Timeout] Query timed out: msg id 11636
[Status] Testing complete (time limit)

Statistics:

  Queries sent:         120000
  Queries completed:    119998 (100.00%)
  Queries lost:         2 (0.00%)

  Response codes:       NOERROR 103934 (86.61%), NXDOMAIN 16064 (13.39%)
  Average packet size:  request 30, response 276
  Run time (s):         1200.000090
  Queries per second:   99.998326

  Average Latency (s):  0.004140 (min 0.001823, max 0.184822)
  Latency StdDev (s):   0.002594

Comece Pelo Início Rápido