YOKOHEI.COM

YOKOHEI.COM

›DNS Basics

DNS Basics

  • DNS 基礎
  • DNS と OS
  • TCP フォールバック
  • resolv.conf

DNS Misc

  • ゾーン転送
  • クラスレス逆引き
  • trace option
  • Ranking data (RFC 2181)

DNS 基礎

DNS の基本動作

名前解決に至るまで

前提

  • www.yokohei.com. の名前解決を想定します
  • 以下の例は DNSSEC および QNAME minimisation が 無効 のときの話です
  • QNAME minimisation の詳細はいつか書きます…
  • QNAME minimisation に限らず「フルサービスリゾルバ」や「権威 DNS サーバ」の実装によって異なります

本題

  • 1. nsswitch
    多くの場合、クライアント (アプリケーションなど) は /etc/nsswitch.conf をまず見て名前解決の際の優先順位を決めている。
    ----
    …
    hosts: files dns
    …
    ----
    上記のようなものであれば、 hosts ファイルを見たあと resolv.conf を見る。
    具体的には /etc/hosts を見たあと /etc/resolv.conf を見る。
    なので、一般的には hosts ファイルの内容が優先的に利用される。

※ この辺の話は、次ページの DNS と OS できちんと触れる予定。

  • 2. Client から Resolver へ
    この時、 Recursive なクエリ要求であるため、 RD (Recursion Desired) ビットが立ちます。
    Answer セクションや Authority セクションには何も入りません。

  • 3. Resolver から root の Name Server へ
    www.yokohei.com. を Question としたクエリを root の Name Server に聞きます。
    この時 Recursive である必要はないため RD は立ちません。

  • 4. root からの応答
    root は www.yokohei.com. を知らないので、それらを知っている com. の NS の情報を Authority セクションに入れて返します。
    a~m.gtld-servers.net. が Authority セクションに入ります。
    答えは知らないので Answer セクションに値は入りません。 RCODE=0 で NOERROR, NOANSWER です。
    この時の応答は権威がないので AA ビットは立ちません。

  • 5. Resolver から com. の Name Server へ
    www.yokohei.com. を Question としたクエリを com. の Name Server に聞きます。(3. と同様)
    この時 Recursive である必要はないため RD は立ちません。

  • 6. com. からの応答
    com は www.yokohei.com. を知らないので、それらを知っている yokohei.com. の NS の情報を Authority セクションに入れて返します。 ns-xxx.awsdns-yyy.com. (.net/.org/.co.uk) が Authority セクションに入ります。
    答えは知らないので Answer セクションに値は入りません。 RCODE=0 で NOERROR, NOANSWER です。
    この時の応答は権威がないので AA ビットは立ちません。

  • 7. Resolver から yokohei.com. の Name Server へ
    www.yokohei.com. を Question としたクエリを yokohei.com. の Name Server に聞きます。(3. および 5. と同様)
    この時 Recursive である必要はないため RD は立ちません。

  • 8. yokohei.com. からの応答
    yokohei.com. ゾーンは www.yokohei.com. を知っているのでその情報を返します。
    Answer セクションに値が入り、また権威ある応答のため AA が立ちます。
    情報を知っている権威サーバについても Authority セクションに入れて返されます。

  • 9. Resolver から Client への応答
    Recursive クエリが終了したので情報をクライアントに返します。
    Answer セクションに値を入れて返します。 Authority セクションに値は入りません。
    RD および RA が立ちます。

補足

  • NS が Authority Secition に入っているとき、 Additional Section に NS の IP アドレスが入れて返される場合が多いです
  • NS の名前解決も行う必要がある(場合もある)点に注意してください (上記では省略してます)
  • DNSSEC が有効になっていれば AD ビットや CD ビットの話が出てきます
  • QNAME minimisation が有効になっていれば Question が変わったり AA の挙動が変わったりします
  • ミスがあればお気軽にご指摘下さい

よく使う RCODE

IANA のページ に載っているが、主要なものだけでもまとめておく。

  • NoError
    RCODE=0
    聞いた名前に対して 1 つ以上の答えがあるとき。
    タイプは問わない。

  • FormErr
    RCODE=1
    プロトコルフォーマットがおかしいとき。
    EDNS0 では、複数 OPT が含まれていたりするとこれを返す。

  • ServFail
    RCODE=2
    どこかが timeout になったり、 DNSSEC の検証が失敗した場合のエラー。

  • NXDomain
    RCODE=3
    聞いた名前を持ってない時のエラー。

  • Refused
    RCODE=5
    何らかのポリシーにより拒否された旨のエラー。
    allow ルールで IP が絞られていたり、関係ないゾーンに関係ない名前を聞いたりしたときに発生する。

  • BADVERS
    RCODE=16
    EDNS0 において実装されてないバージョンでのリクエストが来たときにこれを返す。

DNS と OS →
▼ Codes ▼
LeetCodeGitHub
▼ Profile ▼
LinkedInFlickr
▼ Logo made with DesignEvo ▼
DesignEvo
Copyright © 2020 Kohei Yoshida