メモ的ななにか

@Maleic1618

RFC 5155: DNS Security (DNSSEC) Hashed Authenticated Denial of Existence (Part 2)

こんにちは、まれいんです。

この記事は ひとりRFCの旅 Advent Calender 8日目の記事です。

qiita.com

今回も前回に引き続き、RFC 5155を読んでいきます。

RFC 7129? 知らない子ですね...

続きを読む

RFC 5155: DNS Security (DNSSEC) Hashed Authenticated Denial of Existence (Part 1)

こんにちは、まれいんです。

この記事は ひとりRFCの旅 Advent Calender 7日目の記事です。

qiita.com

今回はDNSSECでネガティブ応答を示すために導入されたNSEC3についてのRFC 5155を読んでいきます。

続きを読む

Draft: Service binding and parameter specification via the DNS (DNS SVCB and HTTPS RRs)

こんにちは、まれいんです。

この記事は ひとりRFCの旅 Advent Calender 5日目の記事です。

qiita.com

今回はRFCではありませんが、IETFのDomain Name System Operationsというワーキンググループで議論が進行中の、HTTPSリソースレコードについてのドラフトを見て行こうと思います。執筆当時の最新バージョンは02です。

draft-ietf-dnsop-svcb-https-02

続きを読む

RFC8914: Extended DNS Errors

こんにちは、まれいんです。

この記事は ひとりRFCの旅 Advent Calender 4日目の記事です。

qiita.com

2020年10月に出た、比較的新しめのRFCであるRFC8914を読んでいこうと思います。

原文: RFC 8914 - Extended DNS Errors

概要

DNSはステータスを返すためのフィールドRCODEがHeaderに用意されています。 名前解決に成功したらNOERROR、ドメイン存在しない時はNXDOMAIN、サーバーに何かあったらSERVFAILなど、 ここのフィールドを見ることでざっくりと名前解決結果のステータスを確認することが出来ました。 代表的なものについてはRFC1035 4.1.1参照

maleic@ohmae:~$ dig maleic1618.hatenablog.jp @8.8.8.8

; <<>> DiG 9.16.8-Debian <<>> maleic1618.hatenablog.jp @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28650
                                       ↑これ
...

しかし、あくまでざっくりとしか分かりません。 例えば以下はDNSSECの検証に失敗した場合ですが、SERVFAILしか返ってこないのでサーバー側がcrashしたのか、応答が返ってこないのかわかりません。

$ dig dnssec-failed.org @8.8.8.8

; <<>> DiG 9.16.8-Debian <<>> dnssec-failed.org @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 32185  # <-- SERVFAILになっているだけ
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;dnssec-failed.org.             IN      A
...

というわけでこれとは別にエラーが発生した場合はより詳しい失敗理由を通知できるようにする仕組みが、このRFC8914で導入されるExtended DNS Errors(EDE)です。

wire format

EDNS0で導入されたOPTリソースレコードのkey-value形式のオプションを利用します。 wire formatは以下です。

                                                1   1   1   1   1   1
        0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
   0: |                            OPTION-CODE                        |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
   2: |                           OPTION-LENGTH                       |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
   4: | INFO-CODE                                                     |
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
   6: / EXTRA-TEXT ...                                                /
      +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
フィールド 意味
OPTION-CODE オプションタイプの識別子、EDEは15
OPTION-LENGTH INFO-CODE長 + EXTRA-TEXT長
INFO-CODE エラー理由を示すコード
EXTRA-TEXT 人間が読む用のUTF-8な文字列

INFO-CODEのいくつかはこのRFCで定義されています。 序盤はDNSSEC関連がほとんどですね。

INFO-CODE 意味 定義か所
0 Other Error Section 4.1
1 Unsupported DNSKEY Algorithm Section 4.2
2 Unsupported DS Digest Type Section 4.3
3 Stale Answer Section 4.4 and [RFC8767]
4 Forged Answer Section 4.5
5 DNSSEC Indeterminate Section 4.6
6 DNSSEC Bogus Section 4.7
7 Signature Expired Section 4.8
8 Signature Not Yet Valid Section 4.9
9 DNSKEY Missing Section 4.10
10 RRSIGs Missing Section 4.11
11 No Zone Key Bit Set Section 4.12
12 NSEC Missing Section 4.13
13 Cached Error Section 4.14
14 Not Ready Section 4.15
15 Blocked Section 4.16
16 Censored Section 4.17
17 Filtered Section 4.18
18 Prohibited Section 4.19
19 Stale NXDomain Answer Section 4.20
20 Not Authoritative Section 4.21
21 Not Supported Section 4.22
22 No Reachable Authority Section 4.23
23 Network Error Section 4.24
24 Invalid Data Section 4.25
25-49151 Unassigned
49152-65535 Reserved for Private Use Section 5.2

RFC6891: Extension Mechanisms for DNS (EDNS(0))

こんにちは、まれいんです。

この記事は ひとりRFCの旅 Advent Calender 3日目の記事です。

qiita.com

2013年4月に出たEDNS0についてのRFC、RFC6891を読んでいきます。 ちょうど先日のRFC2671をUpdateするRFCです。

続きを読む

RFC2671: Extension Mechanisms for DNS (EDNS0)

こんにちは、まれいんです。

この記事は ひとりRFCの旅 Advent Calender 2日目の記事です。

qiita.com

今日は1999年8月に出たDNSにおける拡張オプションのようなものである、EDNS0を定めたRFC2671を読んでいきます。 多分普通にdigコマンドを叩くと使われているので、皆さんも知らず知らずのうちに使っているかと思います。

記事を書いた後に気付いたのですが、JPNICさんが日本語訳を公開しているのでみなさんはこちらを読んでみるとよいと思います。

$ dig maleic1618.hatenablog.jp @8.8.8.8

; <<>> DiG 9.16.8-Debian <<>> maleic1618.hatenablog.jp @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19383
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512  <-- これ!
;; QUESTION SECTION:
;maleic1618.hatenablog.jp.      IN      A
...

RFC 2671 - Extension Mechanisms for DNS (EDNS0)

現在はこのRFCはObsoletedとなっており、RFC6891で更新されていますが、歴史を追いかける意味でいったん読んでみます。

続きを読む