เปิดตัว DNS Toys (2022)
(dns.toys)- dns.toys คือเซิร์ฟเวอร์ DNS ที่ใช้ DNS query เหมือนอินเทอร์เฟซคำสั่ง ช่วยให้รันยูทิลิตีเล็ก ๆ ในเทอร์มินัลได้ด้วยแค่
dig - สามารถจัดการงานที่ปกติต้องเปิดหน้าค้นหาแล้วค่อนข้างยุ่งยากได้ทันที เช่น เวลาโลก สภาพอากาศ การแปลงหน่วยกว่า 70 รายการ และการแปลงสกุลเงินตามอัตราแลกเปลี่ยนรายวัน
- ยังมีฟังก์ชันที่จำเป็นสำหรับนักพัฒนา เช่น การคำนวณช่วง CIDR, การสร้าง UUID v4·NanoID, การแปลง Unix epoch และการแปลงฐานตัวเลข
- วิธีเรียกใช้คือระบุ
@dns.toysและใน Bash·Fish·Zsh สามารถเพิ่ม aliasdyเพื่อใช้งานให้สั้นลงได้ - เป็นบริการที่เน้นความสนุกและความสะดวกในการตรวจสอบ·คำนวณอย่างรวดเร็วในเทอร์มินัลมากกว่าจะเป็นเครื่องมือสำหรับงานจริงจัง เหมาะกับงานค้นหาข้อมูลง่าย ๆ
ยูทิลิตีในเทอร์มินัลที่รันผ่าน DNS query
- dns.toys ให้บริการหลายฟังก์ชันผ่านเซิร์ฟเวอร์ DNS โดยส่ง query ในรูปแบบโดเมนด้วย
digเพื่อรันคำสั่ง -
เวลา·สภาพอากาศ·การแปลง
dig mumbai.time @dns.toys: ดู เวลาปัจจุบัน ของเมืองdig 2023-05-28T14:00-mumbai-paris/fr.time @dns.toys: แปลงเขตเวลา ระหว่างเมืองdig mumbai.weather @dns.toys: ดูสภาพอากาศของเมืองdig 42km-mi.unit @dns.toys: แปลงระหว่างหน่วยกว่า 70 รายการdig 100USD-INR.fx @dns.toys: แปลงสกุลเงินตามอัตราแลกเปลี่ยนรายวันdig -4 ip @dns.toys: ตรวจสอบที่อยู่ IPv4 หรือ IPv6
-
ฟังก์ชันสำหรับการคำนวณ·นักพัฒนา
dig 10.0.0.0/24.cidr @dns.toys: คำนวณ IP แรกและสุดท้ายที่ใช้งานได้ในซับเน็ตdig 100dec-hex.base @dns.toys: แปลงฐานตัวเลข ระหว่าง hex, dec, oct, bindig 784783800.epoch @dns.toys: แปลง Unix timestamp เป็นวันที่ที่อ่านได้dig 5.uuid @dns.toys: สร้าง UUID v4dig 5.10.nanoid @dns.toys: สร้าง NanoID ตามความยาวและจำนวนที่กำหนด
-
ฟังก์ชันของเล่น
dig pi @dns.toys: แสดงตัวเลข Pidig 3d20/2.dice @dns.toys: ทอยลูกเต๋าตามจำนวนลูกและจำนวนหน้าที่กำหนดdig 2.coin @dns.toys: โยนเหรียญdig 1-100.rand @dns.toys: สร้างเลขสุ่มในช่วงที่กำหนดdig excuse @dns.toys: แสดงข้ออ้างแบบสุ่มของนักพัฒนา
shell alias สำหรับเรียกใช้ให้สั้นลง
- เมื่อเพิ่มคำสั่งย่อ
dyแล้ว จะเรียกใช้ได้สั้นลง เช่นdy mumbai.weather- Bash: เพิ่ม
alias dy="dig +short @dns.toys"ลงใน~/.bashrc - Fish: เพิ่ม
alias dy="dig +noall +answer +additional $argv @dns.toys"ลงใน~/.config/fish/config.fish - Zsh: เพิ่ม
alias dy="dig +short @dns.toys"ลงใน~/.zshrc
- Bash: เพิ่ม
- ผู้ใช้ที่ใช้เวลาในเทอร์มินัลเป็นส่วนใหญ่สามารถจัดการงานอย่าง การแปลงหน่วย หรือการตรวจสอบสภาพอากาศได้รวดเร็ว โดยไม่ต้องเปิดหน้าค้นหาที่หนักกว่า
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
นึกถึงทริกเล็ก ๆ ที่เคยใช้ตอนทำยูทิลิตี้ Dynamic DNS เอง เพื่อคำนวณที่อยู่ IP ของเครื่องตัวเองให้ “เสถียร”
รีโซลเวอร์ของ OpenDNS (
resolver1.opendns.comเป็นต้น) จะ resolvemyip.opendns.comเป็นที่อยู่ IP จริงให้ ขึ้นอยู่กับสถานะการเชื่อมต่อว่าจะได้เรคคอร์ด A หรือ AAAA และ IP ของรีโซลเวอร์เหล่านี้มักเป็น anycast IP เลยอยากเชื่อว่าน่าจะเร็วกว่าเล็กน้อยเมื่อเทียบกับการเรียก HTTP service แบบศูนย์กลางที่อาจล่มได้ทุกเมื่อแน่นอนว่า OpenDNS ก็อาจหายไปได้ทุกเมื่อเหมือนกัน แต่ผมมองว่าความเสี่ยงนั้นยังดีกว่าบริการ HTTP แนว “ที่อยู่ IP ของฉันคืออะไร?” จำนวนมาก เคยได้ยินมาด้วยว่าเดิมที DNS ถูกตั้งใจให้จัดการข้อมูลในขอบเขตที่กว้างกว่าชื่อโดเมน ซึ่งสิ่งอย่าง TXT record ก็เป็นร่องรอยของแนวคิดนั้น เว็บไซต์นี้แสดงให้เห็น ประโยชน์ที่ได้จาก 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ระหว่าง OpenDNS กับ Cloudflare อะไรมีโอกาสล่มมากกว่ากัน วิธีด้านล่างใช้ได้กับที่อยู่ IP ใด ๆ ของ Cloudflare และไม่ต้องใช้ TLS ด้วย
printf 'GET /cdn-cgi/trace HTTP/1.0\r\nHost: cloudflare.com |nc -vvn 104.18.25.13 80 |sed -n /ip=/pรายการ IP ของ Cloudflare รับได้ด้วย
curl -4si0A "" https://api.cloudflare.com/client/v4/ipsมีเว็บไซต์จำนวนมากที่แสดง IP ของไคลเอนต์ไว้บนหน้าเว็บหรือใน HTTP header และไม่จำเป็นต้องเป็นเว็บ “What is my IP” โดยเฉพาะเว็บไซต์ที่บล็อกคำขอบางแบบด้วย Cloudflare ก็เป็นอีกทางเลือกได้ เช่น ส่ง HTTP request ไปยัง StackOverflow โดยไม่มี User-Agent header
curl -si40A "" http://stackoverflow.com|sed -n '/cf-footer-ip">/{s/.*">//;s/<.*//p;}'ก็น่าทึ่งทีเดียวที่เว็บ “What is my IP” ประสบความสำเร็จ ทั้งที่ IP ของตัวเองปรากฏอยู่บนเว็บไซต์เป็นแสน ๆ แห่งอยู่แล้ว ส่วนเรื่องประโยชน์ของ DNS ดู https://www.netmeister.org/blog/dns-rrs.html ประกอบได้
แต่ก็มี https://icanhazip.com/ ที่ Cloudflare ดูแลอยู่ และฝั่งนี้ดูมีโอกาสเสถียรกว่า
https://ipv4.icanhazip.com/
https://ipv6.icanhazip.com/
เป็นแฟนตัวยงของ Julia Evans และเธอก็ทำของเล่นที่มีประโยชน์เกี่ยวกับ DNS ไว้หลายอย่าง
https://jvns.ca/
https://dns-lookup.jvns.ca/
https://messwithdns.net/
บทความที่เกี่ยวข้อง
DNS Toys - https://news.ycombinator.com/item?id=31704789 - มิถุนายน 2022, ความคิดเห็น 104 รายการ
DNS Toys: Useful utilities and services over DNS - https://news.ycombinator.com/item?id=31637226 - มิถุนายน 2022, ความคิดเห็น 1 รายการ
เป็นงานนำเสนอเมื่อไม่นานมานี้ของผู้เขียนโปรเจกต์นี้ มี เบื้องหลังสนุก ๆ ว่าโปรเจกต์เกิดขึ้นมาได้อย่างไร
https://youtu.be/ANmFZ8rbmnc?si=ndEWH4xY2oxJuEnB
แปลกที่
dig A0.0,0.0/0.0,90.0.aerial @dns.toysและ
dig A0.0,0.0/90.0,0.0.aerial @dns.toysทั้งคู่คืนค่า
TXT "aerial distance = 10007.06 KM"เส้นรอบวงตามเส้นศูนย์สูตรคือ 40,075.017 กม. และเส้นรอบวงผ่านขั้วโลกคือ 40,007.863 กม. ต่อให้สมมติว่าโลกเป็น ทรงวัว ในจินตนาการก็คงไม่เสียหายมาก และช่วยเลี่ยงอนุกรมชวนปวดหัวสำหรับหาค่าระยะทางสั้นที่สุดระหว่างสองจุดบนผิวทรงรีได้
เกี่ยวข้องกันเล็กน้อย มีบริการที่ให้รายชื่อผู้ประกอบการในสหราชอาณาจักรผ่านการ lookup ด้วย DNS ด้วย เป็นแนวคิดเดียวกันคือให้บริการ ข้อมูลที่ไม่ใช่ DNS ผ่านบริการ DNS
https://www.num.uk/
แต่ดูจาก roadmap แล้วก็เหมือนว่าอาจไม่ได้ดูแลบริการนี้ต่อแล้ว
คลาส IN(internet) ตอนนี้อาจดูเหมือนต้นซีดาร์ที่ยืนโดดเด่นขึ้นมาจากวิวัฒนาการ แต่ในยุคแคมเบรียนก็เคยมีคลาส CH(chaos) และ HS(hesiod) อยู่ด้วย ควรกลับไปดูวัตถุประสงค์และเป้าหมายของโปรเจกต์เหล่านั้นอีกครั้ง
การใช้ผิดวัตถุประสงค์ในปัจจุบันกลับใกล้เคียงกับการปรับให้เหมาะกับเว็บเซอร์วิสบนคลาวด์ หรือ “happy eyeballs” เท่านั้น โดยยอมเสียอย่างอื่นทั้งหมด เช่น หน้าต่าง 10 มิลลิวินาทีสำหรับการส่งซ้ำ หรือ qname minimization ดูเหมือนว่าเรื่องอย่าง bufferbloat ก็ไม่ได้ตระหนักกันดีนัก ยังมีโลกอีกใบที่ต่างไปโดยสิ้นเชิงอยู่นอกเหนือจากการ resolve A/AAAA
ในโถงทางเดินของงานประชุมอินเทอร์เน็ต การเห็นคนสองคนที่เสียบ pocket protector ไว้ประลองดาบกัน หรืออย่างน้อยก็เอาดินสอจิ้มกัน ไม่ใช่เรื่องหายาก RFC คือ “Request For Comments” และ BCP(Best Current Practice) ก็ถูกละเลยเป็นประจำ
ชอบนะ แต่ก็อยากให้
digติดตั้งอยู่ในทุกแพลตฟอร์มใช้บน Windows ไม่ได้เลยน่าหงุดหงิดเสมอ และลองเช็กดูแล้ว Debian ก็ไม่ได้มีมาให้โดยค่าเริ่มต้นเหมือนกัน แน่นอนว่าติดตั้งได้ง่าย ส่วน OpenBSD กับ Mac OS X มีมาให้ อันนั้นก็ดี
https://dns.lookup.dog/
digเสมอไปnslookupหรือhostก็ทำงานได้บน Windows ก็น่าจะมีเครื่องมือ lookup DNS อะไรสักอย่างอยู่แล้ว
ช่วยอธิบายให้คนโง่ในเธรดนี้เหมือนอธิบายให้เด็กห้าขวบฟังได้ไหม รู้ว่ามันทำเพื่อความสนุก แต่ไม่เข้าใจเลย ไม่รู้ด้วยว่ามันทำงานอย่างไร และรู้ว่าเป็นเพราะผมไม่รู้อะไรเอง
ตัวอย่างเช่น
dig 100USD-INR.fx @dns.toysหมายถึง “ให้ใช้dns.toysเป็นเซิร์ฟเวอร์ DNS เพื่อ resolve100USD-INR.fx” แล้วมันจะคืน TXT record ที่มีคำตอบจริงกลับมา.fxเป็นโดเมนที่ไม่มีอยู่จริง จึงไม่ได้แอบอ้างเป็นใคร และถ้าเปลี่ยน@dns.toysเป็นอย่าง@8.8.8.8ก็จะ resolve อะไรไม่ได้news.ycombinator.comเบราว์เซอร์จะใช้ชื่อนั้นไปค้นหา IP จากเซิร์ฟเวอร์พิเศษ ในโดเมนนั้นอาจเก็บไว้ประมาณนี้A IP = ...1AAAA IP = ...2ตรงนี้
Aคือชนิดของ record แต่ก็มี record ชนิดอื่นด้วยTXT gender = 'male'มีสมมติฐานบางอย่างที่คนมักถือว่าเป็นจริงโดยนัยเกี่ยวกับ DNS คือผู้คนใช้ DNS เหมือนตู้สลับสายไปยังบริการอื่น ๆ และค่าภายในตู้สลับสายนั้นโดยมากเป็นแบบคงที่
แต่ตรงนี้กำลังทำสิ่งที่ต่างออกไปโดยสิ้นเชิง เพราะคืนค่าที่เปลี่ยนไปตามโดเมน หากจะทำแบบนี้ต้องมี เซิร์ฟเวอร์ DNS ที่ทำเอง แต่ตัวโปรโตคอล DNS เองค่อนข้างเรียบง่าย
เหตุผลที่แฮ็กนี้ฉลาดคือ DNS เป็นหนึ่งในโปรโตคอลที่ใช้กันแพร่หลายและรองรับกันมากที่สุด ไลบรารีโปรแกรมมิงสายหลักทั้งหมดรองรับ และยังมีเครื่องมือ command line จำนวนมากที่มีอยู่ในระบบปฏิบัติการอยู่แล้ว หากให้บริการบน DNS ก็เข้าถึงได้จากเครื่องมือและไลบรารีด้วย dependency ขั้นต่ำ
นอกจากนี้ยังทำให้ DNS ถูกใช้โดยตรงเป็น บริการแอปพลิเคชัน ไม่ใช่ตู้สลับสายของบริการอินเทอร์เน็ตทั่วไป จึงพลิกสมมติฐานทั่วไปเกี่ยวกับวิธีที่ควรใช้ระบบ DNS เวลาเอาไปเชื่อมกับซอฟต์แวร์เดิมก็ไม่ต้อง integration ซับซ้อน และอาจมองได้ว่า request ของ DNS ตรงไปตรงมากว่าเว็บ API ทั่วไป มีความเป็นไปได้ว่าจะมีข้อดีด้านการต้านทานการเซ็นเซอร์ด้วย
เหมือนที่ส่ง request ไปยังเว็บเซิร์ฟเวอร์ด้วย HTTP เราก็โต้ตอบกับเซิร์ฟเวอร์ DNS ด้วยโปรโตคอล DNS คล้ายกับการใช้
telnetเลียนแบบ request ของ HTTP หรือ SMTP คือสื่อสารกับเซิร์ฟเวอร์บางชนิดตามชุดกฎเฉพาะเซิร์ฟเวอร์นี้ทำการคำนวณบางอย่างก่อนให้ผลลัพธ์ ซึ่งเป็นจุดที่ต่างจาก DNS record ส่วนใหญ่ที่ปกติเราคาดว่าจะเป็นข้อมูลคงที่
google.comลงไป จากนั้นอ่าน responseถ้าเซิร์ฟเวอร์ถูกตั้งค่าเป็นเซิร์ฟเวอร์ DNS อย่างถูกต้อง มันจะตอบกลับเป็น DNS record ที่เหมาะสมในรูปข้อความ
google.comเป็น CNAME ที่ชี้ไปยังซับโดเมนบางตัวที่ใช้ทำ load balancing ดังนั้นเซิร์ฟเวอร์จะตอบประมาณCNAME blabla.google.comและถ้าต้องการก็อาจ resolveblabla.google.comให้ด้วย เพื่อประหยัดการส่ง request เพิ่มโปรโตคอล DNS ที่กำหนดใน RFC บางฉบับระบุว่าต้องทำ request และ response ในรูปแบบเฉพาะ หนึ่งในนั้นคือสำหรับโดเมนระดับบนสุดที่ไม่มีอยู่จริง เช่น
.timeซึ่งปัจจุบันไม่มีอยู่ เซิร์ฟเวอร์ต้องตอบnxdomainแต่ในทางปฏิบัติไม่มีอุปกรณ์ทางเทคนิคใดขวางไม่ให้เซิร์ฟเวอร์ตอบค่าอะไรก็ได้ เช่น เวลาปัจจุบันโดยทั่วไป สิ่งเดียวที่ปกป้องผู้ใช้ไว้คือความคาดหวังว่าผู้ให้บริการ DNS ไม่ว่าจะสาธารณะหรือส่วนตัว จะไม่คืนข้อมูลมั่ว ๆ แม้ HTTPS จะช่วยบรรเทาได้ระดับหนึ่ง แต่ DNS record เองแทบจะ ปลอมแปลงได้ไม่จำกัด และไม่มีวิธีย้อนกลับ
แปลกใจที่ฟีเจอร์เหล่านี้ไม่ได้ให้บริการผ่านซับโดเมนใด ๆ ของ
dns.toysถ้าเป็นแบบนั้นก็จะ resolve ได้โดยไม่ต้องใช้ nameserver พิเศษช่วงนี้ใช้สิ่งนี้เป็นหลัก
https://addr.tools/
https://dnscheck.tools/
https://myip.addr.tools/help