where-is-the-iss.dedyn.io ไม่ใช่เว็บไซต์ แต่เป็นการทดลองขำ ๆ ที่ส่งคืนตำแหน่งโดยประมาณของสถานีอวกาศนานาชาติ (ISS) โดยใช้เพียง DNS LOC record
- DNS LOC เป็น มาตรฐานเชิงทดลอง ตาม RFC 1876 ที่สามารถเก็บทั้งละติจูด ลองจิจูด และระดับความสูงไว้ในเรคอร์ดของโดเมนได้
- ช่วงระดับความสูงของ LOC record คือ -100,000m ถึง 42,849,672m จึงใช้แทนได้ตั้งแต่สิ่งอำนวยความสะดวกใต้ดินไปจนถึงดาวเทียมวงโคจรค้างฟ้า
- พิกัดของ ISS ดึงมาจาก N2YO API และเพื่อให้เข้ากับรูปแบบ LOC ต้องแปลงระดับความสูงจาก km เป็น m และแปลงละติจูด/ลองจิจูดเป็น รูปแบบองศา-ลิปดา-พิลิปดา
- อัปเดตเรคอร์ดผ่าน deSEC API และตั้ง TTL เป็น 900 วินาที เพื่อสะท้อนตำแหน่งล่าสุดทุก 15 นาทีแบบ best-effort
บันทึกตำแหน่งด้วย DNS LOC record
- โดยปกติชื่อโดเมนจะชี้ไปยังเซิร์ฟเวอร์ แต่เซิร์ฟเวอร์เองก็เป็นอุปกรณ์ที่มี ตำแหน่งทางกายภาพ อยู่ในดาต้าเซ็นเตอร์
- DNS LOC record คือ DNS record ที่สามารถเก็บ ละติจูด ลองจิจูด และระดับความสูง ไว้ในโดเมนได้
- RFC 1876 เป็น มาตรฐานเชิงทดลอง ที่นิยาม LOC record
- ดาต้าเซ็นเตอร์อาจอยู่ในอาคารสูงหรืออยู่ใต้ดิน จึงรวมพารามิเตอร์ระดับความสูงไว้ด้วย
- ระดับความสูงต่ำสุดคือ -100,000m
- ระดับความสูงสูงสุดคือ 42,849,672m ซึ่งอยู่ในช่วงที่ใช้กับ ดาวเทียมวงโคจรค้างฟ้า ได้
where-is-the-iss.dedyn.io
where-is-the-iss.dedyn.io เป็นโดเมนที่สร้างขึ้นเพื่อให้ได้ตำแหน่งโดยประมาณของ ISS ผ่าน การ query DNS
- โดเมนนี้ ไม่ใช่เว็บไซต์ จะ ping ก็ไม่ได้ และไม่มีวิธีโต้ตอบอื่นนอกจาก DNS
- ผู้ใช้ Linux และ Mac สามารถดู LOC record ได้ด้วยคำสั่งต่อไปนี้
dig where-is-the-iss.dedyn.io LOC
- คำตอบจะส่งกลับละติจูด ลองจิจูด และระดับความสูงของ ISS ในรูปแบบ LOC
;; ANSWER SECTION:
where-is-the-iss.dedyn.io. 1066 IN LOC 47 24 53.500 N 66 12 12.070 W 430520m 10000m 10000m 10000m
- DNS record จะถูกอัปเดตแบบ best-effort ทุก 15 นาที
- สำหรับ Windows PowerShell หรือ Command Prompt ดูเหมือนจะหา方法สำหรับ query LOC record ได้ยาก
ดึงข้อมูลตำแหน่ง
- N2YO เป็นเว็บไซต์ที่ใช้ติดตามวัตถุต่าง ๆ ในวงโคจร และมี API ที่มี free tier ค่อนข้างใจกว้าง
- ISS ถูกเรียกดูใน N2YO API ด้วยรหัสดาวเทียม 25544
- การตอบกลับจาก API มีฟิลด์อย่าง
satlatitude, satlongitude, sataltitude, timestamp, eclipsed
{
"info": {
"satname": "SPACE STATION",
"satid": 25544,
"transactionscount": 7
},
"positions": [
{
"satlatitude": -21.25409321,
"satlongitude": 140.3335763,
"sataltitude": 420.09,
"azimuth": 292.92,
"elevation": -70.95,
"ra": 202.69300845,
"dec": -32.16097472,
"timestamp": 1751366048,
"eclipsed": true
}
]
}
- ระดับความสูงในคำตอบของ N2YO ใช้หน่วยเป็น km แต่รูปแบบ LOC ต้องใช้หน่วย m
- ละติจูดและลองจิจูดมาในรูปแบบเลขทศนิยม จึงต้องแปลงเป็น องศา-ลิปดา-พิลิปดา (Degrees, Minutes, Seconds) ก่อนใส่ใน LOC record
อัปเดต LOC record ด้วย deSEC
- ผู้ให้บริการชื่อโดเมนฟรีที่มี API สำหรับอัปเดต LOC record มีไม่มากนัก จึงเลือก deSEC ซึ่งเป็นองค์กรการกุศลจากเบอร์ลิน
- deSEC มี เอกสาร API
- LOC record เริ่มต้นถูกเพิ่มเข้าไปด้วย
curl ที่ endpoint rrsets
curl https://desec.io/api/v1/domains/where-is-the-iss.dedyn.io/rrsets/ \
--header "Authorization: Token _______" \
--header "Content-Type: application/json" --data @- <<< \
'{"type": "LOC", "records": ["40 16 25.712 S 29 32 36.243 W 427550m 0.00m 10000m 10m"], "ttl": 900}'
- การรีเฟรชเรคอร์ดซับซ้อนขึ้นอีกนิด โดยต้องส่ง HTTP PATCH ไปยัง URL อีกตัวหนึ่ง
- ในคำขอ PATCH ใส่เฉพาะ ข้อมูลที่เปลี่ยนไป ก็พอ
curl -X PATCH https://desec.io/api/v1/… \
--header "Authorization: Token _______" \
--header "Content-Type: application/json" --data @- <<< \
'{"records": ["40 16 25.712 S 29 32 36.243 W 427550m 0.00m 10000m 10m"]}'
รอบการอัปเดตและข้อจำกัด
- ตั้งค่า TTL เป็น 900 วินาที
- โค้ดจะรันทุก 15 นาทีเพื่ออัปเดต DNS record
- ช่วงเวลานี้ช่วยให้อยู่ภายใน ข้อจำกัดของ API ทั้งฝั่ง N2YO และ deSEC
- จะใช้ TXT record เพื่อใส่เวลาที่อัปเดตล่าสุดหรือข้อมูลไร้โครงสร้างอื่น ๆ ก็ได้ แต่เดโมนี้มองว่าแค่พิสูจน์แนวคิดแบบรวดเร็วก็น่าจะพอ
- หากเผยแพร่ข้อมูลผ่าน DNS TXT record ก็อาจใช้งานได้คล้าย API ที่แทบไม่มีข้อจำกัดด้านจำนวนคำขอ และเหมาะกับข้อมูลแบบคงที่หรือเปลี่ยนไม่บ่อยมากกว่า
ข้อมูลแปลก ๆ ที่ใส่ใน DNS ได้
- เดโมนี้เป็นวิธีที่ทั้งซับซ้อนและขำ ๆ ในการแสดงให้เห็นว่า DNS สามารถเก็บเรคอร์ดที่คาดไม่ถึงได้
- เช่นเดียวกับการแทนพิกัด ISS ด้วย LOC record ก็ชวนให้นึกต่อได้ว่าจะอธิบายพิกัดของ Mars Rover อย่างไร
- บทความ DNS ที่เกี่ยวข้องได้แก่ BIMI - SVG in DNS TXT WTF?! และ Why you can't dig Switzerland
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
เรคคอร์ดอีกประเภทหนึ่งคือ Name Authority Pointer (NAPTR) มีหมายเลขโทรศัพท์ของ Johnson Space Center ในฮิวสตันอยู่ด้วย
ถ้าดูด้วย
dig where-is-the-iss.dedyn.io NAPTRจะเห็นE2U+voice:telและtel:+12814830123เข้าใจเรื่องข้อจำกัดของ API แต่รอบอัปเดต 15 นาทีสำหรับวัตถุที่โคจรรอบโลก หนึ่งรอบใน 90 นาที ดูจะนานพอสมควร
โดยเฉลี่ยแล้วตำแหน่งอาจคลาดเคลื่อนได้ราว 1/12 ของเส้นรอบวงโลก หรือประมาณระยะทางระหว่างลิสบอนกับอิสตันบูล
ถ้ารู้วิธีอัปเดต DNS ที่อนุญาตให้อัปเดตระดับนาทีได้ฟรี ก็ยินดีย้ายไปใช้
สำหรับการติดตามตำแหน่งแบบแม่นยำ ถือว่าเป็นความคลาดเคลื่อนที่มากแน่นอน
อ่านประโยคแรกเป็น “I love DNS erotica” สงสัยเป็นสัญญาณว่าผมอยู่ในบ้านนานเกินไป ควรออกไปเดินเล่นแล้ว
เดี๋ยวจะออกไปเดินเล่นแล้ว
คงต้องอาบน้ำเย็นด้วย
เจ๋งดี เพิ่งเพิ่มเข้าไปใน dns.toys ด้วย
dig iss.sky +short @dns.toys[1] https://dns.toys
ยอดเยี่ยม ทั้งฉลาดและให้ความรู้ ทำให้นึกสงสัยทันทีว่าจะทำอะไรคล้าย ๆ กันกับ JWST ได้ไหม
น่าเสียดายที่ DNS LOC record จำกัดไว้ราว 42 ล้านเมตร หรือก็คือระดับความสูงประมาณ 42,000 กม. แต่ JWST อยู่ไกลกว่านั้น 38 เท่า ที่ระยะประมาณ 1.5 ล้านกม.
ดังนั้นจึงใช้ฟิลด์ความสูงของ LOC แทนตำแหน่งไม่ได้ ถ้าเป็น Hubble อาจพอทำได้
คล้ายกับการถามพิกัด GPS ของดวงจันทร์ NASA เคยทดลองรับสัญญาณ GPS อ่อน ๆ บนดวงจันทร์ด้วย LRO ในปี 2023 แต่ยังไม่มีประโยชน์สำหรับการนำทาง
เหตุผลที่วิธีนี้เหมาะกับ ISS คือมันมี จุดใต้ดาวเทียม บนพื้นผิวโลก รับสัญญาณ GPS ได้โดยไม่ขึ้นกับระดับความสูง
อีกอย่าง TLE ใช้กับ ISS ซึ่งเป็นวัตถุในวงโคจรโลก TLE ถูกออกแบบมาเพื่อกำหนดตำแหน่งและความเร็วของดาวเทียมในวงโคจรโลกในรูปขององค์ประกอบวงโคจร แล้วให้โมเดลอย่าง SGP4 ตีความ
“RFC 1876 เป็นมาตรฐานเชิงทดลอง” นี่เป็นการทดลองที่ยาวนานจริง ๆ
University of Warwick, January 1996
[1] https://datatracker.ietf.org/doc/html/rfc1876
เอกสารเพิ่มเติมเกี่ยวกับ DNS LOC record: <https://www.ckdhr.com/dns-loc/>
วิธีที่ซับซ้อนขึ้นเล็กน้อยแต่ตอบสนองได้ดีกว่ามาก คือชี้ NS record ของ
where-is-the-iss.shkspr.mobiไปยัง IP ของ VPS ตัวเองจากนั้นรันโปรแกรมที่ฟัง UDP/53 และ TCP/53 แล้วตอบกลับด้วยแพ็กเก็ต DNS ที่เปลี่ยนแบบไดนามิกเฉพาะ LOC record กับ message ID
อาจไม่ได้ทำตามสเปก DNS อย่างครบถ้วน แต่สำหรับการใช้งานนี้ก็เพียงพอ สามารถแคชคำตอบของ API เพื่อเลี่ยงขีดจำกัดการเรียกได้
ผมให้บริการแบบนั้นอยู่ และทดสอบได้ที่
2+2.op.dyn.bortzmeyer.fr/TXTหรือparis.now.weather.dyn.bortzmeyer.fr/TXTDNS คือที่เก็บคีย์-ค่าแบบ federated ที่ปรับให้เหมาะกับการอ่าน มีการจำลองแบบตามภูมิศาสตร์ และมีความสอดคล้องแบบสุดท้าย
อ่าน RFC แล้วก็ยังไม่เห็นอธิบายว่าทำไมถึงต้องมีสิ่งนี้
เลยสงสัยว่าในปี 1996 อาจมีเหตุผลเกี่ยวกับลอจิสติกส์ของมหาวิทยาลัยหรือศูนย์ข้อมูลหรือเปล่า
ระบุว่า LOC RR ใช้ได้กับแผนที่การไหลของแบ็กโบน USENET, “visual traceroute” ที่แสดงเส้นทางเชิงภูมิศาสตร์ของแพ็กเก็ต IP, แอปจัดการเครือข่ายที่สร้างแผนที่โฮสต์และเราเตอร์ที่ดูแลอยู่ เป็นต้น
ก็ไม่มีเหตุผลอะไรที่มันจะเป็นสตริงที่มนุษย์อ่านได้อย่าง “42 Wallaby Way, Sidney” ไม่ได้