where-is-the-iss.dedyn.io はウェブサイトではなく、DNS LOC レコードだけで国際宇宙ステーション(ISS)のおおよその位置を返す、遊び心のある実験
- DNS LOC は RFC 1876 の実験的標準で、ドメインレコードに緯度・経度だけでなく高度まで格納できる
- LOC レコードの高度範囲は -100,000m から 42,849,672m までで、地下施設から静止軌道衛星まで表現できる
- ISS の座標は N2YO API から取得し、LOC 形式に合わせるには高度を km から m に、緯度・経度を度・分・秒形式に変換する必要がある
- deSEC API でレコードを更新し、TTL は 900秒 に設定して、15分ごとにベストエフォート方式で最新位置を反映する
DNS LOC レコードに位置を格納する
- ドメイン名は通常サーバーを指すが、サーバーも結局はデータセンター内の物理的な位置を持つ機器である
- DNS LOC レコードは、ドメインに緯度・経度・高度を格納できる DNS レコード
- RFC 1876 は LOC レコードを定義した実験的標準
- データセンターは高層ビル内や地下にある可能性があるため、高度パラメータも含まれる
- 最小高度は -100,000m
- 最大高度は 42,849,672m で、静止軌道衛星にも使える範囲
where-is-the-iss.dedyn.io
where-is-the-iss.dedyn.io は、ISS のおおよその位置をDNS クエリで得るために作られたドメイン
- このドメインはウェブサイトではなく、ping もできず、DNS 以外の対話手段はない
- Linux と Mac の利用者は次のコマンドで LOC レコードを確認できる
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 レコードは15分ごとにベストエフォート方式で更新される
- Windows の PowerShell やコマンドプロンプトでは、LOC レコードを確認する方法を見つけにくいとしている
位置データを取得する
- N2YO は、軌道上のさまざまな物体を追跡できるウェブサイトと、無料枠が比較的ゆとりのある API を提供している
- ISS は N2YO API で衛星 ID 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 単位が必要
- 緯度と経度は十進数で返ってくるため、LOC レコードに入れるには**度・分・秒(Degrees, Minutes, Seconds)**形式に変換する必要がある
deSEC で LOC レコードを更新する
- LOC レコードの更新 API を提供する無料のドメイン名プロバイダーは多くなく、ベルリンの慈善団体 deSEC を選んだ
- deSEC は API ドキュメント を提供している
- 初期の LOC レコードは
rrsets エンドポイントに 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}'
- レコード更新は少し厄介で、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 レコードを更新する
- この間隔により、N2YO と deSEC の両方のAPI 制限内に収まる
- TXT レコードに最終更新時刻やその他の非構造化データを入れることもできるが、このデモでは素早い概念実証として十分だとしている
- DNS TXT レコードでデータを配布すれば、実質的にリクエスト制限のない API のようにも使え、静的または頻繁に変わらないデータにより向いている
DNS に入れられる風変わりなデータ
1件のコメント
Hacker News のコメント
別のレコードである Naming Authority Pointer(NAPTR) には、ヒューストンの Johnson Space Center の電話番号が入っている
dig where-is-the-iss.dedyn.io NAPTRで見るとE2U+voice:telとtel:+12814830123が出てくるAPI 制限は理解できるが、地球を 90分で一周 する物体に対して15分の更新間隔はかなり長く見える
平均すると地球の周長の約 1/12、だいたいリスボンとイスタンブールの間くらいの距離だけ位置がずれる可能性がある
無料で分単位の更新を許可してくれる DNS 更新方法を知っているなら、喜んで移行する
精密な位置追跡には明らかに大きな誤差だ
最初の文を “I love DNS erotica” と読んでしまった。屋内に長くいすぎたので散歩に行けというサインだと思う
これから散歩に行ってくる
冷水シャワーも必要そうだ
かなりいい。たった今 dns.toys にも追加した
dig iss.sky +short @dns.toys[1] https://dns.toys
素晴らしい。賢くて教育的でもある。JWST にも似たことができるのかすぐ気になった
残念ながら DNS LOC レコード は約 4,200万メートル、つまり高度 42,000km 程度が限界だが、JWST はそれより38倍遠い約150万kmの距離にある
そのため LOC の高度フィールドでは位置を表現できない。Hubble なら可能かもしれない
月の GPS 座標を尋ねるのに似ている。NASA は2023年に LRO で月面における弱い GPS 信号の受信を試験したが、まだ航法には役立たない
ISS にこの方式が合っている理由は、地球表面上の 衛星直下点 があるからだ。高度に関係なく GPS 信号を受け取れる
また TLE は、地球周回物体である ISS に適用される。TLE は地球周回衛星の位置と速度を軌道要素として定義し、SGP4 のようなモデルがそれを解釈するよう設計されている
「RFC 1876 は実験標準だ」とは、本当に長く続いている実験だ
University of Warwick, January 1996
[1] https://datatracker.ietf.org/doc/html/rfc1876
DNS LOC レコードに関する追加資料: <https://www.ckdhr.com/dns-loc/>
少し複雑だが、はるかに反応のよい方法は、
where-is-the-iss.shkspr.mobiの NS レコード を自分の VPS の IP に向けることだそのうえで UDP/53 と TCP/53 を待ち受けるプログラムを動かし、LOC レコードとメッセージ ID だけが動的に変わる DNS パケットを返せばいい
DNS 仕様に完全には従わないだろうが、この用途には十分だ。API レスポンスはキャッシュして呼び出し制限を避けられる
自分でもそういうサービスを運用していて、
2+2.op.dyn.bortzmeyer.fr/TXTやparis.now.weather.dyn.bortzmeyer.fr/TXTでテストできるDNS は 連合型、読み取り最適化、地理的複製、結果整合性を備えたキー・バリュー・ストアだ
RFC を見ても、なぜこれが必要だったのか説明がない
1996年当時、大学やデータセンターの物流に関係する理由があったのだろうかと思う
LOC RR は、USENET バックボーンのフロー地図、IP パケットの地理的経路を示す「視覚的 traceroute」、管理対象のホストやルーターの地図を生成するネットワーク管理アプリなどに使えるとされている
これが “42 Wallaby Way, Sidney” のような人間が読める文字列ではいけない理由もない