[gusuku] 「.io」ドメイン - DNSによる名前解決が不安定になった話（復旧済み確認）

# 更新報告
[io | DNSViz](http://dnsviz.net/d/io/responses/)

12時間前にはdownしてましたが、その3時間後のupdateでは復旧してるっぽ
（単純にresponseで見てるだけだから、当時ちゃんとクエリも復旧してたかまではわかんないけど…）

* [Updated: 2016-10-28 14:35:21 UTC (about 12 hours ago)] ((http://dnsviz.net/d/io/WBNiKQ/responses/))
* [Updated: 2016-10-28 18:10:44 UTC (about 9 hours ago)]  (http://dnsviz.net/d/io/WBOUpA/responses/) <b><font color="FF0000">※復旧済み</font></b>

実害発生してから約12時間くらいは継続してたことになるのかな。

これオープンソースなのか！使いやすそう。
http://dnsviz.net/
[DNSViz - Github](https://github.com/dnsviz/dnsviz)


@MasahitoShinoda さんも同様の記事を書かれてます。
こちらのほうが情報の更新が早いです。
[.io ドメインがおかしくなったので dig で調べてみた（2016/10/28）](http://qiita.com/MasahitoShinoda/items/40cd312fabc6db604b39)

間違いとかご指摘あったらコメントくださいー。

# はじめに
ちょっとタイムリーな話。
10/28（金）AM10:20頃、うちが提供しているサービスで名前解決のエラーが発生したのでそのトラブルシュートの様子を書こうと思う。
![gusuku_logo.jpg](https://qiita-image-store.s3.amazonaws.com/0/133500/3a0f4bec-1475-e349-43c0-cd88056ea91b.jpeg "gusuku_logo.jpg")
[gusuku - kintoneアプリケーション開発をサポートするプラットフォーム](https://gusuku.io/)

# gusukuのドメインは「.io」ドメイン
今巷で流行りの **ccTLD。**
ccTLDの説明は以下を参照。
[ccTLDとは - JPNIC](https://www.nic.ad.jp/ja/basics/terms/ccTLD.html)

## 何が発生したのか？ 「.io」の名前解決ができない！
![slack20161020.png](https://qiita-image-store.s3.amazonaws.com/0/73604/c117e2c8-d426-1774-15f1-7dbdd8d44eeb.png "slack20161020.png")


社内のDNSで名前解決しようと思うと名前解決できない。
**Google Public DNS（8.8.8.8）**を指定して名前解決すると、出来たり出来なかったり。

うちの環境の場合はCloudFrontがある関係で、ちょっとDNSの設定が特殊。
![r53mc_alias .png](https://qiita-image-store.s3.amazonaws.com/0/73604/97020669-53f3-dc27-76d4-0d074a7dc0a5.png "r53mc_alias .png")

初期の段階では、名前解決が出来なかったレコードが、<b><font color="FF0000">hoge.gusuku.io</font></b>でAレコードでエイリアスレコードを設定してあったサブドメインだったため、問題切り分けのためにAレコードのエイリアスレコードではなく、CNAMEでエイリアスを直書きしてみた。

```
; ANSWER SECTION:
app.gusuku.io.		59	IN	CNAME	********.cloudfront.net.
```

しかしそれでも名前解決が出来たり出来なかったり。

## traceしてみる
社内DNSに入って<b><font color="FF0000">hoge.gusuku.io</font></b>をトレースしてみた。

…おや？

```
$ dig app.gusuku.io +trace

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.32.amzn1 <<>> app.gusuku.io +trace
;; global options: +cmd
.			518400	IN	NS	C.ROOT-SERVERS.NET.
.			518400	IN	NS	D.ROOT-SERVERS.NET.
.			518400	IN	NS	E.ROOT-SERVERS.NET.
.			518400	IN	NS	F.ROOT-SERVERS.NET.
.			518400	IN	NS	G.ROOT-SERVERS.NET.
.			518400	IN	NS	H.ROOT-SERVERS.NET.
.			518400	IN	NS	I.ROOT-SERVERS.NET.
.			518400	IN	NS	J.ROOT-SERVERS.NET.
.			518400	IN	NS	K.ROOT-SERVERS.NET.
.			518400	IN	NS	L.ROOT-SERVERS.NET.
.			518400	IN	NS	M.ROOT-SERVERS.NET.
.			518400	IN	NS	A.ROOT-SERVERS.NET.
.			518400	IN	NS	B.ROOT-SERVERS.NET.
;; Received 508 bytes from 10.0.0.2#53(10.0.0.2) in 8 ms

io.			172800	IN	NS	ns-a1.io.
io.			172800	IN	NS	ns-a4.io.
io.			172800	IN	NS	ns-a3.io.
io.			172800	IN	NS	ns-a2.io.
io.			172800	IN	NS	ns-l1.io.
io.			172800	IN	NS	ns-d1.io.
io.			172800	IN	NS	ns-y1.io.
;; Received 423 bytes from 202.12.27.33#53(202.12.27.33) in 42 ms

io.			3600	IN	SOA	ns1.communitydns.net. nicadmin.nic.io. 1477627507 3600 1800 3600000 3600
;; Received 104 bytes from 74.116.179.1#53(74.116.179.1) in 2 ms
```

**cf.**正常に名前解決出来る場合

```
$ dig yahoo.co.jp +trace

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.32.amzn1 <<>> yahoo.co.jp +trace
;; global options: +cmd
.			518400	IN	NS	B.ROOT-SERVERS.NET.
.			518400	IN	NS	C.ROOT-SERVERS.NET.
.			518400	IN	NS	D.ROOT-SERVERS.NET.
.			518400	IN	NS	E.ROOT-SERVERS.NET.
.			518400	IN	NS	F.ROOT-SERVERS.NET.
.			518400	IN	NS	G.ROOT-SERVERS.NET.
.			518400	IN	NS	H.ROOT-SERVERS.NET.
.			518400	IN	NS	I.ROOT-SERVERS.NET.
.			518400	IN	NS	J.ROOT-SERVERS.NET.
.			518400	IN	NS	K.ROOT-SERVERS.NET.
.			518400	IN	NS	L.ROOT-SERVERS.NET.
.			518400	IN	NS	M.ROOT-SERVERS.NET.
.			518400	IN	NS	A.ROOT-SERVERS.NET.
;; Received 508 bytes from 10.0.0.2#53(10.0.0.2) in 8 ms

jp.			172800	IN	NS	f.dns.jp.
jp.			172800	IN	NS	g.dns.jp.
jp.			172800	IN	NS	e.dns.jp.
jp.			172800	IN	NS	c.dns.jp.
jp.			172800	IN	NS	d.dns.jp.
jp.			172800	IN	NS	a.dns.jp.
jp.			172800	IN	NS	b.dns.jp.
;; Received 425 bytes from 192.228.79.201#53(192.228.79.201) in 167 ms

yahoo.co.jp.		86400	IN	NS	ns01.yahoo.co.jp.
yahoo.co.jp.		86400	IN	NS	ns11.yahoo.co.jp.
yahoo.co.jp.		86400	IN	NS	ns02.yahoo.co.jp.
yahoo.co.jp.		86400	IN	NS	ns12.yahoo.co.jp.
;; Received 169 bytes from 203.119.1.1#53(203.119.1.1) in 38 ms

yahoo.co.jp.		300	IN	A	183.79.135.206
yahoo.co.jp.		300	IN	A	182.22.59.229
yahoo.co.jp.		900	IN	NS	ns12.yahoo.co.jp.
yahoo.co.jp.		900	IN	NS	ns02.yahoo.co.jp.
yahoo.co.jp.		900	IN	NS	ns01.yahoo.co.jp.
yahoo.co.jp.		900	IN	NS	ns11.yahoo.co.jp.
;; Received 201 bytes from 118.151.254.149#53(118.151.254.149) in 2 ms
```

## 「.io」のネームサーバーに対してdigってみる
この時点でアウトだったのは以下の2サーバー（10/28 13:22時点）

* ns-a2.io 
* ns-a4.io

<b><font color="0000FF">norecurseオプション</font></b>大事。
このオプションつけると**再帰問い合わせを行わない**ので、純粋に問い合わせた先のDNSサーバーからの応答が得られる。

### 正常な場合
委譲先のNSサーバーの応答がある。

```
$ dig @ns-a1.io app.gusuku.io +norec

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.32.amzn1 <<>> @ns-a1.io app.gusuku.io +norec
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19835
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 0

;; QUESTION SECTION:
;app.gusuku.io.			IN	A

;; AUTHORITY SECTION:
gusuku.io.		86400	IN	NS	ns-429.awsdns-53.com.
gusuku.io.		86400	IN	NS	ns-801.awsdns-36.net.
gusuku.io.		86400	IN	NS	ns-1045.awsdns-02.org.
gusuku.io.		86400	IN	NS	ns-1723.awsdns-23.co.uk.

;; Query time: 4 msec
;; SERVER: 194.0.1.1#53(194.0.1.1)
;; WHEN: Fri Oct 28 04:22:46 2016
;; MSG SIZE  rcvd: 171
```

### 正常でない場合
応答がない。

```
$ dig @ns-a4.io app.gusuku.io +norec

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.32.amzn1 <<>> @ns-a4.io app.gusuku.io +norec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 55
;; flags: qr aa; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;app.gusuku.io.			IN	A

;; AUTHORITY SECTION:
io.			3600	IN	SOA	ns1.communitydns.net. nicadmin.nic.io. 1477628338 3600 1800 3600000 3600

;; Query time: 4 msec
;; SERVER: 74.116.179.1#53(74.116.179.1)
;; WHEN: Fri Oct 28 04:22:54 2016
;; MSG SIZE  rcvd: 104
```

参照してるサーバーによっては名前解決できない問題が発生しているっぽい。
（10/28 15:41現在）まだ事象継続中・・・

（10/28 18:40現在）根本の原因はまだ解決には至ってない模様？

NSサーバーで「.io」ドメインが持ってるゾーン情報
リアルタイムではないけどゾーン情報知るって意味ではけっこう有益な情報
[DNS zone details for: io](https://www.huque.com/app/dnsstat/detail/io/)（Date of latest check: Wed, 26 Oct 2016 22:58:07 -0400）

Hacker News に掲載されてる。
[IO domain DNS failure - Hacker News]
(https://news.ycombinator.com/item?id=12813065)

## ホストベースじゃなくてIPベースでも確認してみた（一応）

### 名前解決できないNSサーバー

```
ns-a2.io.		1248	IN	A	194.0.2.1
ns-a4.io.		1242	IN	A	74.116.179.1
```

どっちも **connection timed out** になる模様。
いつ復旧かなー

```
$ dig @194.0.2.1 gusuku.io +norec

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.32.amzn1 <<>> @194.0.2.1 gusuku.io +norec
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

$ dig @74.116.179.1 gusuku.io +norec

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.32.amzn1 <<>> @74.116.179.1 gusuku.io +norec
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached
```

そもそもpingも飛ばない。意図的に落としてるかそれとも落ちてるか。。。

```
$ ping 194.0.2.1
PING 194.0.2.1 (194.0.2.1) 56(84) bytes of data.

--- 194.0.2.1 ping statistics ---
16 packets transmitted, 0 received, 100% packet loss, time 15527ms

$ ping 74.116.179.1
PING 74.116.179.1 (74.116.179.1) 56(84) bytes of data.

--- 74.116.179.1 ping statistics ---
55 packets transmitted, 0 received, 100% packet loss, time 54889ms
```

ちなみに他の正常なNSサーバーはping応答ある。

```
;; ANSWER SECTION:
ns-a3.io.		525	IN	A	74.116.178.1

$ ping 74.116.178.1
PING 74.116.178.1 (74.116.178.1) 56(84) bytes of data.
64 bytes from 74.116.178.1: icmp_seq=1 ttl=54 time=3.12 ms
64 bytes from 74.116.178.1: icmp_seq=2 ttl=54 time=2.94 ms
64 bytes from 74.116.178.1: icmp_seq=3 ttl=54 time=2.96 ms
64 bytes from 74.116.178.1: icmp_seq=4 ttl=54 time=2.96 ms
^C
--- 74.116.178.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3511ms
rtt min/avg/max/mdev = 2.942/2.998/3.126/0.083 ms
```