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

Acabei de Lançar um Servidor DNS em 🦀 Rust!

📖 Introdução 📖

Eu estava em busca de um projeto desafiador, e decidi construir um servidor DNS do zero, totalmente modular e otimizado para alta performance. O foco foi criar algo escalável, assíncrono e fácil de manter, para que futuros contribuidores possam melhorar e expandir com facilidade. Aqui estão os destaques do que já foi implementado, com muitas mais melhorias a caminho:

✨ Principais Características ✨

  • Código Modular: Refatorei a implementação original (um único arquivo) para uma estrutura mais limpa e modular, facilitando a manutenção e futuras contribuições.
  • Escalabilidade Dinâmica: O servidor ajusta automaticamente o número de threads de trabalho conforme a demanda, permitindo um desempenho ótimo em diferentes cenários.
  • Processamento Assíncrono: Com o poder do tokio, o servidor lida com consultas DNS de forma assíncrona, sem bloqueios, o que melhora a escalabilidade e a latência.
  • Configuração Flexível: Toda a configuração do servidor (como servidores de nomes, fila de mensagens, número de workers) é gerenciável através de um arquivo server.toml, tornando a customização super simples.
  • Compatibilidade com RFC 1034 e 1035: Implementa a resolução de DNS conforme os padrões RFC 1034 e RFC 1035, com suporte para endereços IPv4 e IPv6.
  • Depuração Aprimorada: Melhorias no tratamento de erros e uma saída de depuração opcional para facilitar o diagnóstico e correção de problemas.

🔮 O Que Vem Por Aí? 🔮

O projeto está em constante evolução. O próximo passo é implementar recursos como cacheamento e DNS over HTTPS (DoH), tornando o servidor ainda mais robusto e pronto para ambientes de produção.

💡 Minha Jornada Com Rust 💡

Este projeto tem sido uma oportunidade incrível para aprofundar meus conhecimentos em Rust, uma linguagem que comecei a explorar recentemente. Como alguém com experiência prévia em C/C++, estou cada vez mais convencido das vantagens do Rust para construção de sistemas confiáveis e seguros. Mas não me esqueço das outras linguagens! Cada uma tem seu valor, e estou sempre aberto a aprender mais.


Acesse o repositório no GitHub e fique à vontade para contribuir ou sugerir melhorias
Agradecimentos especiais ao Emil Hernvall pelo código base 🙏

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.