更新履歴
思ったより参照量が多くてビビる。
情報源として使用されてるケースも見かけたため、更新履歴入れました。(多分今日だけでしょう)
- 2016-10-29 11:50
- ns-a4.io が正しく次の権威サーバーを返してくれるの確認しました。障害復旧でいいんじゃないでしょうか。Android で dig 叩くツールあった。
- 03:08
- 2016-10-28 19:21 JST
- @rocca0504 さんの記事追記。
- 19:10 JST
- NXDOMAIN ステータスを勝手に返すのが問題の本質だったので追記。
- 18:10 JST
- dig の +norecurse (+norec) について追記しました。(@fumiyas さんご指摘ありがとうございます。)
見た目悪くなりますが、必要な箇所には記載があるべきと考え、都度追加しています。
ログの意味合いが無いところは +norec 追加したものに変更しました。 - ns-a4.io. が繋がらなくなったことについて追記しました。これで落ち着いてくれるといいんですが。
- dig の +norecurse (+norec) について追記しました。(@fumiyas さんご指摘ありがとうございます。)
結論
※ 2016-10-29 11:46 JST に確認したところ、ns-a4.io は正常なレスポンスを返しました。いつ直ったかは不明ですが、まずは一安心です。
.io の 7 台の権威サーバーの内訳がこんな状態。
恐らくのトラブルの原因は ns-a4.io が サブドメインの権威サーバーを答えないこと です。(詳細は調べ方の異常な場合を参照)
※ トラブル発生中に何度もクエリを打つのははばかられるので、試行回数は少なめです。
※ 調査時刻は 2016-10-28 14:00 (JST) です。不安定な状況につき、あくまで参考情報までに留めて下さい。
-
今のところ正常
- ns-a3.io.
- ns-d1.io.
- ns-l1.io.
-
Timeout
- ns-a1.io.
- ns-a2.io.
- ns-y1.io.
-
サブドメインを指定した際に次の権威 NS 返してくれない (NS 0 record)
- ns-a4.io. ※ 2016-17:51 JST 現在 Timeout するようになりました。
なお、@rocca0504 さんも同じ問題を別の視点も含め調査されてました。
こちらの方が読みやすいしわかりやすいと思います。
[gusuku] 「.io」ドメイン - DNSによる名前解決が不安定になった話(現在進行形) - Qiita
調べ方
泥臭い方法で調べたので、何かもっとスマートな方法をご存知な方はコメント下さい。
dig で NS のリスト取得する
# 注意: 権威サーバーへの問い合わせなので、正しくは
#
# dig io. NS @l.root-servers.net. +norec
#
# とするべきでした。(トップレベルドメインについての問い合わせなので影響薄いですが、お作法として)
# ログの意味もあるので下記は元のままにしています。
$ dig io. NS @l.root-servers.net.
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> io. NS @l.root-servers.net.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37187
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 7, ADDITIONAL: 12
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;io. IN NS
;; AUTHORITY SECTION:
io. 172800 IN NS ns-a1.io.
io. 172800 IN NS ns-a2.io.
io. 172800 IN NS ns-a3.io.
io. 172800 IN NS ns-a4.io.
io. 172800 IN NS ns-d1.io.
io. 172800 IN NS ns-l1.io.
io. 172800 IN NS ns-y1.io.
;; ADDITIONAL SECTION:
ns-a1.io. 172800 IN A 194.0.1.1
ns-a1.io. 172800 IN AAAA 2001:678:4::1
ns-a2.io. 172800 IN A 194.0.2.1
ns-a2.io. 172800 IN AAAA 2001:678:5::1
ns-a3.io. 172800 IN A 74.116.178.1
ns-a4.io. 172800 IN A 74.116.179.1
ns-d1.io. 172800 IN A 64.251.31.179
ns-d1.io. 172800 IN AAAA 2607:feb8::5:5
ns-l1.io. 172800 IN A 80.249.100.57
ns-l1.io. 172800 IN AAAA 2001:470:1f1d:244::57
ns-y1.io. 172800 IN A 91.208.95.130
ns-y1.io. 172800 IN AAAA 2001:470:1f07:d0b::130
;; Query time: 113 msec
;; SERVER: 199.7.83.42#53(199.7.83.42)
;; WHEN: Fri Oct 28 13:29:11 2016
;; MSG SIZE rcvd: 412
dig で各 NS サーバーを確認する
正常な場合
正しく次の NS を返してくれます。
# 注意: 権威サーバーへの問い合わせなので、正しくは
#
# dig a.example.io @ns-a3.io. +norec
#
# とするべきでした。
# ログの意味もあるので下記は元のままにしています。
$ dig a.example.io @ns-a3.io.
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> a.example.io @ns-a3.io.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6836
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;a.example.io. IN A
;; AUTHORITY SECTION:
example.io. 86400 IN NS dns1.registrar-servers.com.
example.io. 86400 IN NS dns2.registrar-servers.com.
;; Query time: 5 msec
;; SERVER: 74.116.178.1#53(74.116.178.1)
;; WHEN: Fri Oct 28 14:11:35 2016
;; MSG SIZE rcvd: 89
異常(サブドメインだけ次の NS を返さない)な場合
※ 2016-10-28 17:51 JST 現在、異常だった ns-a4.io が Timeout するようになりました。
次の NS などない! …とばかりに NS レコードが 0 件となりました。
※ 正しくは、「子の権威サーバーがいるのに勝手に NXDOMAIN (Non-Existent Domain) を返している」ことを注視すべきでした。
# 注意: 権威サーバーへの問い合わせなので、正しくは
#
# dig a.example.io @ns-a4.io. +norec
#
# とするべきでした。
# ログの意味もあるので下記は元のままにしています。
$ dig a.example.io @ns-a4.io.
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> a.example.io @ns-a4.io.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 59749
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;a.example.io. IN A
;; AUTHORITY SECTION:
io. 3600 IN SOA ns1.communitydns.net. nicadmin.nic.io. 1477631318 3600 1800 3600000 3600
;; Query time: 3 msec
;; SERVER: 74.116.179.1#53(74.116.179.1)
;; WHEN: Fri Oct 28 14:10:44 2016
;; MSG SIZE rcvd: 103
厄介なのが、サブドメインだけ返さないというおかしな状況です。
上記では a.example.io の問い合わせに対し NS レコードを返してくれませんが、セカンドレベルの example.io だと NS レコードを返します。
# 注意: 権威サーバーへの問い合わせなので、正しくは
#
# dig example.io @ns-a4.io. +norec
#
# とするべきでした。
# ログの意味もあるので下記は元のままにしています。
$ dig example.io @ns-a4.io.
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> example.io @ns-a4.io.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26321
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;example.io. IN A
;; AUTHORITY SECTION:
example.io. 86400 IN NS dns1.registrar-servers.com.
example.io. 86400 IN NS dns2.registrar-servers.com.
;; Query time: 3 msec
;; SERVER: 74.116.179.1#53(74.116.179.1)
;; WHEN: Fri Oct 28 14:14:24 2016
;; MSG SIZE rcvd: 87
正常な場合のトレースでは最後に example.io の権威サーバーが返答してくれますが、
$ dig a.example.io @8.8.8.8 +trace
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> a.example.io @8.8.8.8 +trace
;; global options: +cmd
. 18446 IN NS l.root-servers.net.
. 18446 IN NS g.root-servers.net.
. 18446 IN NS i.root-servers.net.
. 18446 IN NS a.root-servers.net.
. 18446 IN NS k.root-servers.net.
. 18446 IN NS c.root-servers.net.
. 18446 IN NS f.root-servers.net.
. 18446 IN NS m.root-servers.net.
. 18446 IN NS d.root-servers.net.
. 18446 IN NS j.root-servers.net.
. 18446 IN NS b.root-servers.net.
. 18446 IN NS e.root-servers.net.
. 18446 IN NS h.root-servers.net.
;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 74 ms
io. 172800 IN NS ns-a1.io.
io. 172800 IN NS ns-a2.io.
io. 172800 IN NS ns-a3.io.
io. 172800 IN NS ns-a4.io.
io. 172800 IN NS ns-d1.io.
io. 172800 IN NS ns-l1.io.
io. 172800 IN NS ns-y1.io.
;; Received 422 bytes from 192.203.230.10#53(192.203.230.10) in 149 ms
example.io. 86400 IN NS dns1.registrar-servers.com.
example.io. 86400 IN NS dns2.registrar-servers.com.
;; Received 89 bytes from 64.251.31.179#53(64.251.31.179) in 184 ms
example.io. 3601 IN SOA dns1.registrar-servers.com. hostmaster.registrar-servers.com. 2016102001 43200 3600 604800 3601
;; Received 103 bytes from 216.87.152.33#53(216.87.152.33) in 120 ms
異常な場合は ns-a4.io で途切れてしまっているようです。
$ dig a.example.io @8.8.8.8 +trace
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> a.example.io @8.8.8.8 +trace
;; global options: +cmd
. 18349 IN NS f.root-servers.net.
. 18349 IN NS e.root-servers.net.
. 18349 IN NS m.root-servers.net.
. 18349 IN NS b.root-servers.net.
. 18349 IN NS c.root-servers.net.
. 18349 IN NS g.root-servers.net.
. 18349 IN NS h.root-servers.net.
. 18349 IN NS k.root-servers.net.
. 18349 IN NS j.root-servers.net.
. 18349 IN NS a.root-servers.net.
. 18349 IN NS d.root-servers.net.
. 18349 IN NS i.root-servers.net.
. 18349 IN NS l.root-servers.net.
;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 72 ms
io. 172800 IN NS ns-a2.io.
io. 172800 IN NS ns-l1.io.
io. 172800 IN NS ns-a1.io.
io. 172800 IN NS ns-y1.io.
io. 172800 IN NS ns-d1.io.
io. 172800 IN NS ns-a4.io.
io. 172800 IN NS ns-a3.io.
;; Received 422 bytes from 192.36.148.17#53(192.36.148.17) in 42 ms
io. 3600 IN SOA ns1.communitydns.net. nicadmin.nic.io. 1477632089 3600 1800 3600000 3600
;; Received 103 bytes from 74.116.179.1#53(74.116.179.1) in 4 ms
おまけ: Timeout
間違った答えを返すより、使われなくなる Timeout の方が百倍増しですね。
$ dig a.example.io @ns-a1.io. +norec
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> a.example.io @ns-a1.io.
;; global options: +cmd
;; connection timed out; no servers could be reached