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. Onde quer que você 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), sobrescreva qualquer hostname com reversão automática e sele cada consulta de saída com ODoH (RFC 9230) para que nenhuma parte isolada veja tanto quem você é quanto o que você perguntou — tudo do seu laptop, sem conta na nuvem ou Raspberry Pi.

Construído do zero em Rust. Zero bibliotecas DNS. Cache, bloqueio de anúncios e domínios de serviços locais prontos para uso. Resolução recursiva opcional a partir dos servidores de nomes 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 (iOS Private DNS, systemd-resolved, etc.). Execute numa relay e o mesmo binário se torna também um endpoint ODoH público — a lista curada do DNSCrypt atualmente tem apenas um relay sobrevivente, então cada implantação do Numa expande materialmente o ecossistema. Um binário de ~8MB, tudo embutido. O parser do protocolo de rede foi escrito à mão como projeto de aprendizado; recursos posteriores (resolvedor recursivo, DNSSEC, dashboard) foram construídos com assistência de IA.

Numa dashboard

Início Rápido

Três formas de começar, da menos à mais comprometedora. Apenas a terceira altera o DNS do seu sistema.

1. Experimente no Docker (nada instalado no host)

docker run -d --name numa -p 127.0.0.1:5553:53/udp -p 127.0.0.1:5553:53/tcp \
  -p 127.0.0.1:5380:5380 ghcr.io/razvandimescu/numa
dig @127.0.0.1 -p 5553 example.com
docker exec numa numa token            # dashboard password

Abra http://localhost:5380 e faça login com qualquer nome de usuário e esse token. A porta 5553 contorna o que já estiver ocupando a 53 no host. numa.numa não resolverá aqui, porque o host não está usando o Numa para DNS. Limpe com docker rm -f numa.

2. Execute em primeiro plano (DNS do sistema intacto)

Instale o binário:

# 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

# Nix
nix run github:razvandimescu/numa
sudo numa                              # Ctrl-C to stop (port 53 requires root/admin)

O Numa escuta na porta 53, mas seu sistema mantém o resolvedor atual até você executar numa install, então teste com dig @127.0.0.1 example.com. O dashboard fica em http://localhost:5380. Se a porta 53 estiver ocupada (systemd-resolved no Ubuntu/Mint), defina bind_addr em numa.toml ou use Docker.

3. Definir como DNS do sistema

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

install registra um serviço, aponta o DNS do sistema para o Numa e confia em sua CA local. uninstall reverte os três. Uma vez instalado, o dashboard também fica em http://numa.numa.

No macOS e Linux, o numa roda como serviço de sistema (launchd/systemd). A unit do systemd é sem privilégios (DynamicUser=yes, apenas CAP_NET_BIND_SERVICE); o daemon do launchd roda como root. numa install reconfigura o systemd-resolved através de um drop-in que numa uninstall remove; qualquer outro processo ocupando a porta 53 (dnsmasq, incluindo o do NetworkManager) precisa ser parado manualmente. No Windows, o numa inicia automaticamente no login via registro. O Windows também vincula 127.0.0.2:53 (o Dnscache embutido possui 127.0.0.1:53) e instala uma regra NRPT para rotear consultas para lá — então edite bind_addr/api_bind_addr contra 127.0.0.2, não 127.0.0.1.

Fazendo login

Via loopback (localhost, 127.0.0.1, numa.numa) nenhum login é necessário. Qualquer outra coisa, incluindo mapeamento de porta do Docker ou o endereço LAN desta máquina, solicita o token da API, que o Numa gera na primeira inicialização. Imprima-o com sudo numa token (um shell de administrador no Windows) e faça login com qualquer nome de usuário. Fixe o seu próprio com [server] api_token ou NUMA_API_TOKEN.

Removendo todo vestígio

uninstall restaura o DNS mas mantém o diretório de dados, então uma reinstalação mantém o mesmo token e CA. Para remover tudo, desinstale primeiro, depois exclua:

PlataformaDeixado para trás
macOSo binário, /usr/local/var/numa, /usr/local/var/log/numa.log
Linuxo binário (/usr/local/bin/numa do install.sh), /var/lib/numa, /etc/numa
Windowso binário, %PROGRAMDATA%\numa

Instalações via gerenciador de pacotes removem o binário com brew uninstall, pacman -R ou cargo uninstall. No Linux, numa install copia um binário que não consegue executar de seu local original (ex.: ~/.cargo/bin) para /usr/local/bin/numa, e o uninstall deixa essa cópia.

Também exclua ~/.config/numa se você criou uma configuração de usuário, e o caminho [server] data_dir se você definiu um.

Serviços Locais

Nomeie seus serviços de desenvolvimento em vez de memorizar 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, passthrough de 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

Bloqueio de anúncios e rastreadores via Hagezi Pro, atualizado diariamente. Funciona em qualquer rede — cafeterias, hotéis, aeroportos. Viaja com seu laptop.

Três modos de resolução:

  • forward (padrão) — proxy transparente para o DNS do sistema existente. Tudo funciona como antes, apenas com cache e bloqueio de anúncios por cima. Portais cativos, VPNs, DNS corporativo — todos respeitados.
  • recursive — resolve diretamente dos servidores de nomes raiz. Sem dependência de upstream, nenhuma entidade isolada vê seu padrão completo de consultas. Adicione [dnssec] enabled = true para validação completa da cadeia de confiança.
  • auto — sonda servidores raiz na inicialização, recursivo se alcançável, caso contrário forward sobre DoH para o Quad9 (https://9.9.9.9/dns-query), que então vê suas consultas. Use forward com seu próprio [upstream] para escolher um provedor diferente.

O DNSSEC valida a cadeia de confiança completa: 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 estritos como iOS Private DNS, systemd-resolved ou stubby. Dois modos:

Categorias