Voltar às atualizações
New releaseJul 28, 2026

numa v0.22.0

Resolvedor de DNS portátil em Rust — domínios locais .numa, bloqueio de anúncios, sobreposições para desenvolvedores

Compartilhar

Numa

CI crates.io License: MIT

DNS que você possui. Em qualquer lugar que vá.numa.rs

Um resolvedor DNS portátil em um único binário. Bloqueie anúncios em qualquer rede, nomeie seus serviços locais (frontend.numa), substitua qualquer hostname com reversão automática e sele todas as consultas de saída com ODoH (RFC 9230) para que nenhuma parte veja tanto quem você é quanto o que perguntou — tudo do seu laptop, sem conta na nuvem ou Raspberry Pi necessário.

Construído do zero em Rust. Zero bibliotecas DNS. Cache, bloqueio de anúncios e domínios de serviço local prontos para uso. Resolução recursiva opcional a partir dos servidores raiz com validação completa da cadeia de confiança DNSSEC, além de um listener DNS-over-TLS para conexões de clientes criptografadas (DNS Privado do iOS, systemd-resolved, etc.). Execute numa relay e o mesmo binário se torna também um endpoint ODoH público — a lista curada do DNSSEC atualmente tem um relay sobrevivente, então cada implantação do Numa expande materialmente o ecossistema. Um binário de ~8 MB, tudo embutido.

Numa dashboard

Início Rápido

# macOS
brew install razvandimescu/tap/numa

# Linux
curl -fsSL https://raw.githubusercontent.com/razvandimescu/numa/main/install.sh | sh

# Arch Linux
pacman -S numa

# Windows — download from GitHub Releases
# All platforms
cargo install numa

# Docker
docker run -d --name numa --network host ghcr.io/razvandimescu/numa

# Nix
nix run github:razvandimescu/numa
sudo numa                              # run in foreground (port 53 requires root/admin)

Abra o painel: http://numa.numa (ou http://localhost:5380)

Defina como DNS do sistema:

PlataformaInstalarDesinstalar
macOSsudo numa installsudo numa uninstall
Linuxsudo numa installsudo numa uninstall
Windowsnuma install (admin) + rebootnuma uninstall (admin) + reboot

No macOS e Linux, o numa executa como um serviço de sistema (launchd/systemd). No Windows, o numa inicia automaticamente ao login via registro. O Windows também vincula 127.0.0.2:53 (o Dnscache integrado possui 127.0.0.1:53) e instala uma regra NRPT para direcionar consultas a ele — portanto, edite bind_addr/api_bind_addr para 127.0.0.2, não 127.0.0.1.

Serviços Locais

Nomeie seus serviços de desenvolvimento em vez de lembrar números de porta:

curl -X POST localhost:5380/services \
  -d '{"name":"frontend","target_port":5173}'

Agora https://frontend.numa funciona no seu navegador — cadeado verde, certificado válido, passagem WebSocket para HMR. Sem mkcert, sem nginx, sem /etc/hosts.

Adicione roteamento baseado em caminho (app.numa/api → :5001), compartilhe serviços entre máquinas via descoberta LAN, ou configure tudo em numa.toml.

Bloqueio de Anúncios e Privacidade

Mais de 385 mil domínios bloqueados via Hagezi Pro. Funciona em qualquer rede — cafeterias, hotéis, aeroportos. Viaja com seu laptop.

Três modos de resolução:

  • forward (padrão) — proxy transparente para seu DNS de sistema existente. Tudo funciona como antes, apenas com cache e bloqueio de anúncios adicionados. Portais cativos, VPNs, DNS corporativo — todos respeitados.
  • recursive — resolve diretamente dos servidores raiz. Sem dependência upstream, nenhuma entidade vê seu padrão completo de consultas. Adicione [dnssec] enabled = true para validação completa da cadeia de confiança.
  • auto — testa servidores raiz na inicialização, recursivo se acessível, fallback DoH criptografado se bloqueado.

DNSSEC valida toda a cadeia de confiança: assinaturas RRSIG, verificação DNSKEY, delegação DS, provas de negação NSEC/NSEC3. Leia como funciona →

Listener DNS-over-TLS (RFC 7858) — aceita consultas criptografadas na porta 853 de clientes rigorosos como DNS Privado do iOS, systemd-resolved ou stubby. Dois modos:

  • Auto-assinado (padrão) — o numa gera uma CA local automaticamente. numa install a adiciona ao armazenamento de confiança do sistema no macOS, Linux (Debian/Ubuntu, Fedora/RHEL/SUSE, Arch) e Windows. No iOS, instale o .mobileconfig de numa setup-phone. O Firefox mantém seu próprio armazenamento NSS e ignora o do sistema — confie na CA manualmente lá se precisar de HTTPS para serviços .numa no Firefox.
  • Traga seu próprio certificado — aponte [dot] cert_path / key_path para um certificado publicamente confiável (por exemplo, Let's Encrypt via desafio DNS-01 em um domínio apontando para sua instância numa). Os clientes se conectam sem qualquer configuração de armazenamento de confiança — mesma UX do AdGuard Home ou Cloudflare 1.1.1.1.

ALPN "dot" é anunciado e aplicado em ambos os modos; um handshake com ALPN incompatível é rejeitado como defesa contra confusão entre protocolos.

Configuração do telefone — aponte seu iPhone ou Android para o Numa em um passo:

numa setup-phone

Imprime um código QR. Escaneie-o, instale o perfil, alterne a confiança do certificado — o DNS do seu telefone agora passa pelo Numa via TLS. Requer [mobile] enabled = true no numa.toml.

Descoberta LAN

Execute o Numa em várias máquinas. Elas se encontram automaticamente via mDNS:

Machine A (192.168.1.5)              Machine B (192.168.1.20)
┌──────────────────────┐             ┌──────────────────────┐
│ Numa                 │    mDNS     │ Numa                 │
│  - api (port 8000)   │◄───────────►│  - grafana (3000)    │
│  - frontend (5173)   │  discovery  │                      │
└──────────────────────┘             └──────────────────────┘

Da Máquina B: curl http://api.numa → proxy para a porta 8000 da Máquina A. Ative com numa lan on.

Modo hub: execute uma instância com bind_addr = "0.0.0.0:53" e aponte o DNS de outros dispositivos para ela — eles recebem bloqueio de anúncios + resolução .numa sem instalar nada. bind_addr também aceita uma lista para vincular um subconjunto específico de interfaces.

Docker

# Recomendado — rede de host (Linux)
docker run -d --name numa --network host ghcr.io/razvandimescu/numa

# Port mapping (macOS/Windows Docker Desktop)
docker run -d --name numa -p 53:53/udp -p 53:53/tcp -p 5380:5380 ghcr.io/razvandimescu/numa

Painel em http://localhost:5380. A imagem vincula a API e o proxy a 0.0.0.0 por padrão. Substitua com uma configuração personalizada:

docker run -d --name numa --network host \
  -v /path/to/numa.toml:/root/.config/numa/numa.toml \
  ghcr.io/razvandimescu/numa

Multi-arquitetura: linux/amd64 e linux/arm64.

Receitas compose prontas para uso:

Comparação

Pi-holeAdGuard HomeUnboundNuma
Proxy de serviço local + TLS automáticoDomínios .numa, HTTPS, WebSocket
Descoberta de serviço LANmDNS, zero config
Substituições do desenvolvedor (API REST)Reversão automática, scriptável
Resolvedor recursivoSimSim, com seleção SRTT
Validação DNSSECSimSim (RSA, ECDSA, Ed25519)
Bloqueio de anúnciosSimSim385K+ domínios
Interface web de administraçãoCompletoCompletoPainel
Upstream criptografado (DoH/DoT)Precisa de cloudflaredApenas DoHApenas DoTDoH + DoT (tls://)
Clientes criptografados (listener DoT)Precisa de stunnel sidecarSimSimNativo (RFC 7858)
Endpoint servidor DoHSimSim (RFC 8484)
Hedging de requisiçõesTodos os protocolos (UDP, DoH, DoT)
Servir obsoleto + pré-buscaPré-busca em 90% TTLRFC 8767, pré-busca em 90% TTL
Encaminhamento condicionalSimSimSim (regras por sufixo)
Portátil (laptop)Não (aparelho)Não (aparelho)ServidorBinário único, macOS/Linux/Windows
Maturidade da comunidade56K estrelas, 10 anos33K estrelas20 anosNovo

Desempenho

Consultas em cache de 0,1ms — iguala Unbound e AdGuard Home. O cache em nível de bytes armazena bytes brutos com correção de TTL no local. O hedging de requisições elimina picos p99: recursivo frio p99 538ms vs Unbound 748ms (−28%), σ 4× mais apertado. Benchmarks →

Saiba Mais

Roteiro

  • Encaminhamento DNS, cache, bloqueio de anúncios, substituições do desenvolvedor
  • Domínios locais .numa — TLS automático, roteamento de caminho, proxy WebSocket
  • Descoberta de serviço LAN — mDNS, DNS entre máquinas + proxy
  • DNS-over-HTTPS — upstream criptografado + endpoint servidor (RFC 8484)
  • DNS-over-TLS — listener cliente criptografado (RFC 7858) + encaminhamento upstream (tls://)
  • Oblivious DoH — modo cliente anônimo + relay público (numa relay, RFC 9230)
  • Resolução recursiva + DNSSEC — cadeia de confiança, NSEC/NSEC3
  • Seleção de nameserver baseada em SRTT
  • Failover multi-encaminhador — múltiplos upstreams com classificação SRTT, pool de fallback
  • Hedging de requisições — requisições paralelas resgatam perda de pacotes e latência de cauda (todos os protocolos)
  • Servir obsoleto + pré-busca — RFC 8767, atualização em segundo plano em <10% TTL e ao servir obsoleto
  • Encaminhamento condicional — regras por sufixo para DNS split-horizon (Tailscale, VPNs)
  • Aquecimento de cache — resolução proativa para domínios configurados
  • Integração móvel — fluxo QR setup-phone, API móvel, perfis mobileconfig
  • Integração pkarr — DNS autossoberano via Mainline DHT
  • Nomes .numa globais — suportado por DHT, sem registrador

Licença

MIT

Categorias