Pitch: Criei MEU PRÓPRIO SERVIDOR DNS por causa do meu irmão e da minha mãe!
O começo de tudo
Esse projeto não nasceu porque eu queria estudar DNS. Ele nasceu por causa da minha família.
Meu irmão mais novo sempre teve acesso muito livre à internet. Hoje ele tem 11 anos, e comecei a perceber que ficava cada vez mais difícil impedir o acesso a alguns sites que claramente não são apropriados ainda.
Ao mesmo tempo, minha mãe acabou entrando no mundo das apostas. Quem já viu alguém próximo passar por isso sabe como é complicado, basta um clique, um anúncio no YouTube ou algo do tipo para tudo voltar de novo.
Eu queria uma forma de dificultar esse acesso dentro da rede de casa.
O problema é que o roteador da operadora praticamente não oferece nenhum tipo de controle, e quando oferece, normalmente é extremamente limitado. Foi aí que comecei a pensar em outra solução.
A ideia
Em vez de depender do roteador, por que não criar meu próprio servidor DNS?
A ideia era simples: qualquer dispositivo da casa usaria esse DNS, e ele decidiria quais domínios poderiam ou não ser acessados.
Se um domínio estivesse bloqueado, ele não abriria. No lugar, exibiria uma página estática dizendo que o acesso ao site foi proibido. Se não estivesse, tudo continuaria funcionando normalmente.
Assim nasceu o meu pequeno projeto Domain Blocker DNS.
O objetivo nunca foi ser um projeto gigante
Existem diversas soluções profissionais para esse tipo de problema, porém a maioria é paga, depende de serviços externos ou exige equipamentos que muita gente simplesmente não tem, ou ainda não permite que possamos personalizar mais.
Eu queria exatamente o contrário.
- Um projeto pequeno.
- Leve.
- Fácil de entender.
- Fácil de configurar.
- Que qualquer pessoa pudesse instalar em um computador antigo, Raspberry Pi ou qualquer máquina ligada na rede (hoje hospedo ele no meu Windows, ou no meu celular antigo).
Como ele funciona
O funcionamento é bem simples.
Quando alguém tenta acessar um site, o servidor verifica se aquele domínio está na lista de bloqueio. Se estiver, ele impede a resolução do endereço, exibindo a página que citei antes ou redirecionando para o site que você define no settings.json.
Caso contrário, a consulta é encaminhada normalmente para servidores DNS públicos, como Cloudflare ou Google DNS (também personalizável).
Também é possível bloquear domínios inteiros usando wildcard, como *.example.com, sem precisar cadastrar cada subdomínio individualmente, além de ser atualizado na hora.
As configurações ficam em um único arquivo JSON em ./src/settings.json e são recarregadas automaticamente quando ele é alterado. Não precisa reiniciar nada.
Um detalhe que achei importante
Quando um site bloqueado é acessado, também existe a possibilidade de redirecionar o navegador para uma página personalizada, ou você exibe o arquivo HTML padrão. É um detalhe simples, mas deixa a experiência muito melhor.
Ainda está evoluindo
Esse projeto ainda é pequeno e certamente pode melhorar muito. No momento não tenho mais ideias pra ele, já que cumpriu seu propósito aqui em casa. Então publiquei, porque talvez outras pessoas tenham exatamente o mesmo problema que eu tive.
Às vezes você só quer impedir o acesso a alguns sites dentro da sua casa, e não precisa de uma solução corporativa para isso.
Se ele ajudar mais alguém, já valeu a pena
No fim das contas, esse projeto nasceu tentando resolver um problema da minha própria família. Se ele acabar ajudando outras pessoas a protegerem os filhos de vocês, ou diminuírem distrações ou simplesmente terem mais controle sobre a própria rede, então já cumpriu seu propósito.
Se alguém quiser contribuir com ideias, melhorias ou correções, vai ser muito bem-vindo.