where-is-the-iss.dedyn.io adalah eksperimen iseng yang mengembalikan perkiraan lokasi Stasiun Luar Angkasa Internasional (ISS) hanya melalui record DNS LOC, bukan sebuah situs web
- DNS LOC adalah standar eksperimental dalam RFC 1876, yang dapat memuat tidak hanya lintang dan bujur, tetapi juga ketinggian dalam record domain
- Rentang ketinggian record LOC adalah dari -100.000 m hingga 42.849.672 m, sehingga dapat merepresentasikan apa pun dari fasilitas bawah tanah hingga satelit geostasioner
- Koordinat ISS diambil dari API N2YO; agar sesuai dengan format LOC, ketinggian harus dikonversi dari km ke m, sementara lintang dan bujur harus dikonversi ke format derajat-menit-detik
- Record diperbarui melalui API deSEC dan TTL disetel ke 900 detik, sehingga lokasi terbaru direfleksikan setiap 15 menit secara best-effort
Memuat Lokasi dalam Record DNS LOC
- Nama domain biasanya menunjuk ke server, tetapi server pada akhirnya tetap merupakan perangkat yang memiliki lokasi fisik di dalam pusat data
- Record DNS LOC adalah record DNS yang dapat memuat lintang, bujur, dan ketinggian pada domain
- RFC 1876 adalah standar eksperimental yang mendefinisikan record LOC
- Karena pusat data bisa berada di gedung bertingkat atau di bawah tanah, parameter ketinggian juga disertakan
- Ketinggian minimum adalah -100.000 m
- Ketinggian maksimum adalah 42.849.672 m, rentang yang juga dapat digunakan untuk satelit geostasioner
where-is-the-iss.dedyn.io
where-is-the-iss.dedyn.io adalah domain yang dibuat untuk mendapatkan perkiraan lokasi ISS melalui kueri DNS
- Domain ini bukan situs web, tidak bisa di-ping, dan tidak memiliki cara interaksi selain DNS
- Pengguna Linux dan Mac dapat melihat record LOC dengan perintah berikut
dig where-is-the-iss.dedyn.io LOC
- Responsnya mengembalikan lintang, bujur, dan ketinggian ISS dalam format 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
- Record DNS diperbarui setiap 15 menit secara best-effort
- Di PowerShell atau Command Prompt Windows, tampaknya sulit menemukan cara untuk melakukan kueri record LOC
Mengambil Data Lokasi
- N2YO menyediakan situs web untuk melacak berbagai objek di orbit dan API dengan free tier yang cukup longgar
- ISS dikueri dari API N2YO dengan ID satelit 25544
- Respons API berisi field seperti
satlatitude, satlongitude, sataltitude, timestamp, dan 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
}
]
}
- Ketinggian dalam respons N2YO menggunakan satuan km, sementara format LOC membutuhkan satuan m
- Karena lintang dan bujur diberikan sebagai desimal, keduanya harus diubah ke format derajat-menit-detik (Degrees, Minutes, Seconds) agar bisa dimasukkan ke record LOC
Memperbarui Record LOC dengan deSEC
- Tidak banyak penyedia nama domain gratis yang menyediakan API pembaruan record LOC, jadi dipilih deSEC, sebuah organisasi amal di Berlin
- deSEC menyediakan dokumentasi API
- Record LOC awal ditambahkan ke endpoint
rrsets dengan curl
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}'
- Pembaruan record sedikit lebih rumit; HTTP PATCH harus dikirim ke URL lain
- Permintaan PATCH cukup memuat data yang berubah saja
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"]}'
Siklus Pembaruan dan Batasan
- TTL disetel ke 900 detik
- Kode dijalankan setiap 15 menit untuk memperbarui record DNS
- Siklus ini membuatnya tetap berada dalam batas API N2YO maupun deSEC
- Bisa saja memasukkan waktu pembaruan terakhir atau data tidak terstruktur lainnya melalui record TXT, tetapi untuk demo ini, proof of concept cepat dianggap sudah cukup
- Menyebarkan data lewat record DNS TXT juga bisa dipakai layaknya API yang praktis tanpa batas permintaan, dan lebih cocok untuk data statis atau yang tidak sering berubah
Data Tidak Biasa yang Bisa Dimuat di DNS
- Demo ini adalah cara yang rumit dan iseng untuk menunjukkan bahwa DNS juga dapat memuat record yang tidak terduga
- Seperti koordinat ISS yang direpresentasikan dengan record LOC, menarik juga membayangkan bagaimana koordinat Mars Rover dapat direpresentasikan
- Tulisan terkait DNS lainnya adalah BIMI - SVG in DNS TXT WTF?! dan Why you can't dig Switzerland
1 komentar
Komentar Hacker News
Rekor lain, yaitu Name Authority Pointer (NAPTR), berisi nomor telepon Johnson Space Center di Houston
Jika dilihat dengan
dig where-is-the-iss.dedyn.io NAPTR, akan munculE2U+voice:teldantel:+12814830123Pembatasan API bisa dimengerti, tetapi interval pembaruan 15 menit terasa cukup lama untuk objek yang mengelilingi Bumi setiap 90 menit
Rata-rata posisinya bisa meleset sekitar 1/12 keliling Bumi, kira-kira sejauh jarak antara Lisbon dan Istanbul
Kalau ada cara pembaruan DNS gratis yang mengizinkan refresh per menit, saya dengan senang hati akan pindah
Jelas itu galat yang besar untuk pelacakan posisi presisi
Saya sempat membaca kalimat pertama sebagai “I love DNS erotica”, dan itu mungkin pertanda saya sudah terlalu lama di dalam ruangan dan perlu jalan-jalan
Sekarang saya akan pergi jalan-jalan
Sepertinya perlu mandi air dingin juga
Keren sekali. Baru saja saya tambahkan juga ke dns.toys
dig iss.sky +short @dns.toys[1] https://dns.toys
Luar biasa. Cerdik sekaligus edukatif. Saya langsung penasaran apakah hal serupa bisa dibuat untuk JWST
Sayangnya record DNS LOC punya batas sekitar 42 juta meter, yaitu ketinggian sekitar 42.000 km, sedangkan JWST berada sekitar 1,5 juta km, atau 38 kali lebih jauh dari itu
Jadi posisinya tidak bisa direpresentasikan dengan field ketinggian LOC. Untuk Hubble mungkin bisa
Ini mirip seperti menanyakan koordinat GPS Bulan. NASA memang menguji penerimaan sinyal GPS lemah di Bulan dengan LRO pada 2023, tetapi itu masih belum berguna untuk navigasi
Alasan pendekatan ini cocok untuk ISS adalah karena ada titik sub-satelit di atas permukaan Bumi. Terlepas dari ketinggiannya, koordinat GPS bisa diperoleh
Selain itu, TLE berlaku untuk ISS sebagai objek di orbit Bumi. TLE mendefinisikan posisi dan kecepatan satelit orbit Bumi sebagai elemen orbit, dan dirancang agar bisa diinterpretasikan oleh model seperti SGP4
“RFC 1876 adalah standar eksperimental” — eksperimen yang benar-benar bertahan lama
University of Warwick, January 1996
[1] https://datatracker.ietf.org/doc/html/rfc1876
Bacaan tambahan tentang record DNS LOC: <https://www.ckdhr.com/dns-loc/>
Cara yang sedikit lebih rumit tetapi jauh lebih responsif adalah dengan mengarahkan record NS
where-is-the-iss.shkspr.mobike IP VPS milik sendiriLalu jalankan program yang mendengarkan di UDP/53 dan TCP/53, lalu membalas dengan paket DNS yang hanya mengubah record LOC dan ID pesan secara dinamis
Ini mungkin tidak sepenuhnya mengikuti spesifikasi DNS, tetapi untuk keperluan ini sudah cukup. Respons API bisa di-cache untuk menghindari batas pemanggilan
Saya sendiri menjalankan layanan seperti itu, dan bisa diuji dengan
2+2.op.dyn.bortzmeyer.fr/TXTatauparis.now.weather.dyn.bortzmeyer.fr/TXTDNS adalah penyimpanan key-value yang terfederasi, dioptimalkan untuk pembacaan, direplikasi secara geografis, dan memiliki konsistensi eventual
Bahkan setelah membaca RFC-nya, tetap tidak dijelaskan mengapa ini diperlukan
Saya jadi bertanya-tanya apakah pada 1996 ada alasan yang berkaitan dengan logistik kampus atau pusat data
Disebutkan bahwa LOC RR bisa dipakai untuk peta aliran backbone USENET, “traceroute visual” yang menunjukkan rute geografis paket IP, dan aplikasi manajemen jaringan yang membuat peta host dan router yang dikelola
Tidak ada alasan kenapa ini tidak bisa saja berupa string yang bisa dibaca manusia seperti “42 Wallaby Way, Sidney”