DNS Toys (2022) ra mắt
(dns.toys)- dns.toys là một máy chủ DNS tận dụng truy vấn DNS như một giao diện lệnh, cho phép chạy các tiện ích nhỏ ngay trong terminal chỉ bằng
dig - Có thể xử lý ngay các tác vụ vốn phiền khi phải mở trang tìm kiếm, như giờ thế giới, thời tiết, chuyển đổi hơn 70 đơn vị, chuyển đổi tiền tệ dựa trên tỷ giá hằng ngày
- Cũng cung cấp các chức năng cần thiết cho lập trình viên như tính toán dải CIDR, tạo UUID v4/NanoID, chuyển đổi Unix epoch, chuyển đổi hệ cơ số
- Cách gọi là chỉ định
@dns.toys; trong Bash, Fish, Zsh có thể thêm aliasdyđể dùng ngắn gọn hơn - Đây là dịch vụ hướng tới sự thú vị và tiện lợi khi kiểm tra/tính toán nhanh trong terminal hơn là một công cụ thực chiến, phù hợp với các tác vụ tra cứu đơn giản
Tiện ích terminal chạy bằng truy vấn DNS
- dns.toys cung cấp nhiều chức năng dưới dạng máy chủ DNS, thực thi bằng cách gửi truy vấn dạng domain bằng
dig -
Thời gian, thời tiết, chuyển đổi
dig mumbai.time @dns.toys: tra cứu thời gian hiện tại của thành phốdig 2023-05-28T14:00-mumbai-paris/fr.time @dns.toys: chuyển đổi múi giờ giữa các thành phốdig mumbai.weather @dns.toys: tra cứu thời tiết của thành phốdig 42km-mi.unit @dns.toys: chuyển đổi giữa hơn 70 đơn vịdig 100USD-INR.fx @dns.toys: chuyển đổi tiền tệ dựa trên tỷ giá hằng ngàydig -4 ip @dns.toys: kiểm tra địa chỉ IPv4 hoặc IPv6
-
Tính toán và chức năng cho lập trình viên
dig 10.0.0.0/24.cidr @dns.toys: tính IP khả dụng đầu tiên và cuối cùng trong subnetdig 100dec-hex.base @dns.toys: chuyển đổi hệ cơ số giữa hex, dec, oct, bindig 784783800.epoch @dns.toys: chuyển Unix timestamp thành ngày tháng đọc đượcdig 5.uuid @dns.toys: tạo UUID v4dig 5.10.nanoid @dns.toys: tạo NanoID theo độ dài và số lượng chỉ định
-
Chức năng đồ chơi
dig pi @dns.toys: xuất các chữ số của Pidig 3d20/2.dice @dns.toys: tung xúc xắc với số lượng và số mặt chỉ địnhdig 2.coin @dns.toys: tung đồng xudig 1-100.rand @dns.toys: tạo số ngẫu nhiên trong phạm vidig excuse @dns.toys: xuất một lời bào chữa ngẫu nhiên của lập trình viên
Shell alias để gọi ngắn gọn
- Nếu thêm lệnh tắt
dy, có thể gọi ngắn hơn nhưdy mumbai.weather- Bash: thêm
alias dy="dig +short @dns.toys"vào~/.bashrc - Fish: thêm
alias dy="dig +noall +answer +additional $argv @dns.toys"vào~/.config/fish/config.fish - Zsh: thêm
alias dy="dig +short @dns.toys"vào~/.zshrc
- Bash: thêm
- Người dùng dành nhiều thời gian trong terminal có thể nhanh chóng xử lý các tác vụ như chuyển đổi đơn vị hoặc kiểm tra thời tiết mà không cần mở các trang tìm kiếm nặng nề
1 bình luận
Ý kiến trên Hacker News
Nhớ lại một mẹo nhỏ trước đây tôi từng dùng khi tự viết tiện ích DNS động, để tính địa chỉ IP của máy mình một cách “ổn định”
Các resolver OpenDNS (
resolver1.opendns.comv.v.) sẽ phân giảimyip.opendns.comthành địa chỉ IP thực tế. Tùy trạng thái kết nối, sẽ trả về bản ghi A hoặc AAAA, và vì IP của các resolver này thường là IP anycast, tôi muốn tin rằng nó sẽ nhanh hơn một chút so với việc gửi request đến một dịch vụ HTTP tập trung có thể chết bất cứ lúc nàoTất nhiên OpenDNS cũng có thể biến mất bất cứ lúc nào, nhưng tôi cho rằng rủi ro đó vẫn tốt hơn vô số dịch vụ HTTP kiểu “IP của tôi là gì?”. Tôi cũng từng nghe nói DNS vốn được dự định để xử lý dữ liệu ở phạm vi rộng hơn tên miền thông thường, và những thứ như bản ghi TXT là dấu vết của điều đó. Trang này cho thấy rõ những tiện ích có thể có được qua 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;};'|uniqOpenDNS và Cloudflare, bên nào có khả năng sập cao hơn? Cách dưới đây hoạt động với bất kỳ địa chỉ IP Cloudflare nào và cũng không cần TLS
printf 'GET /cdn-cgi/trace HTTP/1.0\r\nHost: cloudflare.com |nc -vvn 104.18.25.13 80 |sed -n /ip=/pCó thể lấy danh sách IP của Cloudflare bằng
curl -4si0A "" https://api.cloudflare.com/client/v4/ips. Có rất nhiều website in địa chỉ IP của client lên trang web hoặc trong HTTP header, và không nhất thiết phải là trang “What is my IP”Những website chặn một số request bằng Cloudflare cũng là một lựa chọn. Ví dụ, chỉ cần gửi HTTP request đến StackOverflow mà không có header User-Agent
curl -si40A "" http://stackoverflow.com|sed -n '/cf-footer-ip">/{s/.*">//;s/<.*//p;}'Việc các trang “What is my IP” vẫn thành công dù địa chỉ IP của bạn được hiển thị trên hàng trăm nghìn website cũng khá đáng ngạc nhiên. Về tính hữu ích của DNS, cũng đáng tham khảo https://www.netmeister.org/blog/dns-rrs.html
Tuy nhiên cũng có https://icanhazip.com/ do Cloudflare vận hành, và phía này có vẻ có khả năng ổn định hơn
https://ipv4.icanhazip.com/
https://ipv6.icanhazip.com/
Tôi là fan cuồng của Julia Evans, cô ấy cũng đã làm vài món đồ chơi hữu ích liên quan đến DNS
https://jvns.ca/
https://dns-lookup.jvns.ca/
https://messwithdns.net/
Các bài liên quan
DNS Toys - https://news.ycombinator.com/item?id=31704789 - tháng 6 năm 2022, 104 bình luận
DNS Toys: Useful utilities and services over DNS - https://news.ycombinator.com/item?id=31637226 - tháng 6 năm 2022, 1 bình luận
Đây là một bài thuyết trình gần đây của tác giả dự án này, có câu chuyện hậu trường thú vị về việc dự án ra đời như thế nào
https://youtu.be/ANmFZ8rbmnc?si=ndEWH4xY2oxJuEnB
Lạ là
dig A0.0,0.0/0.0,90.0.aerial @dns.toysvà
dig A0.0,0.0/90.0,0.0.aerial @dns.toysđều trả về
TXT "aerial distance = 10007.06 KM"Chu vi xích đạo là 40.075,017 km và chu vi qua hai cực là 40.007,863 km. Ngay cả nếu giả định Trái Đất có hình con bò tưởng tượng thì cũng không hại gì nhiều, và còn có thể tránh được chuỗi tính toán khó chịu để tìm khoảng cách ngắn nhất giữa hai điểm trên bề mặt ellipsoid
Liên quan một chút, cũng có dịch vụ cung cấp danh sách doanh nghiệp ở Anh qua truy vấn DNS. Cùng một ý tưởng là cung cấp dữ liệu không phải DNS bằng dịch vụ DNS
https://www.num.uk/
Tuy nhiên nhìn roadmap thì có vẻ họ không còn duy trì dịch vụ nữa
Lớp IN (internet) bây giờ trông như một cây sequoia vươn cao nhờ tiến hóa, nhưng vào thời Cambri cũng từng có các lớp CH (chaos) và HS (hesiod). Rất đáng xem lại mục đích và mục tiêu của các dự án đó
Trái lại, sự lạm dụng ngày nay có lẽ gần với việc tối ưu hóa chỉ cho các dịch vụ web dựa trên cloud, tức “happy eyeballs”, như cửa sổ 10 mili giây để truyền lại hoặc qname minimization, mà hy sinh mọi thứ khác. Chẳng hạn dường như cũng ít để ý đến những thứ như bufferbloat. Ngoài việc phân giải A/AAAA còn có cả một thế giới hoàn toàn khác
Ở hành lang các hội nghị Internet, việc thấy hai người đeo pocket protector đấu kiếm, hoặc ít nhất là chọc nhau bằng bút chì, cũng không hiếm. RFC là “Request For Comments”, còn BCP (Best Current Practice) thì thường xuyên bị phớt lờ
Tôi thích cái này. Chỉ ước gì
digđược cài trên mọi nền tảngLúc nào cũng bực vì không dùng được trên Windows, và tôi kiểm tra thì thấy Debian cũng không có sẵn theo mặc định. Dĩ nhiên cài thì dễ. OpenBSD và Mac OS X thì có, vậy là tốt
https://dns.lookup.dog/
dig.nslookuphoặchostcũng chạy đượcTrên Windows chắc cũng phải có công cụ tra cứu DNS nào đó
Ai có thể giải thích như cho trẻ năm tuổi cho kẻ ngốc trong thread này không. Tôi biết là để cho vui, nhưng tôi không hiểu. Cũng không biết nó hoạt động thế nào, và tôi biết là do mình thiếu hiểu biết
Ví dụ
dig 100USD-INR.fx @dns.toysnghĩa là “hãy dùngdns.toyslàm máy chủ DNS để phân giải100USD-INR.fx”. Khi đó nó trả về một bản ghi TXT chứa câu trả lời thực tế.fxlà domain không tồn tại nên không mạo danh ai cả; nếu đổi@dns.toysthành thứ như@8.8.8.8thì sẽ không phân giải được gìnews.ycombinator.com. Trình duyệt tra cứu IP cho tên đó từ một máy chủ đặc biệt. Domain đó có thể được lưu đại khái như thế nàyA IP = ...1AAAA IP = ...2Ở đây
Alà loại bản ghi. Nhưng cũng có các loại bản ghi khácTXT gender = 'male'Có vài giả định thường được ngầm xem là đúng về DNS. Người ta dùng DNS như một tổng đài chuyển sang các dịch vụ khác, và các giá trị bên trong tổng đài nói chung là tĩnh
Ở đây nó đang làm một việc hoàn toàn khác, vì trả về giá trị thay đổi theo domain. Để làm vậy cần máy chủ DNS tự viết, nhưng bản thân giao thức DNS khá đơn giản
Điểm thông minh của trò hack này là DNS là một trong những giao thức được dùng và hỗ trợ rộng rãi nhất, nên các thư viện lập trình chủ đạo đều hỗ trợ và hệ điều hành cũng đã có sẵn nhiều công cụ dòng lệnh. Nếu cung cấp dưới dạng dịch vụ trên DNS, có thể truy cập từ công cụ và thư viện với phụ thuộc tối thiểu
Ngoài ra, nó lật ngược các giả định thông thường về cách nên dùng hệ thống DNS, bằng cách khiến DNS được dùng trực tiếp như một dịch vụ ứng dụng chứ không phải tổng đài cho các dịch vụ Internet thông thường. Khi gắn vào phần mềm hiện có cũng không cần tích hợp phức tạp, và có thể xem yêu cầu DNS là trực quan hơn so với API web thông thường. Có lẽ cũng có lợi về khả năng chống kiểm duyệt
Giống như gửi request HTTP tới web server, ta tương tác với DNS server bằng giao thức DNS. Tương tự việc giả lập request HTTP hoặc SMTP bằng
telnet, tức là giao tiếp với một loại server nhất định theo một bộ quy tắc nhất địnhServer này thực hiện một mức tính toán nào đó trước khi trả kết quả, khác với phần lớn bản ghi DNS vốn thường được kỳ vọng là tĩnh
google.comvào đó rồi đọc phản hồiNếu server được cấu hình đúng là DNS server, nó sẽ trả lại các bản ghi DNS phù hợp dưới dạng văn bản. Vì
google.comlà CNAME trỏ đến một subdomain nào đó dùng cho cân bằng tải, server sẽ trả lời kiểuCNAME blabla.google.comvà nếu muốn có thể phân giải luôn cảblabla.google.comđể đỡ phải gửi thêm requestGiao thức DNS được định nghĩa trong một RFC nào đó quy định request và response phải làm theo cách nhất định. Một trong số đó là với top-level domain không tồn tại, ví dụ
.timehiện không tồn tại, server phải trả vềnxdomain. Nhưng trong thực tế, không có cơ chế kỹ thuật nào ngăn server trả về bất kỳ giá trị nào, chẳng hạn thời gian hiện tạiNói chung, điều duy nhất bảo vệ người dùng là kỳ vọng rằng nhà vận hành DNS, dù công khai hay riêng tư, sẽ không trả về dữ liệu nhảm. HTTPS giảm nhẹ phần nào, nhưng bản thân bản ghi DNS về cơ bản có thể bị giả mạo vô hạn và không có cách đảo ngược
Thật ngạc nhiên là các tính năng này không được cung cấp dưới bất kỳ subdomain nào của
dns.toys. Như vậy sẽ phân giải được mà không cần dùng nameserver đặc biệtDạo này tôi chủ yếu dùng cái này
https://addr.tools/
https://dnscheck.tools/
https://myip.addr.tools/help