Executando verificação de segurança...
15

Servidor DNS do Zero: Arquitetura Moderna em Rust

Introdução

Este projeto foi concebido como um exercício de engenharia orientado à excelência técnica: o desenvolvimento de um servidor DNS do zero, com arquitetura modular, foco em alta performance e preparado para evolução contínua. A proposta central é unir eficiência, escalabilidade e clareza estrutural, criando uma base sólida tanto para uso prático quanto para colaboração futura.

Principais Características

  • Arquitetura Modular: Estrutura projetada para legibilidade, manutenção e extensibilidade, substituindo abordagens monolíticas por uma organização clara e bem definida.
  • Escalabilidade Adaptativa: Ajuste dinâmico de workers conforme a carga, garantindo utilização eficiente de recursos e desempenho consistente em diferentes cenários.
  • Processamento Assíncrono: Implementação baseada em execução não bloqueante, permitindo alta capacidade de resposta e melhor throughput sob concorrência elevada.
  • Configuração Declarativa: Parametrização completa via server.toml, oferecendo flexibilidade e simplicidade na adaptação do sistema a diferentes ambientes.
  • Conformidade Com Padrões: Implementação alinhada às RFCs 1034 e 1035, com suporte a IPv4 e IPv6, assegurando interoperabilidade e aderência aos padrões estabelecidos.
  • Observabilidade e Depuração: Mecanismos aprimorados de tratamento de erros e logging opcional, facilitando diagnóstico, análise e evolução do sistema.

Evolução Contínua

O projeto segue em desenvolvimento ativo. Entre os próximos avanços planejados estão a implementação de cache de resolução e suporte a DNS over HTTPS (DoH), ampliando robustez, segurança e aplicabilidade em ambientes modernos de produção.

Contexto Técnico

Desenvolvido como parte de uma trajetória contínua de aprofundamento em sistemas de baixo nível, este projeto também marca a consolidação do uso de Rust como linguagem estratégica. Sua proposta de segurança, previsibilidade e controle fino de recursos se alinha diretamente aos objetivos de construção de sistemas confiáveis e de alto desempenho.

Sem caráter exclusivo, a abordagem permanece pragmática e orientada ao problema: diferentes tecnologias são avaliadas e utilizadas conforme seu mérito técnico e adequação ao contexto.


Acesse o repositório no GitHub para mais detalhes, contribuições ou discussões técnicas: eduardobaginskicosta/domainnamesystem.

Agradecimento ao trabalho base de Emil Hernvall, que serviu como ponto de partida para a evolução desta implementação.

Carregando publicação patrocinada...
2

Rust realmente é bem interessante para criar este tipo de projeto. Depois que toquei em Rust tenho reescrevido algumas coisas em Rust só para me aprofundar mais, como um algoritmo de Binary Search (que inclusive já existe pronto no Rust).

Sobre o projeto, bem interessante. Irei estar dando uma lida no código pois com certeza vou aprender algo desde projeto!

2

Valeu pela sinceridade! Estou reescrevendo alguns projetos pessoais em Rust para aprender mais e estou me divertindo bastante no processo. Espero que meu código possa contribuir com algo bacana no seu aprendizado também 😄

2
1

Olá, muito obrigado. Dei uma olhada em seu repositório e achei muito baca, tenho grandes interesses nesse sentido em planejamentos futuros e, provavelmente, espere contribuições no mesmo futuramente por minha pessoa.

2

Bacana!! Seria possível utilizar o Servidor DNS que vc criou para resolver domínios, tipo .test, .dev, ou até mesmo .local em ambiente de desenvolvimento (local)?

1

Olá, perdão pela demora. Mas, sim. É possível configurar o DNS para resolver qualquer domínio, tal como o .test, .dev, .local e etc. Só que há algumas ressalvas, para ele resolver corretamente deve ser definido o nome e a extensão ou somente o nome, por exemplo local ou mypc.dev sabe. Resumindo vc pode usar domínios sem extensão mas, se as utilizar, deve definir {NOME}.{EXTENSÃO} pois, se somente a extensão for definida, ele não consegue resolver.

Veja um exemplo do arquivo de configuração server.toml:

[server]
nameservers = ["1.1.1.1", "1.0.0.1"]
max_messages = 20
max_workers = 10
debug = false

[domains]
[[domains.multiple]]
name = ["local", "mypc.dev"]
ipv4 = ["127.0.0.1"] # localhost em Ipv4
ipv6 = ["::1"] # localhost em Ipv6 

Você pode fazer também um que cada domínio aponte para um conjunto de Ipv4 e IPv6 específico, ou seja, se no seu ambiente de desenvolvimento houver mais servidored vc pode definir um único domínio ou um conjunto de domínios para ele:

[server]
nameservers = ["1.1.1.1", "1.0.0.1"]
max_messages = 20
max_workers = 10
debug = false

[domains]
[[domains.single]]
name = "server1.local" # servidor 1
ipv4 = ["192.168.10.101"] # IP do servidor
ipv6 = []

[[domains.single]]
name = "server2.local" # servidor 2
ipv4 = ["192.168.10.102"] # IP do servidor
ipv6 = []
2

Sou programador C#. Vim do VB, VBScript... enfim... tenho vontade de entrar no RUST e muito, muito mesmo, de entrar em temas como DNS, Proxy Reverso, Firewall... e quando penso nisso, penso em RUST

Seria legal uns videos ou uns artigos aqui explicando um pouco mais sobre o projeto, sobre deploy, e mostrando ele funcionando.

Obg por compartilhar.

2
1

Oi, tudo bem? Fico feliz em ver que está pensando em expandir os seus conhecimentos e explorar novas linguagens como o Rust.

Estou planejando a começar a gravar vídeos no meu canal do YouTube a respeito de Rust, C e C++ e isso seria um grande ponto de partida, realmente.

Quando o vídeo estiver publicado, pode ter certeza que irei replicar seu comentário aqui além de escrever uma nova publicação. Espero que me aguarde 😄

Por favor, siga o meu canal no YouTube para receber notificação de quando o conteúdo for publicado: @eduardobaginskicosta.

2
1

Ola, muito obrigado. Estou planejando em desenvolver uma ferramenta CLI, em primeiro momento, para uso comercial e pessoal. Atualmente esse repositório será utilizado para atualizar o núcleo do servidor DNS e suas principais funcionalidades.

Mas é uma boa sugestão, no futuro certamente eu irei implementar a mesma. Por hora, estou concentrado em um projeto paralelo.