6 puntos por GN⁺ 2024-01-08 | 1 comentarios | Compartir por WhatsApp
  • 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 alias dy para 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 ciudad
    • dig 2023-05-28T14:00-mumbai-paris/fr.time @dns.toys: conversión de zona horaria entre ciudades
    • dig mumbai.weather @dns.toys: consulta el clima de una ciudad
    • dig 42km-mi.unit @dns.toys: conversión entre más de 70 unidades
    • dig 100USD-INR.fx @dns.toys: conversión de divisas basada en tipos de cambio diarios
    • dig -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 subred
    • dig 100dec-hex.base @dns.toys: conversión entre bases hex, dec, oct y bin
    • dig 784783800.epoch @dns.toys: convierte un Unix timestamp a una fecha legible
    • dig 5.uuid @dns.toys: genera UUID v4
    • dig 5.10.nanoid @dns.toys: genera NanoID con la longitud y cantidad especificadas
  • Funciones de juguete

    • dig pi @dns.toys: muestra dígitos de Pi
    • dig 3d20/2.dice @dns.toys: lanza dados con la cantidad y caras especificadas
    • dig 2.coin @dns.toys: lanza monedas
    • dig 1-100.rand @dns.toys: genera un número aleatorio dentro de un rango
    • dig 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, como dy 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
  • 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

 
GN⁺ 2024-01-08
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.) resuelven myip.opendns.com a 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 momento
    Claro, 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

    • Google y Akamai también ofrecen servicios DNS
      dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
      dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
    • ¿Qué es más probable que se caiga, OpenDNS o YouTube?
      curl -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=/p
      La 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
    • Coincido en que la mayoría de los servicios HTTP para obtener la IP no parecen muy confiables en términos de disponibilidad
      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/
    • Muy buena idea. Parece muchísimo más simple que el protocolo STUN
  • 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.toys
    y
    dig A0.0,0.0/90.0,0.0.aerial @dns.toys
    ambos 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

    • Qué interesante. Esos valores de circunferencia en realidad están mucho más cerca entre sí de lo que yo pensaba
  • 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

    • Conviene evitar la palabra “abuso”, a menos que se use en el sentido de “SOAP y XHR son un ‘abuso’ de HTTP”
      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á dig estuviera instalado en todas las plataformas
    Siempre 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

    • Dog es multiplataforma y también tiene funciones útiles, como salida en JSON
      https://dns.lookup.dog/
    • No es necesario usar dig. nslookup y host también funcionan
      En 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

    • En esencia, se trata de resolver dominios que no existen mediante un servidor DNS personalizado
      Por ejemplo, dig 100USD-INR.fx @dns.toys significa “resuelve 100USD-INR.fx usando dns.toys como servidor DNS”. Entonces devuelve un registro TXT con la respuesta real
      .fx es un dominio que no existe, así que no está suplantando a nadie, y si cambias @dns.toys por algo como @8.8.8.8, no se resolverá nada
    • Piensa en un sitio como news.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 = ...1
      AAAA IP = ...2
      Aquí A es el tipo de registro. Pero también hay otros tipos de registro
      TXT 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
    • Puedes pensar en un servidor DNS como un servidor web especial que usa otro puerto y otro protocolo
      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 reglas
      Este 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
    • El protocolo DNS es simplemente texto sobre UDP. Cuando el sistema crea una petición DNS, abre un socket, escribe google.com dentro y lee la respuesta
      Si el servidor está configurado correctamente como servidor DNS, responderá de vuelta con el registro DNS adecuado, también en texto. Como google.com es un CNAME que apunta a algún subdominio usado para balanceo de carga, el servidor responderá algo como CNAME blabla.google.com, y si quiere también puede resolver blabla.google.com de una vez para ahorrarte la solicitud adicional
      El 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 responder nxdomain. Pero en la práctica no hay ningún mecanismo técnico que impida que el servidor responda cualquier valor, como la hora actual
      En 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

    • Si usas el servidor de nombres predeterminado, se mete de por medio toda la complejidad de DNS habitual, como el caché
  • Últimamente uso principalmente esto
    https://addr.tools/
    https://dnscheck.tools/
    https://myip.addr.tools/help