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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Avatar for Toshihiko SHIMOKAWA

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