Tenho um laptop no qual estou trabalhando, um roteador baseado em FreshTomato e um Raspberry Pi executando NixOS, no qual instalei o Blocky para tentar usá-lo como meu servidor DNS.
Entretanto, as solicitações do meu laptop não resolvem:
$ curl https://0xerr0r.github.io/blocky
curl: (6) Could not resolve host: 0xerr0r.github.io
As solicitações no Firefox parecem nunca ser concluídas.
Isso é do meu laptop, que captou o IP correto para o servidor DNS, até onde posso ver:
Isto também é do meu laptop:
$ dig @192.168.1.4 https://0xerr0r.github.io
;; communications error to 192.168.1.4#53: timed out
;; communications error to 192.168.1.4#53: timed out
;; communications error to 192.168.1.4#53: timed out
; <<>> DiG 9.18.30 <<>> @192.168.1.4 https://0xerr0r.github.io
; (1 server found)
;; global options: +cmd
;; no servers could be reached
Entretanto, executando o mesmo a partir do próprio Pi (via SSH):
$ nix-shell --packages dig --run "dig @192.168.1.4 https://0xerr0r.github.io"
; <<>> DiG 9.18.28 <<>> @192.168.1.4 https://0xerr0r.github.io
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31507
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;https://0xerr0r.github.io. IN A
;; ANSWER SECTION:
https://0xerr0r.github.io. 3600 IN A 185.199.109.153
https://0xerr0r.github.io. 3600 IN A 185.199.108.153
https://0xerr0r.github.io. 3600 IN A 185.199.111.153
https://0xerr0r.github.io. 3600 IN A 185.199.110.153
;; Query time: 335 msec
;; SERVER: 192.168.1.4#53(192.168.1.4) (UDP)
;; WHEN: Sun Feb 16 13:44:31 CET 2025
;; MSG SIZE rcvd: 118
Estas são minhas configurações do Blocky:
settings = {
ports.dns = 53; # Port for incoming DNS Queries.
ports.http = 4000;
upstreams.groups.default = [
"https://one.one.one.one/dns-query" # Using Cloudflare's DNS over HTTPS server for resolving queries.
];
# For initially solving DoH/DoT Requests when no system Resolver is available.
bootstrapDns = {
upstream = "https://one.one.one.one/dns-query";
ips = [ "1.1.1.1" "1.0.0.1" ];
};
#Enable Blocking of certain domains.
blocking = {
denylists = {
#Adblocking
ads = ["https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts"];
#Another filter for blocking adult sites
adult = ["https://blocklistproject.github.io/Lists/porn.txt"];
#You can add additional categories
};
#Configure what block categories are used
clientGroupsBlock = {
default = [ "ads" ];
kids-ipad = ["ads" "adult"];
};
};
};
Parece também estar funcionando bem:
$ blocky blocking status
[2025-02-16 13:55:27] INFO blocking enabled
Seguem algumas configurações potencialmente relevantes do meu roteador.
Configurando o servidor DNS para esse endereço IP:
Achei que isso seria suficiente, mas também tive que adicionar esta configuração do dnsmasq para que meu laptop realmente captasse o servidor DNS:
Alguém tem alguma ideia do que pode estar errado? Obrigado antecipadamente!
O RasPi executando o Blocky precisa ter conexões de entrada da sua rede para a porta 53 (TCP e UDP) permitidas. O fato de o dig estar recebendo timeouts em vez de rejeições ativas sugere que há uma regra de firewall no seu laptop ou no RasPi que está bloqueando as conexões DNS do laptop para o Blocky.
O protocolo DNS é quase único na forma como usa UDP e TCP: consultas curtas são enviadas por UDP e, se a resposta for longa, o servidor coloca o máximo da resposta que couber em um único pacote UDP, junto com uma marca especial "este é apenas o começo da resposta, reenvie a consulta por TCP se precisar da coisa toda".
Se o cliente quiser apenas o primeiro endereço IP de um host específico, o pacote UDP sozinho pode ser suficiente; mas se a resposta incluir vários registros DNS longos, o cliente pode obter tudo repetindo a consulta usando o protocolo TCP. Como o servidor já armazenou os dados na primeira consulta em cache, ele pode responder rapidamente se o cliente repetir a consulta.