Lanzamiento de DNS Toys (2022)
(dns.toys)- dns.toys es un servidor DNS que aprovecha las consultas DNS como si fueran una interfaz de comandos, permitiendo ejecutar pequeñas utilidades en la terminal solo con
dig - Permite resolver al instante tareas que da pereza abrir en una página de búsqueda, como hora mundial, clima, conversión de más de 70 unidades y conversión de divisas basada en tipos de cambio diarios
- También ofrece funciones útiles para desarrolladores, como cálculo de rangos CIDR, generación de UUID v4 y NanoID, conversión de Unix epoch y conversión entre bases numéricas
- Las llamadas se hacen especificando
@dns.toys, y en Bash, Fish y Zsh se puede agregar el aliasdypara usarlo de forma más corta - Más que una herramienta de trabajo formal, es un servicio pensado para la diversión y la comodidad de consultar o calcular rápido dentro de la terminal, ideal para tareas simples de consulta
Utilidades de terminal ejecutadas con consultas DNS
- dns.toys ofrece varias funciones como servidor DNS, ejecutándolas al enviar consultas con formato de dominio mediante
dig -
Hora, clima y conversiones
dig mumbai.time @dns.toys: consulta la hora actual de una ciudaddig 2023-05-28T14:00-mumbai-paris/fr.time @dns.toys: conversión de zona horaria entre ciudadesdig mumbai.weather @dns.toys: consulta el clima de una ciudaddig 42km-mi.unit @dns.toys: conversión entre más de 70 unidadesdig 100USD-INR.fx @dns.toys: conversión de divisas basada en tipos de cambio diariosdig -4 ip @dns.toys: consulta tu dirección IPv4 o IPv6
-
Cálculos y funciones para desarrolladores
dig 10.0.0.0/24.cidr @dns.toys: calcula la primera y la última IP utilizable de una subreddig 100dec-hex.base @dns.toys: conversión entre bases hex, dec, oct y bindig 784783800.epoch @dns.toys: convierte un Unix timestamp a una fecha legibledig 5.uuid @dns.toys: genera UUID v4dig 5.10.nanoid @dns.toys: genera NanoID con la longitud y cantidad especificadas
-
Funciones de juguete
dig pi @dns.toys: muestra dígitos de Pidig 3d20/2.dice @dns.toys: lanza dados con la cantidad y caras especificadasdig 2.coin @dns.toys: lanza monedasdig 1-100.rand @dns.toys: genera un número aleatorio dentro de un rangodig excuse @dns.toys: muestra una excusa aleatoria de desarrollador
Alias de shell para invocarlo más rápido
- Si agregas el comando corto
dy, puedes invocarlo de forma más breve, comody mumbai.weather- Bash: agrega
alias dy="dig +short @dns.toys"a~/.bashrc - Fish: agrega
alias dy="dig +noall +answer +additional $argv @dns.toys"a~/.config/fish/config.fish - Zsh: agrega
alias dy="dig +short @dns.toys"a~/.zshrc
- Bash: agrega
- Quienes pasan mucho tiempo en la terminal pueden resolver rápido tareas como convertir unidades o revisar el clima sin abrir páginas de búsqueda pesadas
1 comentarios
Comentarios en Hacker News
Esto me recordó un pequeño truco que usé hace tiempo, cuando hice mi propia utilidad de DNS dinámico y trataba de calcular “de forma confiable” la dirección IP de mi máquina
Los resolvedores de OpenDNS (
resolver1.opendns.com, etc.) resuelvenmyip.opendns.coma tu dirección IP real. Dependiendo de la conectividad, devuelven un registro A o AAAA, y como las IP de estos resolvedores suelen ser IP anycast, me gustaría creer que es un poco más rápido que hacer una solicitud a un servicio HTTP centralizado que podría caerse en cualquier momentoClaro, OpenDNS también podría desaparecer en cualquier momento, pero me parece un riesgo mejor que depender de los innumerables servicios HTTP de “¿cuál es mi IP?”. También he escuchado que DNS originalmente estaba pensado para manejar un rango de datos más amplio que solo nombres de dominio, y los registros TXT serían un vestigio de eso. Este sitio muestra muy bien la utilidad que se puede obtener con 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;};'|uniq¿Qué es más probable que se caiga, OpenDNS o Cloudflare? La forma de abajo funciona con cualquier dirección IP de Cloudflare y ni siquiera necesita TLS
printf 'GET /cdn-cgi/trace HTTP/1.0\r\nHost: cloudflare.com |nc -vvn 104.18.25.13 80 |sed -n /ip=/pLa lista de IP de Cloudflare se puede obtener con
curl -4si0A "" https://api.cloudflare.com/client/v4/ips. Hay muchísimos sitios web que muestran la IP del cliente en una página web o en headers HTTP, y ni siquiera tienen que ser sitios de “What is my IP”También sirven como opción sitios web que bloquean ciertas solicitudes a través de Cloudflare. Por ejemplo, puedes hacer una solicitud HTTP a StackOverflow sin el header User-Agent
curl -si40A "" http://stackoverflow.com|sed -n '/cf-footer-ip">/{s/.*">//;s/<.*//p;}'Es bastante sorprendente que los sitios de “What is my IP” hayan tenido éxito cuando tu propia dirección IP aparece en cientos de miles de sitios web. Sobre la utilidad de DNS, también vale la pena revisar https://www.netmeister.org/blog/dns-rrs.html
Aun así, también existe https://icanhazip.com/, operado por Cloudflare, y este sí parece más probable que sea estable
https://ipv4.icanhazip.com/
https://ipv6.icanhazip.com/
Soy muy fan de Julia Evans, y también ha hecho algunos juguetes útiles relacionados con DNS
https://jvns.ca/
https://dns-lookup.jvns.ca/
https://messwithdns.net/
Artículos relacionados
DNS Toys - https://news.ycombinator.com/item?id=31704789 - junio de 2022, 104 comentarios
DNS Toys: Useful utilities and services over DNS - https://news.ycombinator.com/item?id=31637226 - junio de 2022, 1 comentario
Esta es una charla reciente del autor de este proyecto, y cuenta una historia de fondo interesante sobre cómo surgió el proyecto
https://youtu.be/ANmFZ8rbmnc?si=ndEWH4xY2oxJuEnB
Curiosamente
dig A0.0,0.0/0.0,90.0.aerial @dns.toysy
dig A0.0,0.0/90.0,0.0.aerial @dns.toysambos devuelven
TXT "aerial distance = 10007.06 KM"La circunferencia ecuatorial es de 40,075.017 km y la circunferencia polar es de 40,007.863 km. Incluso si asumimos que la Tierra tiene una forma imaginaria de vaca, no pasa gran cosa, y al menos se evita la molesta serie necesaria para calcular la distancia más corta entre dos puntos sobre la superficie de un elipsoide
Algo relacionado: también existe un servicio que ofrece la lista de empresas del Reino Unido mediante consultas DNS. Es la misma idea de ofrecer datos que no son DNS a través de un servicio DNS
https://www.num.uk/
Aunque, viendo la hoja de ruta, parece que quizá ya no mantienen el servicio
La clase IN (internet) hoy parece un enorme cedro que evolucionó hasta dominar, pero en el Cámbrico también existieron las clases CH (chaos) y HS (hesiod). Vale la pena volver a mirar el propósito y los objetivos de esos proyectos
Más bien, el abuso actual se parece a optimizar para servicios web basados en la nube —por ejemplo, la ventana de 10 milisegundos para retransmisión o qname minimization—, es decir, solo para “happy eyeballs”, sacrificando todo lo demás. Da la impresión de que ni siquiera se tiene muy presente algo como el bufferbloat. Hay todo un mundo completamente distinto fuera de la resolución A/AAAA
Tampoco es raro ver en los pasillos de conferencias de internet a dos personas con protector de bolsillo peleando con espadas, o al menos pinchándose con lápices. Los RFC son “Request For Comments”, y las BCP (Best Current Practice) se ignoran de forma rutinaria
Me gusta. Aunque ojalá
digestuviera instalado en todas las plataformasSiempre me molesta no poder usarlo en Windows, y al revisar veo que Debian tampoco lo trae por defecto. Claro, se instala fácilmente. Está en OpenBSD y Mac OS X, así que eso está bien
https://dns.lookup.dog/
dig.nslookupyhosttambién funcionanEn Windows también debe haber alguna herramienta para consultar DNS
¿Alguien podría explicárselo al tonto de este hilo como si tuviera cinco años? Sé que es por diversión, pero no lo entiendo. Tampoco sé cómo funciona, y sé que es por mi ignorancia
Por ejemplo,
dig 100USD-INR.fx @dns.toyssignifica “resuelve100USD-INR.fxusandodns.toyscomo servidor DNS”. Entonces devuelve un registro TXT con la respuesta real.fxes un dominio que no existe, así que no está suplantando a nadie, y si cambias@dns.toyspor algo como@8.8.8.8, no se resolverá nadanews.ycombinator.com. El navegador consulta una IP para ese nombre en un servidor especial. Ese dominio podría tener guardado algo más o menos asíA IP = ...1AAAA IP = ...2Aquí
Aes el tipo de registro. Pero también hay otros tipos de registroTXT gender = 'male'Normalmente hay algunas suposiciones implícitas sobre DNS que se consideran ciertas: la gente usa DNS como una centralita para llegar a otros servicios, y los valores dentro de esa centralita suelen ser estáticos
Aquí está haciendo algo completamente distinto, porque devuelve valores que cambian según el dominio. Para hacerlo se necesita un servidor DNS hecho por uno mismo, pero el protocolo DNS en sí es bastante simple
Lo ingenioso de este hack es que DNS es uno de los protocolos más usados y más ampliamente soportados, así que todas las bibliotecas de programación principales lo soportan y muchos sistemas operativos ya traen herramientas de línea de comandos para usarlo. Si lo ofreces como servicio sobre DNS, puedes acceder desde herramientas y bibliotecas con dependencias mínimas
Además, hace que DNS se use directamente como servicio de aplicación, en vez de solo como centralita para servicios normales de internet, lo que da vuelta a las suposiciones comunes sobre cómo debería usarse el sistema DNS. Incluso al conectarlo a software existente no hace falta una integración compleja, y se puede decir que una petición DNS es más intuitiva que una API web normal. También es muy posible que tenga ventajas en términos de resistencia a la censura
Igual que haces una petición a un servidor web por HTTP, interactúas con un servidor DNS usando el protocolo DNS. Es parecido a imitar peticiones HTTP o SMTP con
telnet: te comunicas con un tipo específico de servidor siguiendo un conjunto específico de reglasEste servidor realiza cierto cálculo antes de dar el resultado, y eso es lo que lo diferencia de la mayoría de los registros DNS, que normalmente se espera que sean estáticos
google.comdentro y lee la respuestaSi el servidor está configurado correctamente como servidor DNS, responderá de vuelta con el registro DNS adecuado, también en texto. Como
google.comes un CNAME que apunta a algún subdominio usado para balanceo de carga, el servidor responderá algo comoCNAME blabla.google.com, y si quiere también puede resolverblabla.google.comde una vez para ahorrarte la solicitud adicionalEl protocolo DNS definido en cierto RFC dice que las peticiones y respuestas deben hacerse de determinada manera. Una de esas reglas es que, para un dominio de nivel superior inexistente —por ejemplo,
.time, que actualmente no existe—, el servidor debería respondernxdomain. Pero en la práctica no hay ningún mecanismo técnico que impida que el servidor responda cualquier valor, como la hora actualEn términos generales, lo único que protege al usuario es la expectativa de que los operadores de DNS, públicos o privados, no van a devolver datos falsos. HTTPS lo mitiga hasta cierto punto, pero los registros DNS en sí son básicamente falsificables sin límite, y no hay forma de revertirlo
Sorprende que estas funciones no se ofrezcan desde algún subdominio de
dns.toys. Así se podrían resolver sin necesidad de usar un servidor de nombres especialÚltimamente uso principalmente esto
https://addr.tools/
https://dnscheck.tools/
https://myip.addr.tools/help