Slide 1

Slide 1 text

DNSで現在時刻がわかる魔法 九州産業大学 下川俊彦 X: @ToshiChan

Slide 2

Slide 2 text

自己紹介:下川俊彦 ◼ 九州産業大学 理工学部 情報科学科 教員 ❑ プログラミング系科目・ネットワーク系科目担当 ❑ ネットワーク・サーバ系運用も緩く担当 ◼ 長崎市出身 ◼ QUNOG参加: n回目 ◼ 初登壇! ❑ だと思ってたら2回目らしい ❑ 単独登壇は初 ◼ 好きな長崎銘菓:福砂屋のカステラ ◼ 好きなプロトコル: DNS ◼ 好きなエディタ:Emacs ◼ 好きな言語:Elixir, Ruby ◼ 好きなTCG:遊戯王OCG 2

Slide 3

Slide 3 text

時刻を知りたい! ◼ なぜか date コマンドがない!!! ◼ 代わりに dig(DNS) を使おう なぜ? ◼ コンパス総裁 ラクス・クラインは、こう言っています ❑ 必要だから開発(あい)するのではありません。 開発(あい)しているから必要なのです。 (GUNDAM SEED FREEDOM より) 3 $ date bash: date: command not found

Slide 4

Slide 4 text

設計と実装 ◼ 名前解決すると時刻が返ってくる ❑ dig now.example.net. → 2024/2/16 15:00:30 ◼ どうやって日時を表示する? ❑ IPアドレスとして日時表示するには? ◼ DNSサーバどうする? ❑ 自作の FREEDOM な DNS (TENBIN) を利用 4

Slide 5

Slide 5 text

現在日時を 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アドレスは、最初から時刻を表記することを 想定していたのかもしれない!

Slide 6

Slide 6 text

現在日時を 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

Slide 7

Slide 7 text

まずは作ってみた(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で名前解決してみてください

Slide 8

Slide 8 text

UTCが分かってもあまりうれしくない ◼ TimeZone 対応 ❑ TimeZone毎の FQDN ◼ now-0900.t.tenbin.org. // TimeZone: +0900 ◼ now--0500.t.tenbin.org. // TimeZone: -0500 ◼ TimeZone をアドレスで表記 8 ホスト名に + は利用不可

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

また作ってみた(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にしか見えない

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

TimeZone指定の改善 ◼ TimeZone の指定方法が面倒 ❑ +0900 とか -0500 とか、美しくない ◼ JST, EST などの名称で指定したい ◼ DNS には別名(CNAME)があるじゃないか! 14

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

TimeZone の自動判断 ◼ そもそも手動で指定したくない ◼ リクエスト元のIPアドレスから TimeZone を判断 ◼ IP Geolocation 技術の活用 ❑ (株)Geolocation Technology のどこどこJPを利用 ❑ CountryCode, PrefCode のほかに TimeZone も提供 16

Slide 17

Slide 17 text

もちろん作ってみた(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

Slide 18

Slide 18 text

僕らの敵 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

Slide 19

Slide 19 text

Public DNS 対策 ◼ 僕らの味方 ECS (EDNS0 Client Subnet) ❑ ECS 未対応の Public DNS のことは知らない ◼ ECSに対応しよう 19

Slide 20

Slide 20 text

当然作ってみた(現時点で最新版) ◼ 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

Slide 21

Slide 21 text

ECSとしてどんな情報が渡されてるんだろう? ◼ ECS情報もアドレスで返す? ❑ また、なにかアドレス定義する? ❑ そろそろアドレス定義に飽きてきた ◼ 日時との区別も大変そうだし 21

Slide 22

Slide 22 text

奥義: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

Slide 23

Slide 23 text

いくつかの課題 ◼ 任意の 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

Slide 24

Slide 24 text

おまけ ◼ ECS情報確認できる FQDN 作ってみた % dig +short @8.8.8.8 ecs.t.tenbin.org. txt “172.253.236.3, ECS:13.208.128.0/24/0" 24

Slide 25

Slide 25 text

まとめ ◼ 現在日時が分かる DNS 作ってみた ❑ now.t.tenbin.org. ❑ A, AAAA, TXT レコード ◼ DNSでなにかやってみたい人はご相談ください ◼ 必要だから開発(あい)するのではありません。 開発(あい)しているから必要なのです。 (GUNDAM SEED FREEDOM より) 25