DNSBox

DNS e HTTPS para nomes de anfitrião baseados em IP

Aceda a um serviço HTTP público através de *.dnsbox.io ou execute o DNSBox na sua própria rede privada.

Disponível na v0.5.2

Vai atualizar a partir da v0.4.x? Siga o guia de migração antes de substituir uma instalação existente. Guia de migração

Utilizar o serviço público

Não é necessário ter uma conta nem registar um domínio. O backend tem de ter um IP público permitido e executar um serviço HTTP na porta 80, acessível a partir do DNSBox.

Substitua 198.51.100.20 pelo endereço IPv4 público do seu servidor:

https://198-51-100-20.dnsbox.io

O DNS resolve o nome de anfitrião para um proxy DNSBox. O proxy termina a ligação HTTPS e encaminha HTTP para o IP codificado no nome de anfitrião. Não instala um certificado no seu servidor.

O Let's Encrypt valida o nome de anfitrião através de DNS-01. O certificado é para esse nome, não para o endereço IP em si. A primeira ligação TLS pode demorar mais enquanto o certificado é emitido.

A ligação do navegador ao DNSBox utiliza HTTPS. A ligação do DNSBox ao backend utiliza HTTP. São suportadas mudanças de protocolo para WebSocket.

Um backend IPv6 pode ser codificado como 2a01-4f8-c17-b8f--1.dnsbox.io. Um hífen representa dois pontos; dois hífenes representam ::.

Verifique primeiro a resolução DNS e depois HTTPS. Utilize o seu próprio backend HTTP acessível para este teste:

dig +short 198-51-100-20.dnsbox.io
curl -v https://198-51-100-20.dnsbox.io/

A resposta DNS contém o endereço do proxy. Uma ligação TLS válida e uma resposta HTTP bem-sucedida do backend são verificações distintas.

Executar numa rede privada

O modo TLS local funciona sem DNS público, encaminhamento de portas ou acesso à Internet. O DNSBox cria a sua própria autoridade de certificação. Os clientes têm de confiar nessa CA.

Exemplo: DNSBox em 192.168.1.2, com backends HTTP em 192.168.1.0/24:

./dnsboxd --domain=home.arpa --ip=192.168.1.2 \
  --tls-mode=local --allowed-cidrs=192.168.1.0/24 \
  --dns-listen=192.168.1.2:53 --https-listen=192.168.1.2:443 \
  --data-dir=/var/lib/dnsbox

Encaminhe apenas a zona home.arpa do resolvedor da sua LAN para 192.168.1.2. O DNSBox é autoritativo para a sua zona; não é um resolvedor recursivo de uso geral.

Emita um certificado local para criar a CA e instale depois /var/lib/dnsbox/ca/root.crt no repositório de autoridades de confiança de cada cliente. Mantenha root.pem privado. O guia de instalação inclui o comando de inicialização.

Para um backend em 192.168.1.50, abra https://192-168-1-50.home.arpa. Os clientes da LAN precisam de acesso às portas DNS e HTTPS do DNSBox; o DNSBox precisa de acesso à porta HTTP do backend.

Configurar uma rede privada

Alojar a sua instância com o Let's Encrypt

Utilize um domínio ou subdomínio que controle e delegue a respetiva zona DNS no seu servidor de nomes DNSBox. Um único nó pode servir a zona; vários nós oferecem redundância.

Para a validação DNS-01 pública, permita tráfego de entrada UDP 53 e TCP 53, bem como HTTPS de saída e resolução DNS. A porta 80 de entrada não é necessária. A porta 443 só precisa de estar acessível aos clientes previstos.

Os backends HTTP privados podem usar certificados de confiança pública para os nomes de anfitrião quando a validação DNS-01 é pública. Autorize explicitamente esses backends com --allowed-cidrs e configure o DNS e o encaminhamento para os seus clientes.

Com vários nós, configure a mesma lista de servidores de nomes e os mesmos registos em todos, além de TLS mútuo para replicar os desafios. Cada par configurado tem de confirmar o desafio antes de a emissão prosseguir.

Estão disponíveis arquivos de distribuição para Linux, macOS e Windows. O instalador suporta --no-systemd para arranque manual ou com outro supervisor de processos. Não desativa o resolvedor do sistema.

Instalação e configuração do cluster

Certificados para o ocserv e outros serviços

O serviço público não exporta as suas chaves privadas. Se o seu serviço precisar de ficheiros de certificado, aloje o DNSBox com uma zona delegada que controle.

Execute --issue com um nome de anfitrião que codifique um IP dentro dessa zona. O DNSBox grava uma cadeia de certificados PEM e uma chave privada em <data-dir>/certs e depois termina. Durante a emissão ACME, serve DNS mas mantém livre a porta HTTPS 443.

Aponte esse nome de anfitrião diretamente para o seu serviço através de um registo A/AAAA explícito. Para o ocserv, configure server-cert e server-key. O proxy HTTP do DNSBox não implementa OpenConnect nem DTLS.

Configure a renovação e recarregue o seu serviço quando os ficheiros mudarem. Um comando de execução única não renova certificados depois de terminar. Não execute dois processos DNSBox com o mesmo diretório de dados.

Exemplo de exportação de certificados

Perguntas

Posso usar IPs privados com o serviço público?

Não. O proxy público destina-se a backends públicos permitidos. Execute a sua própria instância com uma lista explícita de intervalos CIDR permitidos para endereços privados.

O que acontece se o meu IP mudar?

O IP faz parte do nome de anfitrião. Utilize um nome novo para o novo IP; os clientes que utilizem o nome antigo continuarão a aceder ao endereço antigo.

O DNSBox comprova a propriedade do IP do backend?

O DNS-01 comprova o controlo do nome de anfitrião DNS. Não verifica a propriedade do IP do backend nem dos conteúdos aí disponibilizados.

Os certificados são renovados automaticamente?

Um serviço DNSBox em execução renova os certificados que gere. Os certificados exportados precisam de um processo de renovação e do recarregamento do serviço que os utiliza.

O que acontece se o backend estiver indisponível?

O DNS e o TLS podem continuar a funcionar, mas o proxy não consegue devolver o conteúdo da aplicação. Verifique o serviço HTTP do backend, a firewall e a acessibilidade.

Onde posso comunicar um problema?

Abra uma issue no GitHub com a versão do DNSBox, o modo de instalação e as mensagens de erro relevantes. Remova chaves privadas, tokens e outros segredos.

Issues no GitHub

Referência técnica

Referência de configuração

Código-fonte