Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DNSで現在時刻がわかる魔法

 DNSで現在時刻がわかる魔法

Toshihiko SHIMOKAWA

February 16, 2024
Tweet

Other Decks in Technology

Transcript

  1. 自己紹介:下川俊彦 ◼ 九州産業大学 理工学部 情報科学科 教員 ❑ プログラミング系科目・ネットワーク系科目担当 ❑ ネットワーク・サーバ系運用も緩く担当

    ◼ 長崎市出身 ◼ QUNOG参加: n回目 ◼ 初登壇! ❑ だと思ってたら2回目らしい ❑ 単独登壇は初 ◼ 好きな長崎銘菓:福砂屋のカステラ ◼ 好きなプロトコル: DNS ◼ 好きなエディタ:Emacs ◼ 好きな言語:Elixir, Ruby ◼ 好きなTCG:遊戯王OCG 2
  2. 時刻を知りたい! ◼ なぜか date コマンドがない!!! ◼ 代わりに dig(DNS) を使おう なぜ?

    ◼ コンパス総裁 ラクス・クラインは、こう言っています ❑ 必要だから開発(あい)するのではありません。 開発(あい)しているから必要なのです。 (GUNDAM SEED FREEDOM より) 3 $ date bash: date: command not found
  3. 設計と実装 ◼ 名前解決すると時刻が返ってくる ❑ dig now.example.net. → 2024/2/16 15:00:30 ◼

    どうやって日時を表示する? ❑ IPアドレスとして日時表示するには? ◼ DNSサーバどうする? ❑ 自作の FREEDOM な DNS (TENBIN) を利用 4
  4. 現在日時を IPv6アドレスとして表現する方法 ◼ 例:2024/2/16 15:10:53 ◼ IPv6 mapped DATE TIME

    Address ❑ 年月日:第1~第3ワードに格納 ❑ 時分秒:第6~第8ワードに格納 ❑ Ex: 2024:2:16::15:10:53 5 IPv6アドレスは、最初から時刻を表記することを 想定していたのかもしれない!
  5. 現在日時を IPv4アドレスとして表現する方法 ◼ 例:2024/2/16 15:10:53 ◼ IPv4 mapped DATE address

    ❑ 年月日 :第1、第2オクテットで年(上位2桁と下位2桁) 第3、第4オクテットで月、日 ❑ ex: 20.24.2.16 ◼ IPv4 mapped TIME address ❑ 時分秒:第2~第4オクテットで、時・分・秒 ❑ ex: 0.15.10.53 6
  6. まずは作ってみた(version 1) ◼ nowv1.t.tenbin.org. % dig +noall +answer nowv1.t.tenbin.org. aaaa

    nowv1.t.tenbin.org. 0 IN AAAA 2024:2:15::8:17:24 % dig +noall +answer nowv1.t.tenbin.org. a nowv1.t.tenbin.org. 0 IN A 20.24.2.15 nowv1.t.tenbin.org. 0 IN A 0.8.18.18 7 2/15 朝8時からスライド作ってたの? もちろん、そんなわけはない これはUTC JSTだと 2/15 17:17:024 ラウンドロビンされる DNSだから仕方がない 愛で受け入れる お手元のPCで名前解決してみてください
  7. UTCが分かってもあまりうれしくない ◼ TimeZone 対応 ❑ TimeZone毎の FQDN ◼ now-0900.t.tenbin.org. //

    TimeZone: +0900 ◼ now--0500.t.tenbin.org. // TimeZone: -0500 ◼ TimeZone をアドレスで表記 8 ホスト名に + は利用不可
  8. TimeZoneをIPv6アドレスとして表現 ◼ 例: ❑ +0900 (JST:日本標準時) ❑ -0500 (EST:米国東部標準時) ◼

    IPv6 mapped TimeZone Address ❑ 第1ワードは 72 ← TZ に見えるでしょ? ❑ 第6ワードに符号: 正:0, 負:ffff ←-1にしか見えない ❑ 第7~第8ワードに絶対値 ❑ ex: ◼ 72::900 ◼ 72::ffff:500 9
  9. TimeZoneをIPv4アドレスとして表現 ◼ 例: ❑ +0900 (JST:日本標準時) ❑ -0500 (EST:米国東部標準時) ◼

    IPv4 mapped TimeZone Address ❑ 第1オクテットは 72 ← TZ に見えるでしょ? ❑ 第2オクテットに符号: 正:0, 負:255 ←-1にしか見えない ❑ 第3オクテットに時、第4オクテットに分 ❑ ex: ◼ 72.0.9.0 ◼ 72.255.5.0 10
  10. また作ってみた(version 2) UTC(+0000)の場合 ◼ nowv2.t.tenbin.org. % dig +noall +answer nowv2.t.tenbin.org.

    aaaa nowv2.t.tenbin.org. 0 IN AAAA 2024:2:15::8:19:13 nowv2.t.tenbin.org. 0 IN AAAA 72:: % dig +noall +answer nowv2.t.tenbin.org. a nowv2.t.tenbin.org. 0 IN A 20.24.2.15 nowv2.t.tenbin.org. 0 IN A 0.8.19.46 nowv2.t.tenbin.org. 0 IN A 72.0.0.0 11 ラウンドロビンは愛で 受け入れる ラウンドロビンは愛で 受け入れる 0にしか見えない
  11. JST (+0900)の場合 ◼ nowv2-0900.t.tenbin.org. % dig +noall +answer nowv2-0900.t.tenbin.org. aaaa

    nowv2-0900.t.tenbin.org. 0 IN AAAA 2024:2:15::17:20:48 nowv2-0900.t.tenbin.org. 0 IN AAAA 72::900 % dig +noall +answer nowv2-0900.t.tenbin.org. a nowv2-0900.t.tenbin.org. 0 IN A 20.24.2.15 nowv2-0900.t.tenbin.org. 0 IN A 0.17.21.31 nowv2-0900.t.tenbin.org. 0 IN A 72.0.9.0 12
  12. EST (-0500)の場合 ◼ nowv2--0500.t.tenbin.org. % dig +noall +answer nowv2--0500.t.tenbin.org. aaaa

    nowv2--0500.t.tenbin.org. 0 IN AAAA 2024:2:15::3:22:2 nowv2--0500.t.tenbin.org. 0 IN AAAA 72::ffff:500 % dig +noall +answer nowv2--0500.t.tenbin.org. a nowv2--0500.t.tenbin.org. 0 IN A 20.24.2.15 nowv2--0500.t.tenbin.org. 0 IN A 0.3.2.21 nowv2--0500.t.tenbin.org. 0 IN A 72.255.5.0 13
  13. TimeZone指定の改善 ◼ TimeZone の指定方法が面倒 ❑ +0900 とか -0500 とか、美しくない ◼

    JST, EST などの名称で指定したい ◼ DNS には別名(CNAME)があるじゃないか! 14
  14. CNAMEの利用 ◼ nowv2-jst.t.tenbin.org. ◼ nowv2-est.t.tenbin.org. % dig +noall +answer nowv2-jst.t.tenbin.org.

    aaaa nowv2-jst.t.tenbin.org. 300 IN CNAME nowv2-0900.t.tenbin.org. nowv2-0900.t.tenbin.org. 0 IN AAAA 2024:2:15::17:22:59 nowv2-0900.t.tenbin.org. 0 IN AAAA 72::900 % dig +noall +answer nowv2-est.t.tenbin.org. aaaa nowv2-est.t.tenbin.org. 300 IN CNAME nowv2--0500.t.tenbin.org. nowv2--0500.t.tenbin.org. 0 IN AAAA 2024:2:15::3:23:15 nowv2--0500.t.tenbin.org. 0 IN AAAA 72::ffff:500 15
  15. TimeZone の自動判断 ◼ そもそも手動で指定したくない ◼ リクエスト元のIPアドレスから TimeZone を判断 ◼ IP

    Geolocation 技術の活用 ❑ (株)Geolocation Technology のどこどこJPを利用 ❑ CountryCode, PrefCode のほかに TimeZone も提供 16
  16. もちろん作ってみた(version 3) ◼ nowv3.t.tenbin.org. % dig +noall +answer nowv3.t.tenbin.org. aaaa

    nowv3.t.tenbin.org. 0 IN AAAA 2024:2:15::17:23:51 nowv3.t.tenbin.org. 0 IN AAAA 72::900 ◼ IP Geolocation といえば出てくるのが… Public DNS 17
  17. 僕らの敵 Public DNS % dig +noall +answer nowv3.t.tenbin.org. aaaa @1.1.1.1

    nowv3.t.tenbin.org. 0 IN AAAA 2024:2:15::9:24:54 nowv3.t.tenbin.org. 0 IN AAAA 72::100 % dig +noall +answer nowv3.t.tenbin.org. aaaa @8.8.8.8 nowv3.t.tenbin.org. 0 IN AAAA 2024:2:15::3:25:25 nowv3.t.tenbin.org. 0 IN AAAA 72::ffff:500 % dig +noall +answer nowv3.t.tenbin.org. aaaa @9.9.9.9 nowv3.t.tenbin.org. 5 IN AAAA 2024:2:15::17:25:58 nowv3.t.tenbin.org. 5 IN AAAA 72::900 18
  18. Public DNS 対策 ◼ 僕らの味方 ECS (EDNS0 Client Subnet) ❑

    ECS 未対応の Public DNS のことは知らない ◼ ECSに対応しよう 19
  19. 当然作ってみた(現時点で最新版) ◼ now.t.tenbin.org. % dig +noall +answer now.t.tenbin.org. aaaa @8.8.8.8

    now.t.tenbin.org. 0 IN AAAA 2024:2:15::17:26:43 now.t.tenbin.org. 0 IN AAAA 72::900 20
  20. 奥義:TXT レコード % dig +short now.t.tenbin.org. txt @8.8.8.8 “2024-02-15 17:29:02

    +0900 from 172.253.3.1, ECS:133.17.110.0/24/0" % dig +short now.t.tenbin.org. txt @8.8.8.8 “2024-02-15 03:30:17 -0500 from 172.253.7.130, ECS:no " ◼ 最初からTXT使えばよいのに、とか夢のないこと言うのは禁止 ◼ ECS が付くときと付かない時がある ❑ 今後調査予定 22
  21. いくつかの課題 ◼ 任意の subnet の TimeZone を調べられちゃう % dig +short

    now.t.tenbin.org. +subnet=9.9.9.9/16 txt @8.8.8.8 “2024-02-15 03:34:24 -0500 from 172.253.236.133, ECS:9.9.0.0/16/0" ❑ いたずらしないでね ◼ 9999年問題(IPv6)、25599年問題(IPv4) ❑ 表現できる年の限界 ❑ 多分無視して大丈夫w 23
  22. まとめ ◼ 現在日時が分かる DNS 作ってみた ❑ now.t.tenbin.org. ❑ A, AAAA,

    TXT レコード ◼ DNSでなにかやってみたい人はご相談ください ◼ 必要だから開発(あい)するのではありません。 開発(あい)しているから必要なのです。 (GUNDAM SEED FREEDOM より) 25