DNS Toys (2022) lançado
(dns.toys)- dns.toys é um servidor DNS que usa consultas DNS como uma interface de comandos, permitindo executar pequenos utilitários no terminal usando apenas
dig - Permite resolver rapidamente tarefas que seriam trabalhosas de fazer abrindo uma página de busca, como horário mundial, clima, conversão de mais de 70 unidades e conversão de moedas baseada na taxa de câmbio diária
- Também oferece recursos úteis para desenvolvedores, como cálculo de intervalos CIDR, geração de UUID v4 e NanoID, conversão de Unix epoch e conversão entre bases numéricas
- As chamadas são feitas especificando
@dns.toys; no Bash, Fish e Zsh, é possível adicionar o aliasdypara usar comandos ainda mais curtos - Mais do que uma ferramenta de trabalho, é um serviço voltado à conveniência e à diversão de consultar e calcular rapidamente dentro do terminal, adequado para consultas simples
Utilitários de terminal executados por consultas DNS
- dns.toys oferece várias funções como um servidor DNS, executadas enviando consultas em formato de domínio com
dig -
Hora, clima e conversões
dig mumbai.time @dns.toys: consulta a hora atual de uma cidadedig 2023-05-28T14:00-mumbai-paris/fr.time @dns.toys: conversão de fuso horário entre cidadesdig mumbai.weather @dns.toys: consulta o clima de uma cidadedig 42km-mi.unit @dns.toys: conversão entre mais de 70 unidadesdig 100USD-INR.fx @dns.toys: conversão de moedas baseada na taxa de câmbio diáriadig -4 ip @dns.toys: verifica o endereço IPv4 ou IPv6
-
Cálculos e recursos para desenvolvedores
dig 10.0.0.0/24.cidr @dns.toys: calcula o primeiro e o último IP utilizável em uma sub-rededig 100dec-hex.base @dns.toys: conversão entre bases numéricas hex, dec, oct e bindig 784783800.epoch @dns.toys: converte um timestamp Unix para uma data legíveldig 5.uuid @dns.toys: gera UUIDs v4dig 5.10.nanoid @dns.toys: gera NanoIDs com tamanho e quantidade especificados
-
Recursos de brincadeira
dig pi @dns.toys: exibe dígitos de Pidig 3d20/2.dice @dns.toys: rola dados com quantidade e número de faces especificadosdig 2.coin @dns.toys: joga moedasdig 1-100.rand @dns.toys: gera um número aleatório dentro de um intervalodig excuse @dns.toys: exibe uma desculpa aleatória de desenvolvedor
Alias de shell para chamadas curtas
- Ao adicionar o comando abreviado
dy, é possível chamar de forma mais curta, comody mumbai.weather- Bash: adicionar
alias dy="dig +short @dns.toys"ao~/.bashrc - Fish: adicionar
alias dy="dig +noall +answer +additional $argv @dns.toys"ao~/.config/fish/config.fish - Zsh: adicionar
alias dy="dig +short @dns.toys"ao~/.zshrc
- Bash: adicionar
- Usuários que passam muito tempo no terminal podem resolver rapidamente tarefas como conversão de unidades ou consulta do clima sem abrir páginas de busca pesadas
1 comentários
Opiniões no Hacker News
Lembrei de um pequeno truque que usei antigamente, quando criei por conta própria um utilitário de DNS dinâmico e queria calcular “de forma confiável” o endereço IP da minha máquina
Os resolvedores da OpenDNS (
resolver1.opendns.cometc.) resolvemmyip.opendns.compara o endereço IP real. Dependendo da conexão, sai um registro A ou AAAA, e como os IPs desses resolvedores geralmente são IPs anycast, eu queria acreditar que seria um pouco mais rápido do que fazer uma requisição para algum serviço HTTP central que pode cair a qualquer momentoClaro que a OpenDNS também pode desaparecer a qualquer momento, mas acho esse risco melhor do que depender dos inúmeros serviços HTTP de “qual é meu endereço IP?”. Já ouvi dizer também que o DNS foi originalmente pensado para lidar com uma gama de dados mais ampla do que apenas nomes de domínio, e coisas como registros TXT são vestígios disso. Este site mostra bem a utilidade que dá para obter via DNS
dig @ns1-1.akamaitech.net ANY whoami.akamai.net +shortdig @ns1.google.com TXT o-o.myaddr.l.google.com +shortcurl -4si0A "" https://www.youtube.com|sed -n '/ip=/{s/.*ip=//;s/\.*//p;};'|uniqO que tem mais chance de sair do ar, OpenDNS ou Cloudflare? O método abaixo funciona em qualquer endereço IP da Cloudflare e nem precisa de TLS
printf 'GET /cdn-cgi/trace HTTP/1.0\r\nHost: cloudflare.com |nc -vvn 104.18.25.13 80 |sed -n /ip=/pA lista de IPs da Cloudflare pode ser obtida com
curl -4si0A "" https://api.cloudflare.com/client/v4/ips. Há muitos sites que exibem o endereço IP do cliente em uma página web ou em cabeçalhos HTTP, e não precisam ser necessariamente sites de “What is my IP”Sites que bloqueiam determinadas requisições via Cloudflare também são uma opção. Por exemplo, basta enviar uma requisição HTTP ao StackOverflow sem o cabeçalho User-Agent
curl -si40A "" http://stackoverflow.com|sed -n '/cf-footer-ip">/{s/.*">//;s/<.*//p;}'É bem surpreendente que sites de “What is my IP” tenham feito sucesso mesmo com o próprio endereço IP aparecendo em centenas de milhares de sites. Sobre a utilidade do DNS, vale também consultar https://www.netmeister.org/blog/dns-rrs.html
Mas também existe o https://icanhazip.com/, operado pela Cloudflare, e esse parece ter uma chance maior de ser estável
https://ipv4.icanhazip.com/
https://ipv6.icanhazip.com/
Sou um grande fã da Julia Evans, e ela também criou alguns brinquedos úteis relacionados a DNS
https://jvns.ca/
https://dns-lookup.jvns.ca/
https://messwithdns.net/
Alguns posts relacionados
DNS Toys - https://news.ycombinator.com/item?id=31704789 - junho de 2022, 104 comentários
DNS Toys: Useful utilities and services over DNS - https://news.ycombinator.com/item?id=31637226 - junho de 2022, 1 comentário
Esta é uma apresentação recente do autor deste projeto, com uma história de bastidores interessante sobre como o projeto surgiu
https://youtu.be/ANmFZ8rbmnc?si=ndEWH4xY2oxJuEnB
Estranhamente,
dig A0.0,0.0/0.0,90.0.aerial @dns.toyse
dig A0.0,0.0/90.0,0.0.aerial @dns.toysambos retornam
TXT "aerial distance = 10007.06 KM"A circunferência equatorial é de 40.075,017 km, e a circunferência polar é de 40.007,863 km. Mesmo supondo que a Terra tenha a forma de uma vaca imaginária, não há grande prejuízo, e ainda dá para evitar as séries complicadas para calcular a menor distância entre dois pontos ao longo da superfície de um elipsoide
Um pouco relacionado: também existe um serviço que oferece a lista de empresas do Reino Unido por meio de consultas DNS. É a mesma ideia de fornecer dados que não são DNS como um serviço DNS
https://www.num.uk/
Mas, olhando o roadmap, parece que talvez eles não mantenham mais o serviço
A classe IN (internet) hoje parece uma sequoia que se destacou por evolução, mas no Cambriano também existiam as classes CH (chaos) e HS (hesiod). Vale revisitar o propósito e os objetivos desses projetos
O abuso de hoje, na verdade, parece estar mais em otimizar só para serviços web baseados em nuvem, isto é, “happy eyeballs”, sacrificando todo o resto, como uma janela de 10 milissegundos para retransmissão ou minimização de qname. Por exemplo, parece que quase não se leva em conta coisas como bufferbloat. Há um mundo completamente diferente fora da resolução A/AAAA
Também não é raro ver, nos corredores de conferências de internet, duas pessoas com protetores de bolso fazendo duelo de espadas — ou pelo menos se cutucando com lápis. RFC significa “Request For Comments”, e BCP (Best Current Practice) é rotineiramente ignorado
Gostei. Só queria que o
digviesse instalado em todas as plataformasSempre me irrita não poder usá-lo no Windows e, pelo que verifiquei, ele também não vem por padrão no Debian. Claro, é fácil de instalar. Ele existe no OpenBSD e no Mac OS X, o que é bom
https://dns.lookup.dog/
dig.nslookupouhosttambém funcionamNo Windows deve haver alguma ferramenta de consulta DNS
Alguém pode explicar como se eu tivesse cinco anos, para o idiota deste tópico? Sei que é por diversão, mas não entendi. Também não sei como funciona, e sei que isso é por ignorância minha
Por exemplo,
dig 100USD-INR.fx @dns.toyssignifica “resolva100USD-INR.fxusandodns.toyscomo servidor DNS”. Então ele retorna um registro TXT com a resposta realComo
.fxé um domínio inexistente, ele não está se passando por ninguém; e, se você trocar@dns.toyspor algo como@8.8.8.8, nada será resolvidonews.ycombinator.com. O navegador consulta um servidor especial para obter o IP desse nome. Esse domínio pode ter algo armazenado mais ou menos assimA IP = ...1AAAA IP = ...2Aqui,
Aé o tipo de registro. Mas existem outros tipos de registroTXT gender = 'male'Há algumas suposições que as pessoas normalmente tratam como implicitamente verdadeiras sobre DNS. Elas usam DNS como uma central de comutação para outros serviços, e os valores dentro dessa central geralmente são estáticos
Aqui ele faz algo completamente diferente, porque retorna valores que mudam conforme o domínio. Para fazer isso, é preciso um servidor DNS próprio, mas o protocolo DNS em si é bastante simples
O motivo de esse hack ser inteligente é que DNS é um dos protocolos mais usados e suportados: todas as bibliotecas de programação principais dão suporte a ele, e há muitas ferramentas de linha de comando já presentes no sistema operacional. Se você oferecer algo como serviço sobre DNS, ele pode ser acessado por ferramentas e bibliotecas com dependências mínimas
Além disso, ele faz o DNS ser usado diretamente como um serviço de aplicação, e não como uma central de comutação para serviços comuns da internet, invertendo as suposições usuais sobre como o sistema DNS deveria ser usado. Ao conectar isso a softwares existentes, também não é necessária uma integração complexa, e requisições DNS podem ser vistas como mais intuitivas do que uma API web comum. Também pode haver vantagens em termos de resistência à censura
Assim como você faz requisições a um servidor web via HTTP, você interage com um servidor DNS usando o protocolo DNS. É parecido com simular requisições HTTP ou SMTP com
telnet: você se comunica com um tipo específico de servidor seguindo um conjunto específico de regrasEsse servidor faz um certo cálculo antes de produzir o resultado, e é aí que ele difere da maioria dos registros DNS, que normalmente se espera que sejam estáticos
google.comnele e lê a respostaSe o servidor estiver configurado corretamente como servidor DNS, ele responde, também em texto, com os registros DNS adequados. Como
google.comé um CNAME que aponta para algum subdomínio usado em balanceamento de carga, o servidor responde algo comoCNAME blabla.google.come, se quiser, também pode resolverblabla.google.comjunto para poupar o trabalho de fazer uma requisição extraO protocolo DNS definido em algum RFC determina que requisições e respostas sigam certas regras. Uma delas é que, para um domínio de topo inexistente, por exemplo
.time, que atualmente não existe, o servidor deve respondernxdomain. Mas, na prática, não há nenhum mecanismo técnico que impeça o servidor de responder qualquer valor, como a hora atualEm geral, a única coisa que protege o usuário é a expectativa de que o operador de DNS, público ou privado, não retornará dados falsos. HTTPS mitiga isso até certo ponto, mas os próprios registros DNS são, na prática, infinitamente falsificáveis, sem uma forma de reverter isso
É surpreendente que esses recursos não sejam oferecidos por algum subdomínio de
dns.toys. Assim eles poderiam ser resolvidos sem usar um servidor de nomes especialHoje em dia, uso principalmente isto
https://addr.tools/
https://dnscheck.tools/
https://myip.addr.tools/help