初心者のためのDNS運用入門- トラブル事例とその解決のポイント 2014年6月26日
DNS Summer Days 2014
株式会社日本レジストリサービス（JPRS）
水野 貴史

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

1講師自己紹介• 氏名：水野 貴史（みずの たかふみ）• 生年月日：1988年3月3日（26歳）• 所属：株式会社日本レジストリサービス（JPRS） システム部• Unix歴：9年目（FreeBSD、OS Xを中心に）• 職歴：– 2013年4月

JPRS入社– 2013年4月～6月

新人研修– 2013年7月

DNS Summer Days 2013講師– 2013年8月～

レジストリ基盤開発– 2013年11月

Internet Week 2013 DNS DAY 「JP DNS UPDATE」

 2014年6月

DNS Summer Days 2014講師

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

2本日の内容1. DNSの基礎知識とトラブルシューティングの基本– DNSの全体構成– 区別すべき2種類のDNSサーバー/問い合わせ– トラブルシューティングの基本

2. 道具の使い方– コマンドラインツールの使い方– 便利なWebサービスの紹介

3. よくあるトラブル事例とトラブルシューティング– 設定がうまくいかない– 名前が引けない– 名前を引くのに時間がかかる
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

3ポイントと想定する対象者• ツールの紹介と使い方– コマンドラインツールとWebサービス
 トラブルシューティングについて、具体例を挙げながら解説• 対象– DNSサーバーをこれから運用される方– DNSサーバーの運用を始めて間もない初学技術者の方
そして、– 初学技術者ではない方々の知識のおさらい、再確認– 社内セミナーの資料としても活用可能なものとすることをめざします
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

4まずは、おさらいとして……

1. DNSの基礎知識とトラブルシューティングの基本

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

5区別すべき2種類のDNSサーバ• DNSには– 階層構造を構成する（分散管理）– 階層構造をたどる（名前解決）という 2つの役割 がある
クエリ
応答• 「DNSサーバー」にはそれぞれの役割を担当する

権威DNSサーバー

1. 権威DNSサーバー


ルート
サーバー

キャッシュ
DNSサーバー

階層構造を構成

2. キャッシュDNSサーバー


JP
サーバー

kr
サーバー

……

階層構造をたどるの 2種類 が存在する

net
サーバー

クライアントexample.jp
サーバー

example2.jp
サーバー

example3.jp
サーバー

……
ユーザー
Copyright © 2014 株式会社日本レジストリサービス

6

DNSの全体構成

権威DNSサーバー

ルート

キャッシュ
DNSサーバー

TLD（.jp, .net,.com……）クライアント
SLD
（各組織）

クエリ
応答
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

7区別すべき2種類のクエリ権威DNSサーバー
ルート

キャッシュ
DNSサーバー

TLD（.jp, .net,.com……）クライアント
SLD
（各組織）

クエリ
応答
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

8区別すべき2種類のクエリ• クライアントからキャッシュDNSサーバーへのクエリ• キャッシュDNSサーバーから権威DNSサーバーへのクエリ この2種類のクエリを明確に区別することがすべての基本– DNSの動作の理解– トラブルシューティング
キャッシュ
DNSサーバー

クエリ
応答

クライアント

権威DNSサーバー
ルート

TLD（.jp, .net,.com…）

SLD（各組織）Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

9区別すべき2種類のクエリ
権威DNSサーバー

実行

実際に名前引くよ!

ルート

キャッシュ
DNSサーバー

TLD（.jp, .net,.com…）

依頼

名前解決
おねがい！

SLD（各組織）クエリ

2つの違い･･･ビットのオン・オフ

応答 区別しないと、調査の際、問題の切り分けができないどの部分が問題か？どの部分を調べているのか？
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

10

再帰的クエリ（recursive query）
Header

RD=1

Header

RD=0

Question

www.example.jp/A

Question

www.example.jp/A

クライアント

再帰的クエリキャッシュDNS
サーバー

非再帰的クエリ

権威DNS
サーバー

• クライアントからキャッシュDNSサーバーへのクエリ• クエリ中のRDビットがセットされている• クライアントはRDビットをセットしたクエリを送信することにより、
キャッシュDNSサーバーに階層構造をたどらせる• これを名前解決要求というCopyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

11非再帰的クエリ（non-recursive query）
Header

RD=1

Header

RD=0

Question

www.example.jp/A

Question

www.example.jp/A

クライアント

再帰的クエリキャッシュDNS
サーバー

非再帰的クエリ

権威DNS
サーバー

• キャッシュDNSサーバーから権威DNSサーバーへのクエリ– クエリ中のRDビットがセットされていない• クライアントからの名前解決要求によって発生する• 再帰的クエリと同じ内容がRDビットをクリアした上で送信される

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

12区別すべき2種類のクエリ

権威DNSサーバー

非再帰的クエリルート

キャッシュ
DNSサーバー

TLD（.jp, .net,.com……）クライアント
SLD
（各組織）

クエリ
応答

再帰的クエリ
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

13

DNSの基礎知識まとめ• 権威DNSサーバー– DNSサーバーの階層構造を構成– 通常、クライアントは直接利用しない• キャッシュDNSサーバー– クライアントが直接利用する– 名前解決の結果をしばらく保持する• キャッシュがあると早い（良く使う名前ほどキャッシュされる）– クライアントからのクエリを受ける• 再帰的クエリ / RDビット = 1– キャッシュにあれば、そこから応答を返す– キャッシュになければ、非再帰クエリを発行して、その結果を返す• 非再帰的クエリ / RDビット = 0
 再帰的クエリのRDビットをクリアし、同じ内容にて非再帰クエリを発行する

Copyright © 2014 株式会社日本レジストリサービス

14

キャッシュDNSサーバーにキャッシュがない場合
クエリ
応答

権威DNSサーバー

ルート

キャッシュ
DNSサーバー

JP
サーバー

example.jpのキャッシュなし

TLD（.jp, .net,.com……）

SLD

www.example.jp/A（各組織）

example.jp
サーバー

クライアントから、キャッシュＤＮＳ
サーバーへ問い合わせが行われ、再帰検索が行われる

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

15

キャッシュDNSサーバーにキャッシュがある場合（１）
クエリ
応答

権威DNSサーバー

ルート

キャッシュ
DNSサーバー
キャッシュ
JP
サーバー

example.jpのキャッシュあり

TLD（.jp, .net,.com……）

SLD

www.example.jp/A（各組織）

example.jp
サーバー

クライアントから、キャッシュＤＮＳ
サーバーへ問い合わせが行われ、キャッシュを元に応答が返される

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

16

キャッシュDNSサーバーにキャッシュがある場合（2）
クエリ
応答

権威DNSサーバー

ルート

キャッシュ
DNSサーバーキャッシュ

example.jp のキャッシュはあるけど、
www.example.jp のキャッシュはないなあ
JP
サーバー

TLD
（.jp, .net,.com……）

SLD

www2.example.jp/A（各組織）

example.jp
サーバー

example.jp のキャッシュはあるが、www.example.jp のキャッシュなし。
⇒ example.jp に問い合わせ

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

17

トラブルシューティングの基本• Where? - 原因はどこか？
– 手元のキャッシュDNSサーバーか？
– 権威DNSサーバーのいずれかか？
– 各DNSサーバーまでのネットワークか？

• How? - どこをどう調べればよいか？
– どんなツールやWebサービスを使えばよいか？

• 調査の際には「再帰的クエリ」と「非再帰的クエリ」を明確に区別すべき– 調査対象がキャッシュDNSサーバーか？権威DNSサーバーか？

• それぞれのサーバーに合った形での調査が必要– dig/drillコマンドのオプションなど → 以降で詳しく説明します
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

18

トラブルシューティングの心構え• キャッシュDNSサーバーの気持ちになって考える– 権威DNSサーバーからの応答の意味を考える 権威ＤＮＳサーバの応答を読み解く必要がある• その道具がdig/drill 全体を俯瞰するのには向かない• 目的に合った道具を選ぶ– キャッシュDNSサーバーの気持ちになる• dig/drill– 全体を俯瞰する• Squish.net DNS traversal checker• dnscheck.jp

Copyright © 2014 株式会社日本レジストリサービス

19

トラブル解決に役立つ

2. 道具の使い方

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

20

調査の基本―どのコマンドを使うべきか？
• DNSサーバーにクエリを送り、調査する– リクエストに関するパラメーターを細かく調整して、応答を調査する– 基本はコマンドラインツール• nslookup コマンド……は使うべきでない– クエリの細かいパラメーターが指定不可– 応答のフラグやセクションの情報を得ることができない• では、何を使うか？
– digコマンド、drillコマンド

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

21

nslookupとdigの違い• nslookup• dig$ nslookup jprs.co.jp
Server:192.0.2.12
Address:
192.0.2.12 #53
Non-authoritative answer:
Name:jprs.co.jp
Address: 202.11.16.167

情報量の差$ dig jprs.co.jp; <<>> DiG 9.9.2-P2 <<>> jprs.co.jp;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41096;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 6;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:;jprs.co.jp.
IN

A;; ANSWER SECTION:
jprs.co.jp.

13883

IN

A

202.11.16.167;; AUTHORITY SECTION:
jprs.co.jp.
jprs.co.jp.
jprs.co.jp.

61085
61085
61085

IN
IN
IN

NS
NS
NS

ns2.jprs.co.jp.
ns1.jprs.co.jp.
ns3.jprs.co.jp.

;; ADDITIONAL SECTION:
ns1.jprs.co.jp.
ns1.jprs.co.jp.
ns2.jprs.co.jp.
ns2.jprs.co.jp.
ns3.jprs.co.jp.

26393
74734
71604
53612
73366

IN
IN
IN
IN
IN

A
AAAA
A
AAAA
A

202.11.16.49
2001:df0:8::a153
202.11.16.59
2001:df0:8::a253
61.200.83.204;; Query time: 1 msec;; SERVER: 192.0.2.12#53(203.0.113.12);; WHEN: Wed Jul 17 21:08:42 2013;; MSG SIZE rcvd: 213

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

22

digコマンドとdrillコマンド• dig コマンド
– BIND 9 に付属するコマンド– 実行例：• $ dig␣+dnssec␣@192.0.2.53␣example.jp.␣SOA• drill コマンド
– Unboundで用いられているライブラリ「ldns」に付属するコマンド– 実行例：• $ drill␣-D␣example.jp.␣@192.0.2.53␣SOA

今日はdigコマンドを用いた解説をします
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

23

drillとdig の違い• drill

• dig

drill

$
@localhost jprs.co.jp;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 54357;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 5;; QUESTION SECTION:;; jprs.co.jp. IN
A;; ANSWER SECTION:
jprs.co.jp.
86205

IN

A

202.11.16.167;; AUTHORITY SECTION:
jprs.co.jp.
86205
jprs.co.jp.
86205
jprs.co.jp.
86205

IN
IN
IN

NS
NS
NS

ns3.jprs.co.jp.
ns1.jprs.co.jp.
ns2.jprs.co.jp.

;; ADDITIONAL SECTION:
ns1.jprs.co.jp. 86205
ns1.jprs.co.jp. 86205
ns2.jprs.co.jp. 86205
ns2.jprs.co.jp. 86205
ns3.jprs.co.jp. 86205

IN
IN
IN
IN
IN

A
AAAA
A
AAAA
A

202.11.16.49
2001:df0:8::a153
202.11.16.59
2001:df0:8::a253
61.200.83.204;; Query time: 0 msec;; SERVER: 127.0.0.1;; WHEN: Fri Jun 20 01:36:22 2014;; MSG SIZE rcvd: 202

dig$@localhost jprs.co.jp; <<>> DiG 9.10.0-P1 <<>> +noedns @localhost jprs.co.jp; (2 servers found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63069;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 5;; QUESTION SECTION:;jprs.co.jp.

IN

A;; ANSWER SECTION:
jprs.co.jp.

86374

IN

A

202.11.16.167;; AUTHORITY SECTION:
jprs.co.jp.
jprs.co.jp.
jprs.co.jp.

86373
86373
86373

IN
IN
IN

NS
NS
NS

ns2.jprs.co.jp.
ns1.jprs.co.jp.
ns3.jprs.co.jp.

;; ADDITIONAL SECTION:
ns1.jprs.co.jp.
ns1.jprs.co.jp.
ns2.jprs.co.jp.
ns2.jprs.co.jp.
ns3.jprs.co.jp.

86373
86373
86373
86373
86373

IN
IN
IN
IN
IN

A
AAAA
A
AAAA
A

202.11.16.49
2001:df0:8::a153
202.11.16.59
2001:df0:8::a253
61.200.83.204;; Query time: 0 msec;; SERVER: 127.0.0.1#53(127.0.0.1);; WHEN: 火 6月 24 06:12:09 JST 2014;; MSG SIZE rcvd: 202

Copyright © 2014 株式会社日本レジストリサービス

24

dig コマンドが使える環境• Unix系OS– ほとんどの環境で標準添付• FreeBSD 10以降では、ベースシステムから削除→ drill(1)コマンドを用いるか、ports/pkg からインストール(dns/bind-tools)– OS Xにも標準添付• Windows– Windows版BIND 9のバイナリキットに含まれている– 開発元のISCが無償で公開

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

25

dig コマンド – 使い方$ dig␣+rec␣@192.0.2.53␣example.jp.␣SOA
オプション

DNSサーバー

対象ドメイン名

クエリタイプ• 重要なオプション– RD bit• オン = 階層構造をたどって= +recurse

または +rec• オフ = 持ってる情報を教えて = +norecurse または +norec• RD bit = Recursion Desired bit– サーバーに対して「 DNSの階層構造をたどって！」と伝えるために、クライアント側でセット– digコマンドやdrillコマンドではデフォルトでオン– 権威DNSサーバーに対してリクエストを送信する（権威DNSサーバーの動作を調べる）場合には、オフにしておくこと
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

26

RD bit と +norec の関係
非再帰的クエリ

権威DNSサーバー• RD bit オフ• +norec オプション

ルート

キャッシュ
DNSサーバー

TLD（.jp, .net,.com……）クライアント
SLD
（各組織）

クエリ
応答

再帰的クエリ• RD bit オン• +norec なし

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

27

dig コマンド – +rec / +norec の使いどころ（1）• 顧客や組織内の利用者から「引けない！」と連絡が来たとき• キャッシュDNSサーバーの状況を調査する際に使用– +rec をつけての調査から開始– クライアントとキャッシュDNSサーバーとの通信は問題なさそうなら……
 権威DNSサーバか、その経路がおかしい？

+norec で各権威DNSサーバーの
調査を開始
キャッシュ

権威DNSサーバー
ルート

クエリ
応答

DNSサーバーここから調査開始

名前が引け
ないよ！

Copyright © 2014 株式会社日本レジストリサービス

TLD（.jp, .net,.com……）
SLD
（各組織）

28

dig コマンド – +rec / +norec の使いどころ（2）• 顧客から「登録したドメイン名が利用できない」と連絡がきたとき• 権威DNSサーバー の設定不具合？
– +norec をつけて、権威DNSサーバーから調査開始– 特定のキャッシュDNSサーバーだけがおかしい？
 +rec をつけて、該当のキャッシュDNSサーバーを調査••

どちらを（どこを）どう調べているのか
を意識！

ルート

キャッシュ
DNSサーバー

クエリ
応答

TLD
（.jp, .net,.com……）

example.jp
登録したのに使えない！

ここから調査開始

権威DNSサーバー

SLD
（各組織）

example.jp
サーバー

Copyright © 2014 株式会社日本レジストリサービス29[補足] ネガティブキャッシュとは• 顧客から「登録したドメイン名が利用できない」と連絡がきたとき• 顧客が利用するキャッシュDNSサーバー以外は名前が引ける
ネガティブキャッシュが原因かも？
• ネガティブキャッシュとは？
– 「そのドメイン名は存在しない」という情報のキャッシュ– ドメイン名の登録設定（上位ゾーンからの委譲の設定）が行われる前に名前を引こうとすると……

※ RFC2308 - Negative Caching of DNS Queries (DNS NCACHE) (DNSクエリのネガティブキャッシュ）Copyright © 2014 株式会社日本レジストリサービス

30

dig コマンド – 嬉しいオプション +multi• +multi (+multiline)% dig +dnssec jprs.co.jp SOA;; ANSWER SECTION:
jprs.co.jp.
85892
IN
SOA
ns1.jprs.co.jp. postmaster.jprs.co.jp. 1403054817 3600 900 1814400 900
jprs.co.jp.
85892
IN
RRSIG
SOA 8 3 86400 20140718002657 2014
0618002657 18384 jprs.co.jp. N+shK12/CcvmzZEdTJsZF3jjILljxyQgX0Ztf9STW0mNf5KR4/9E
qW/r KmDjeAjJ4nDw10AJaYaS1Y0GYsQtOWxsH5KXdVs2sVkiGFyeTECoSUu9BT4OEPLdsQY5xJn3Tr0
5Ftrh4PRnHjnLAa3YsBjZP0x90LWHiMafQqsu d80=

SOAを読みやすくする% dig +dnssec +multi jprs.co.jp SOA;; ANSWER SECTION:
jprs.co.jp.
85620 IN SOA ns1.jprs.co.jp. postmaster.jprs.co.jp. (1403054817 ; serial
3600; refresh (1 hour)
900; retry (15 minutes)
1814400; expire (3 weeks)
900; minimum (15 minutes))
jprs.co.jp.
85620 IN RRSIG SOA 8 3 86400 (20140718002657 20140618002657 18384 jprs.co.jp.
N+shK12/CcvmzZEdTJsZF3jjILljxyQgX0Ztf9STW0mN
f5KR4/9EqW/rKmDjeAjJ4nDw10AJaYaS1Y0GYsQtOWxs
H5KXdVs2sVkiGFyeTECoSUu9BT4OEPLdsQY5xJn3Tr05
Ftrh4PRnHjnLAa3YsBjZP0x90LWHiMafQqsud80= )Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

31

dig コマンド – その他のオプション• +vc– 初めからTCPで問い合わせる– Tcp fallback のテスト用に利用• +edns– edns0（後述） を有効にする– BIND 9.9からデフォルトでon– +noedns で9.8以前と同じ動作に
その他多数オプションあり。
$ man 1 dig
で確認！
+multi のように、常に設定しておきたいオプションは、ホームディレクトリ
に”.digrc”をCopyright © 2014 株式会社日本レジストリサービス

32

dig コマンド – 出力の読み方
特に注目$ dig +norec @ns1.jprs.jp jprs.jp; <<>> DiG 9.9.2-P2 <<>> +norec @ns1.jprs.jp jprs.jp; (2 servers found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34174;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 5;; QUESTION SECTION:;jprs.jp.

IN

A

ヘッダー
Question;; ANSWER SECTION:
jprs.jp.

86400

IN

A

202.11.16.167

Answer;; AUTHORITY SECTION:
jprs.jp.
jprs.jp.
jprs.jp.

86400
86400
86400

IN
IN
IN

NS
NS
NS

ns2.jprs.jp.
ns3.jprs.jp.
ns1.jprs.jp.

Authority;; ADDITIONAL SECTION:
ns1.jprs.jp.
ns1.jprs.jp.
ns2.jprs.jp.
ns2.jprs.jp.
ns3.jprs.jp.

86400
86400
86400
86400
86400

IN
IN
IN
IN
IN

A
AAAA
A
AAAA
A

202.11.16.49
2001:df0:8::a153
202.11.16.59
2001:df0:8::a253
61.200.83.204;; Query time: 1 msec;; SERVER: 203.0.113.12#53(203.0.113.12);; WHEN: Thu May 02 15:20:20 2013;; MSG SIZE rcvd: 199

Additional

応答時間、サーバーのIPアドレス、サイズなど

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

33

dig コマンド – 出力の読み方 （ヘッダー）(1/2);; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34174;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 5• ヘッダの内容– 各セクションに関する情報やステータス、フラグなどを格納• 主な status （RCODE: 応答コード）– NOERROR

正常な応答（該当するタイプがない場合も含む）– FORMERR

DNSメッセージのフォーマットが不正– SERVFAIL

DNSサーバー側の異常†1– NXDOMAIN

リクエストされた名前が存在しない– REFUSED

リクエストが拒否された– NXRRSET

存在すべきレコードが存在しない†2†1 DNSSEC 検証エラーや、全ての権威DNSサーバーが応答しない場合にも出力される†2 ダイナミックアップデートの際、返りうるエラー
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

34

dig コマンド – 出力の読み方 （ヘッダー）(2/2);; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34174;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 5•

注目すべき主な flags （ヘッダ等に含まれるビット）– qr: 応答であることを示す（Query / Response)• dig/drill コマンドの出力（応答）では、通常オン– aa: 権威ある応答であることを示す(Authoritative Answer)• 通常、問い合わせたゾーンの権威DNSサーバーからの応答はオン• キャッシュDNSサーバーからの応答や、他のDNSサーバーに委任していることを示す応答ではオフ– ra: 再帰検索要求が処理可能なことを示す（Recursion Available)• 通常、キャッシュDNSサーバーからの応答ではオン• キャッシュDNSサーバーと、権威DNSサーバーの分離ができていない（オープンリゾルバーである可能性がある）– tc: 応答の一部が切り捨てられたことを示す（TrunCation）• TCPに切り替えて（TCPフォールバック）再度問い合わせる• digコマンドは自動的にTCPフォールバックするため、通常は表示されない（「+ignore オプション」で抑制できる）
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

35

dig コマンド – 出力の読み方 （Question）;; QUESTION SECTION:;jprs.jp.

IN

A• Question セクションの内容– 問い合わせた内容（名前、型）がそのままコピーされている$ dig +norec @ns1.jprs.jp jprs.jp

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

36

dig コマンド – 出力の読み方 （Answer）;; ANSWER SECTION:
jprs.jp.

86400

IN

A

202.11.16.167• Answerセクション– 問い合わせた内容に対応するリソースレコードセット（RRSet）が格納される• RRSET : その名前に存在する当該リソースレコードのセット– 問い合わせた名前 / タイプが存在しない場合や、他のDNSサーバーにゾーンが委任されている場合は空Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

37

dig コマンド – 出力の読み方 （Authority）;; AUTHORITY SECTION:
jprs.jp.
jprs.jp.
jprs.jp.

86400
86400
86400

IN
IN
IN

NS
NS
NS

ns2.jprs.jp.
ns3.jprs.jp.
ns1.jprs.jp.

• Authorityセクション– 権威を持っているDNSサーバーの情報が格納される– 問い合わせた名前 / タイプが存在しないことを示す場合、
SOA RRが格納される– 委任応答の場合、委任先の権威DNSサーバーのホスト名（NS）が格納される

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

38

dig コマンド – 出力の読み方 （Additional）;; ADDITIONAL SECTION:
ns1.jprs.jp.
ns1.jprs.jp.
ns2.jprs.jp.
ns2.jprs.jp.
ns3.jprs.jp.

86400
86400
86400
86400
86400

IN
IN
IN
IN
IN

A
AAAA
A
AAAA
A

202.11.16.49
2001:df0:8::a153
202.11.16.59
2001:df0:8::a253
61.200.83.204• Additionalセクション– 付加的な情報が格納される
Authorityセクションに含まれるDNSサーバーのA、AAAA RRなど
– 委任応答で委任先が内部名の場合、グルーレコードと呼ばれる

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

39

dig コマンド – 出力例（１）$ dig +norec @ns1.jprs.jp jprs.jp PTR; <<>> DiG 9.9.2-P2 <<>> +norec @ns1.jprs.jp jprs.jp PTR; (2 servers found);; global options: +cmd
（1）ステータスは NOERROR;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15556;; flags: qr aa; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0;; QUESTION SECTION:;jprs.jp.

IN

PTR

IN

SOA

ヘッダー
Question（2）Answerセクションなし;; AUTHORITY SECTION:
jprs.jp.

86400（3）AuthorityセクションにSOAレコード;; Query time: 1 msec;; SERVER: 203.0.113.12#53(203.0.113.12);; WHEN: Thu May 02 15:20:20 2013;; MSG SIZE rcvd: 199

ns1.jprs.co.jp. ¥postmaster.jprs.co.jp. ¥1402803013 3600 900 ¥
1814400 86400

Authority

応答時間、サーバーのIPアドレス、サイズなど

問い合わせた名前は存在するが、タイプが存在しないケース※ （3）のSOAレコードのminimumはネガティブキャッシュのTTLとして扱われる
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

40

dig コマンド – 出力例（2）$ dig +norec @ns1.jprs.jp nameerror.jprs.jp; <<>> DiG 9.9.2-P2 <<>> +norec @ns1.jprs.jp nameerror.jprs.jp; (2 servers found);; global options: +cmd
（1）ステータスは NXDOMAIN;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 32704;; flags: qr aa; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0;; QUESTION SECTION:;nameerror.jprs.jp.

IN

A

IN

SOA

ヘッダー
Question（2）Answerセクションなし;; AUTHORITY SECTION:
jprs.jp.

86400（3）AuthorityセクションにSOAレコード;; Query time: 1 msec;; SERVER: 203.0.113.12#53(203.0.113.12);; WHEN: Thu May 02 15:20:20 2013;; MSG SIZE rcvd: 199

ns1.jprs.co.jp. ¥postmaster.jprs.co.jp. ¥1402803013 3600 900 ¥
1814400 86400

Authority

応答時間、サーバーのIPアドレス、サイズなど

問い合わせた名前自体が存在しないケース※ （3）のSOAレコードのminimumはネガティブキャッシュのTTLとして扱われる
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

41

dig コマンド – 結果が違う？
% dig @localhost jprs.co.jp% dig @localhost jprs.co.jp; <<>> DiG 9.10.0-P1 <<>> @localhost jprs.co.jp; (2 servers found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19999;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 6; <<>> DiG 9.10.0-P1 <<>> @localhost jprs.co.jp; (2 servers found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27868;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:;jprs.co.jp.
IN

A;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:;jprs.co.jp.
IN

A;; ANSWER SECTION:
jprs.co.jp.

86400

IN

A

202.11.16.167;; ANSWER SECTION:
jprs.co.jp.

A;; AUTHORITY SECTION:
jprs.co.jp.
jprs.co.jp.
jprs.co.jp.

86400
86400
86400

IN
IN
IN

NS
NS
NS

ns1.jprs.co.jp.
ns2.jprs.co.jp.
ns3.jprs.co.jp.

;; Query time: 238 msec;; SERVER: 127.0.0.1#53(127.0.0.1);; WHEN: Fri Jun 20 00:49:54 JST 2014;; MSG SIZE rcvd: 55;; ADDITIONAL SECTION:
ns1.jprs.co.jp.
ns1.jprs.co.jp.
ns2.jprs.co.jp.
ns2.jprs.co.jp.
ns3.jprs.co.jp.

86400
86400
86400
86400
86400

IN
IN
IN
IN
IN

A
AAAA
A
AAAA
A

202.11.16.49
2001:df0:8::a153
202.11.16.59
2001:df0:8::a253
61.200.83.204;; Query time: 934 msec;; SERVER: 127.0.0.1#53(127.0.0.1);; WHEN: Fri Jun 20 00:40:21 JST 2014;; MSG SIZE rcvd: 213

86400

IN

202.11.16.167

AUTHORITY SECTION
ADDITIONAL SECTION
がない

キャッシュDNSのサーバーの実装、設定による※ 右の例はキャッシュDNSサーバーにBIND 9を用い、
minimal-responses オプションを有効にした場合
Copyright © 2014 株式会社日本レジストリサービス

42

調査に使えるWebサービス• DNSの設定などを、GUIで可視化・チェック可能
ここでは2種類のツールを紹介します（この他にもあります）

 Squish.net DNS traversal checker（個人提供：James氏）– DNS可視化ツール– 応答のおかしいDNSサーバーなどを調べることが可能

 dnscheck.jp（JPRS提供）– DNSの設定チェックツール– 今現在の設定の確認– これからしようと思っている設定 を調べることが可能
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

43

調査に使えるWebサービス – Squish• Squish.net DNS traversal checker– http://dns.squish.net/– ルートサーバーから再帰的に名前解決した結果を、視覚的に表示– 設定に問題があるサーバを調査可能• サーバーによって問い合わせ結果が違う• 権威サーバーなのに再帰検索可能

Copyright © 2014 株式会社日本レジストリサービス

44

dnscheck.jpの使用例「jprs.jp」の出力結果

Copyright © 2014 株式会社日本レジストリサービス

45

トラブルシューティングの前に……

3. トラブルを事前回避！
問題を起こさないための設定

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

46

トラブル事前回避• トラブル発生！
– 対処！解決！問題なし！

• ちょっと待って– そのトラブル、事前に防げたのでは？
– 防げなくても、最小限に留められていたのでは？

 問題が発生しにくい設定・お作法
 問題が起きても、被害を最小限に食い止める設定、お作法

Copyright © 2014 株式会社日本レジストリサービス

47

トラブル事前回避 – 設定を事前にチェック• named-checkconf– named.conf の構文チェック– $ named-checkconf named設定ファイル名• named-checkzone– $ named-checkzone ゾーン名 ゾーンファイル名• “)”や”;”の抜けなどの、文法チェック用– シリアル番号の上げ忘れ（後述）や、ホスト名末尾の”.”付け忘れ（後述）などはチェックしてくれない

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

48

トラブル事前回避 – サーバーの分離とアクセス制限• キャッシュDNSサーバーと権威DNSサーバーの分離– 「ドメイン名の浸透問題」の原因になるかも？
– 「DNSリフレクター攻撃」の加害者になるかも？
– 「DNSキャッシュポイズニング」されるかも？

分離前

権威
DNSサーバー

外部のキャッシュ
DNSサーバー

外部
ネットワークキャッシュ
DNSサーバー

分離後

利用者

組織内
ネットワーク分離しましょう権威
DNSサーバー

外部のキャッシュ
DNSサーバー

外部
ネットワークCopyright © 2014 株式会社日本レジストリサービス

キャッシュ
DNSサーバー

利用者

組織内
ネットワーク49

DNSキャッシュポイズニング？DNSリフレクター攻撃？
• DNSキャッシュポイズニング– 偽のDNS情報をキャッシュとして蓄積させる⇒ フィッシングサイトなどへ誘導– ■権威／キャッシュDNSサーバーの兼用によるDNSポイズニングの危険性についてhttp://jprs.jp/tech/security/2012-07-04-risk-of-auth-and-recurse.html• DNSリフレクター攻撃– 問い合わせパケットサイズよりも、応答パケットサイズが大きくなるDNS
サーバーの特性を利用した攻撃手⇒ 被害者ではなく、加害者になる可能性がある– ■技術解説：「DNS Reflector Attacks（DNSリフレクター攻撃）」について
http://jprs.jp/tech/notice/2013-04-18-reflector-attacks.html

Copyright © 2014 株式会社日本レジストリサービス

50

困った！どうしてこうなる？

3.よくあるトラブル事例とトラブルシューティング

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

51

今日紹介するトラブル事例
A) 設定がうまくいかない・間違えた
1. ゾーン転送がうまくいかない
1. マスタサーバーにDNSが稼動していない
2. マスタサーバー側のファイヤー
ウォールでブロックされている場
合3. マスターサーバー側でゾーン転送が許可されていない場合
2.

ピリオドを付け忘れた

3.

SOAシリアルを上げ忘れた

4.

SOAシリアルを上げ損ねた（シリアルを巻き戻したい）

B) 名前が引けない
1. DNSサーバーがダウンしている
2. CNAMEの循環
3. ふぞろいのzone情報たちC) 名前を引くのに時間が掛かる
1. TCPフォールバック
2. 権威DNSサーバーの一部がダウンしている

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

52

DNSトラブル事例

A. 設定を間違えた

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

53

1. ゾーン転送がうまくいかない• ゾーン転送とは……
MasterSlave

転送

ゾーンデータCopyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

55

1. ゾーン転送がうまくいかない – 正常な例
ゾーン転送
要求

DNS サーバーok!

Masterdig コマンド実行

結果

Slave

$ dig +norec @（Master） example.jp. AXFR
; <<>> DiG 9.8.1-P1 <<>> +norec @（Master） example.jp. AXFR
; (1 server found);; global options: +cmd
example.jp.
10800
IN
SOA
（中略）
example.jp.
10800
IN
NS
ns1.example.jp.
（中略）example.jp.
10800
IN
SOA
ns1.example.jp. root.example.jp. （中略）;; Query time: 1 msec;; SERVER: （Master）#53(（Master）);; WHEN: Fri Jul 12 17:56:17 2013;; XFR size: 31 records (messages 1, bytes 3380)
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

56

1. ゾーン転送がうまくいかない – よくある原因• 原因– TCP 53番ポートがフィルタされている？
– ゾーン転送の設定を間違っている？
– あるいは他の何か？
どう切り分ける……？

• 調査法– dig コマンドを使う– コマンド例• $ dig␣+norec␣@(マスター)␣example.jp␣axfr• スレーブサーバー側で実行！

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

57

1. ゾーン転送がうまくいかない – 調査と具体例
1. マスターサーバーでDNSサーバープロセスが稼動していない場合
ゾーン転送
要求

DNS サーバー

Masterdig コマンド実行

結果

Slave

OS そのものは動作
実行結果例$ dig +norec @(マスター) example.jp axfr;; Connection to 203.0.113.8 #53(203.0.113.8)
for example.jp failed: connection refused.

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

58

1. ゾーン転送がうまくいかない – 調査と具体例
1. マスターサーバーでDNSサーバープロセスが稼動していない場合
ゾーン転送
要求

DNS サーバー

Masterdig コマンド実行

結果

Slave

OS そのものは動作 DNS サーバープロセスを立ち上げ直す 実は気づかないうちに落ちていたのかも……
 必ず原因究明を並行してすすめること
 サーバーのログのチェックなど……
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

59

1. ゾーン転送がうまくいかない – 調査と具体例
2.マスターサーバー側のファイヤーウォールでブロックされている場合
tcp 53block!

ゾーン転送
要求

DNS サーバー

Masterdig コマンド実行

結果

Slave

実行結果例
$ dig +norec @(マスター) example.jp axfr
; <<>> DiG 9.9.2-P2 <<>> +norec @(マスター) example.jp axfr
; (1 server found);; global options: +cmd;; connection timed out; no servers could be reached
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

60

1. ゾーン転送がうまくいかない – 調査と具体例
2.マスターサーバー側のファイヤーウォールでブロックされている場合
tcp 53
ok!

ゾーン転送
要求

DNS サーバー

Masterdig コマンド実行

結果

Slave

実行結果例

 TCP 53番ポートへのアクセスを許可する
 UDP だけの許可かも……？
 そもそもDNSサーバーでは TCP 53番のオープンが必須！
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

61

1. ゾーン転送がうまくいかない – 調査と具体例
3. マスターサーバー側でゾーン転送が許可されていない場合
ゾーン転送
要求

DNS サーバー

Master君は許可していないよ！

dig コマンド実行

結果

Slave

実行結果例
$ dig +norec @(マスター) example.jp axfr
; <<>> DiG 9.9.2-P2 <<>> +norec @(マスター) example.jp axfr
; (1 server found);; global options: +cmd
; Transfer failed.
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

62

1. ゾーン転送がうまくいかない – 調査と具体例
3. マスタサーバー側でゾーン転送が許可されていない場合
ゾーン転送
要求

DNS サーバー

許可します！

masterdig コマンド実行

結果

slave

 ゾーン転送の設定を見直す 許可ホストの設定を間違えているかも……
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

63

2. ピリオドを忘れた – [出題編]$ORIGIN$TTL@

a.example.
86400
IN
SOA

IN
IN
ns1.a.example. IN
ns1.a.example. IN
mail.a.example. IN
mail.a.example. IN
www.a.example. IN
mail.a.example. IN

ns1.a.example.
1047
60480086400
2419200
3600)

root.localhost. (NSMX

ns1.a.example.
10 mail.a.example

A
A
A
AAAA
A
AAAA

192.0.2.54
2001:db8:53::53
192.0.2.57
2001:db8:53::25
192.0.2.58
2001:db8:53::80

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

64

2. ピリオドを忘れた – [回答編]$ORIGIN$TTL@

a.example.
86400
IN
SOA

IN
IN
ns1.a.example. IN
ns1.a.example. IN
mail.a.example. IN
mail.a.example. IN
www.a.example. IN
mail.a.example. IN

ns1.a.example.
1047
60480086400
2419200
3600)

root.localhost. (NSMX

ns1.a.example.
10 mail.a.example.

A
A
A
AAAA
A
AAAA

192.0.2.54
2001:db8:53::53
192.0.2.57
2001:db8:53::25
192.0.2.58
2001:db8:53::80

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

65

2. ピリオドを忘れた – [回答編] ～dig の場合～
$ dig a.example. MX @127.0.0.1; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> a.example. MX @127.0.0.1;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8642;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1;; QUESTION SECTION:;a.example.

mail.a.example.a.example.

IN

MX;; ANSWER SECTION:
a.example.

15

IN

MX

10 mail.a.example.a.example.

;; AUTHORITY SECTION:
a.example.

8

IN

NS

ns1.a.example.

;; ADDITIONAL SECTION:
ns1.a.example.

8

IN

A

192.0.2.54;; Query time: 4 msec;; SERVER: 127.0.0.1#53(127.0.0.1);; WHEN: Thu Jul 18 20:47:26 2013;; MSG SIZE rcvd: 92
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

66

3. SOAのシリアルを上げ忘れた$ORIGIN$TTL@

a.example.
86400
IN
SOA

ns1.example.
2014062001
3600
900
64800
3600
)

root.example.jp. (•マスター / スレーブ を構築している場合、スレーブが情報更新されない•

権威DNSサーバーによって返す応答が違う– ゾーンデータの新しさは、シリアルの値の大小のみによって判断– ゾーン情報を書き換えた後は、$ dig @(スレーブ) domain SOA +norec
を実行⇒ マスターと一致していることを確認！

更新したよ！

情報

情報

新

旧

master(ns1.example.jp)
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

シリアルあがってない。
更新しなくてよいか。

slave(ns2.example.jp)
67

[補足] NOTIFY（変更通知）によるゾーン情報の更新• 権威DNSサーバーを複数設置– ゾーン情報を全て手作業で更新するのは大変！
– 1台をマスターにして、残りのマシンもこれに追従させる
 NOTIFY（変更通知）による zone 情報の更新

Master(ns1.example.jp)

1.変更通知（NOTIFY）

Slave(ns2.example.jp)

外部からは、権威DNSサーバーのプ
ライマリとセカンダリは区別されない。
本スライドでの マスター / スレーブは、
ゾーン転送のときにのみに用いる概念

2. 転送要求（AXFR, IXFR ※)3. ゾーンデータ転送

もし、「シリアルの上げ忘れ」で、スレーブへのゾーン転送が失敗していると……

※ AXFRはゾーンデータを全て転送、IXFR は差分転送
Copyright © 2014 株式会社日本レジストリサービス

68

4. SOAのシリアルを上げ損ねた• シリアルを上げよう– “YYYYMMDDnn”（nn : 連番）だから、”2014062601”……
– “2114062601”にしちゃった• シリアル戻そう！
– ん？シリアルを変更するには加算するしかないのでは……？

シリアル巻き戻し、2回上げテクニックを使う

Copyright © 2014 株式会社日本レジストリサービス

69

4. SOAのシリアルを上げ損ねた – シリアルの巻き戻し• シリアルを2度上げる
1. マスターで「現在の値 + 2^31-1(=2147483647)」をセット、反映•例） 2114062601 + 2147483647 = 「4261546248」をセット

2. スレーブへの反映/確認•$ dig @（スレーブ） domain SOA +norec

3. マスターで「目的の値」をセット•例) 「2014062601」をセット

4. スレーブへの反映/確認•

もう一度 dig して目的のシリアル番号になっていることを確認

Copyright © 2014 株式会社日本レジストリサービス

70[補足] なぜシリアルを巻き戻せる？
- 「2114062601」を「2014062601」に戻す（1）• シリアルは「常に加算」だから巻き戻せないのでは？
– SOAシリアルの数値空間は、0と2^32が接続されたリング状– SOAシリアルは、現在値から相対的に大小判断が行われる
現在の値「現在の値」 から31bit後方↓小さい「現在の値」 から31bit前方↓大きい
シリアルの空間は「0」と「4294967296」が繋げられ、リング状になっている※ RFC 1982 - Serial Number Arithmetic（シリアル番号の計算）
Copyright © 2014 株式会社日本レジストリサービス

71[補足] なぜシリアルを巻き戻せる？
- 「2114062601」を「2014062601」に戻す（2）4261546248「現在の値」 から31bit前方↓大きい「現在の値」 から31bit後方
↓
小さい

2^32
↓
←0

2014062601

2114062600

以上より、シリアル上は 4261546248 < 2014062601
Copyright © 2014 株式会社日本レジストリサービス

72[補足] なぜシリアルを巻き戻せる？
- 「2114062601」を「2014062601」に戻す（3）4261546248
中間点

1度目の
シリアル番号加算

1度目のシリアル番号加算

2114062600

2014062601
目的地

2114062601
スタート地

Copyright © 2014 株式会社日本レジストリサービス

73

DNSトラブル事例

B.名前が引けない

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

74

1. 権威DNSサーバーがダウンしている
example.jpの権威DNSサーバー

キャッシュ
DNSサーバークライアントCopyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス75

1. 権威DNSサーバーがダウンしている
example.jpの権威DNSサーバー

キャッシュあるから大丈夫だ、問題ない。
（TTLが続くしばらくは）

キャッシュ
DNSサーバークライアントキャッシュDNSサーバーのキャッシュで、気づくのが遅れることも……
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

762. CNAME の循環
example1.jpの権威DNSサーバー「example1.jp」
は「example2.jp」のことだよ

example2.jpの権威DNSサーバー「example2.jp」
は「example1.jp」
のことだよ

キャッシュ
DNSサーバー

ぐるぐるぐるぐる……

クライアント「example2.jp」は「example1.jp」で、「example1.jp」は「example2.jp」……？

アプリケーションによってはエラーが出たり、そのまま固まったり……
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

77

2. CNAME の循環 - dig の実行結果$ dig cname.a.example. @127.0.0.1; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> cname.a.example. @127.0.0.1;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20338;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0;; QUESTION SECTION:;cname.a.example.
;; ANSWER SECTION:
cname.a.example.
cname.b.example.

15
15

IN

A

IN
IN

CNAME
CNAME

cname.b.example.
cname.a.example.

;; Query time: 15 msec;; SERVER: 127.0.0.1#53(127.0.0.1);; WHEN: Thu Jul 18 20:40:32 2013;; MSG SIZE rcvd: 69

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

78

3. ふぞろいのゾーン情報たち（1）example.jpの権威DNSサーバーたち
キャッシュ
DNSサーバーキャッシュ
DNSサーバー

名前？
引けてるよ？

あれ？
名前引けない？

クライアントクライアントCopyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

79

3. ふぞろいのゾーン情報たち（2）slavemasterslave
しばらく経過してキャッシュが切れると、再度問い合わせる。
この際、スレーブに問い合わせると、名前が引けなくなる（マスターに問い合わせていたら、引けるようになる）キャッシュ
DNSサーバーキャッシュ
DNSサーバーあれ？
名前引けなくなった？

名前引けるようになったクライアントクライアントCopyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

80

3. ふぞろいのゾーン情報たち（2）slavemasterslave

マスターとスレーブで、ゾーン情報の不一致。
シリアルの上げ忘れで、スレーブに新しいゾーン情報が伝わっていない
など

キャッシュ
DNSサーバーキャッシュ
DNSサーバー

名前？
引けてるよ？

あれ？
名前引けない？

クライアントクライアントCopyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

81

DNSトラブル事例

C.名前を引くのに時間が掛かる

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

82

1. TCPフォールバック• DNS の 512bytes の壁– 応答はできるだけ 512 bytes 以下に収め、UDP 一発で送信できるのがよい– 近頃のトレンド：応答サイズの増大• IPv6、DNSSEC、spam対策（SPF情報：TXTレコード）• どうなる？
– 最初に UDP で問い合わせて、512 bytes に収まらないことが分かったら TCP で再度問い合わせる• udp での問い合わせで tc ビットがオンになっている

再問い合わせの分遅くなる– 最近は「EDNS0」という仕組みが使われる
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

83[補足] EDNS0とは？ - 背景

• 従来のDNSプロトコルに存在する 512 bytes の壁– UDPによる問い合わせ– 応答の大きさの上限• IPv6やDNSSECの普及に伴う、DNSの応答に含まれる情報量の増加
512 bytes の壁を超えるための仕組み

EDNS0

Copyright © 2014 株式会社日本レジストリサービス

84[補足] EDNS0とは？ - 「512 bytes の壁」の例% dig +ignore ***.com txt(途中略)
不完全な応答をそのまま表示させる; flags: qr aa tc; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0(途中略)

応答が 512 bytes を越えたため、切り詰めが発生;; ANSWER SECTION:***.com.
300
IN
TXT“spf2.0/pra ip4:ｘｘ
ｘ.xxx.xxx.0/24 ip4:xxx.xxx.xxx.0/24 ip4:xxx.xxx.xxx.0/24
ip4:xxx.xxx.xxx.0/23 ip4:xxx.xxx.xxx.0/24 ip4:xx.xx.xxx.0/23
ip4:xx.xx.xxx.0/24 ip4:xx.xx.xxx.xx/32 ip4:xx.xx.xxx.xxx/32
ip4:xx.xx.xxx.xxx/32 ptr:mx.***.com ?all”;; Query time: 180 msec;; SERVER: xx.xx.xx.xxx#53(***.***.***.***);; WHEN: Tue Jun 10 16:32:56 2008
得られた応答の大きさ;; MSG SIZE rcvd: 273
実際には 668 bytes のデータがサーバに存在

従来のDNSプロトコルでは、UDPで512bytes を越えるデータを送受信できない
Copyright © 2014 株式会社日本レジストリサービス

85[補足] EDNS0とは？ - TCPフォールバックの場合• 512 bytes の壁を越えるには？
– TCPフォールバック– EDNS0• TCPで再度同じサーバーに同じデータを要求– データの切り詰めをクエリの送信者に通知、TCPで再接続– 応答サイズの制限を緩和 65,535 bytes まで OK!
– DNSができた当初から存在する方法•

信頼性のある通信路（コネクションを確保）••

通信の信頼性は高いが、通信にかかる負荷は大きい
再接続するため、時間が掛かる

 大規模なDNSサーバーでの使用は不向き
Copyright © 2014 株式会社日本レジストリサービス

86[補足] EDNS0とは？ - EDNS0 の場合• 512 bytes の壁を越えるには？
– TCPフォールバック– EDNS0• DNSプロトコルを改良➔UDPで大きな応答を受け取れるように– 問い合わせ時にUDPで受信できる応答の大きさをサーバへ通知– UDPで受信できるサイズを拡張可能••

コネクションの確保を行なわず、情報を送信
通信の信頼性は低いが、通信にかかる負荷は小さい•

再接続の必要がないため応答が速い (tcpフォールバックと比較）

 運用実績のあるUDPをそのまま利用可能
Copyright © 2014 株式会社日本レジストリサービス

87[補足] EDNS0とは？ - TCPフォールバックとEDNS0

EDNS0

TCPフォールバック
切り詰めを実施、TCPで再接続% dig ***.com txt;; Truncated, retrying in TCP mode.
(途中略);; Query time: 179 msec;; SERVER: ***.***.***.***#53(***.***.***.***);; WHEN: Mon Jun 2 20:31:20 2008;; MSG SIZE

rcvd: 668
応答の大きさ% dig ***.com txt +bufsize=4096(途中略);; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096
(途中略);; Query time: 192 msec EDNS0 有効;; SERVER: ***.***.***.***#53(***.***.***.***);; WHEN: Tue Jun 10 17:49:47 2008;; MSG SIZE

rcvd: 679

応答の大きさ上記いずれの場合でも、512 bytes の壁を越えることができている

Copyright © 2014 株式会社日本レジストリサービス

88

2. 権威DNSサーバーの一部がダウンしている (1/2)
 通常の場合
jpゾーン
example.jp

委任example.jpゾーン

クライアントCopyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

ns1

ns2

キャッシュ
DNSサーバー89

2. 権威DNSサーバーの一部がダウンしている (2/2)
DNSサーバーの一部がダウンしている場合
jpゾーン
example.jp

委任example.jpゾーン

ns1
再問い合わせクライアントCopyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

ns2
応答が
ない……
キャッシュ
DNSサーバー90

2. 権威DNSサーバーの一部がダウンしている (2/2)
DNSサーバーの一部がダウンしている場合• キャッシュサーバに一度キャッシュされてしまえば、遅延は発生
しない– 遅延が発生するのは、キャッシュされていないときの問い合わせ• 今回の例の場合、ns1 にいきなり問い合わせに行ったら、遅延は発生しない– 権威 DNS サーバーの選択に、プライマリやセカンダリという概念はない– どの権威DNSサーバーに問い合わせに行くかは、各キャッシュDNSサー
バーの実装やネットワークの状況に依存• ロシアンルーレットのようなもの

気づくのが遅れることも……
Copyright © 2014 株式会社日本レジストリサービス

91

まとめ
• どこを調べているのか？を理解しよう– 再帰問い合わせ？非再帰問い
合わせ？

• 道具の使いかたを知ろう– dig は友達

• よくあるトラブル事例– まずはログを確認！
– TCPの53番ポート確認！
– ファイヤーウォール確認！
– CNAME 確認！
– ピリオド確認！

• nslookupはやめよう– シリアル確認！

• Windowsでも動く！
• @でDNSサーバを指定、+norec
オプション– 便利なWebサービス• DNS可視化の「 Squish.net DNS
traversal checker 」• エラーチェックの「dnscheck.jp」
Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

92

Q＆A

Copyright © 2014 株式会社日本レジストリサービス
株式会社日本レジストリサービス

93