見出し画像

学習のためにドメインを実際に取得していろいろ試してみた話【DNSをはじめよう】

AWSの資格勉強をしている際にDNSについて何もわからん状態に何度もなったので、ちゃんと勉強することにしました。

今回は先日の技術書店9で購入したこちらの「DNSをはじめよう 〜基礎からトラブルシューティングまで〜 改訂第2版」という書籍でハンズオンをしつつ学習していきたいと思います。

ドメイン取得〜Route53で設定

・ドメインの購入

今回はハンズオンの通りにお名前.comで「startdns.site」というドメインを購入したのですが、諸々の設定など含めたったの5分で終わりました。

思っていた以上に簡単にできてしまったのと、一年であれば税込み66円と超お手軽だったのにとても驚きました。

スクリーンショット 2020-10-17 22.05.35

ただ書籍に書かれている時よりもお名前.comでのドメイン名の自動更新の解除方法がちょっとわかりにくくなっていたので、そこだけ注意が必要かもしれません。

・Whoisで確認

お名前.comでWhois検索が用意されていたのでこちらで確認しました。

スクリーンショット 2020-10-17 22.21.40

また実際にhttp://startdns.site にアクセスしたらお名前.comのページが出ることが確認できました。

スクリーンショット 2020-10-17 22.38.03

digでもちゃんとお名前.comのネームサーバに指定されているのが確認できますね。

# dig http://startdns.site
(中略)
;; ANSWER SECTION:
startdns.site.		300	IN	NS	dns1.onamae.com.
startdns.site.		300	IN	NS	dns2.onamae.com.

・Route53の設定

Route53でホストゾーンを作成します。

こちらもUIが変わってて戸惑いましたが、難なくできました。

スクリーンショット 2020-10-17 22.36.10

スクリーンショット 2020-10-17 22.39.01

ここで割り当てられたAWSのネームサーバをお名前.comの方に設定します。

スクリーンショット 2020-10-17 22.42.59

更新に最大24~72時間かかりますとか書いてありましたが、実際には1分ほどで切り替え完了のメールが届きました。

ということでウキウキしながらdigを叩いてみたところ…

スクリーンショット 2020-10-17 22.40.22

あれ?🤔

どうやらTTLが300秒で設定されているので、それがリセットされるまで待つ必要があるようです。

5分後に再度実行してみたところ、ちゃんと設定したネームサーバに変更されていました。

;; ANSWER SECTION:
startdns.site.		3600	IN	NS	ns-485.awsdns-60.com.
startdns.site.		3600	IN	NS	ns-1795.awsdns-32.co.uk.
startdns.site.		3600	IN	NS	ns-1508.awsdns-60.org.
startdns.site.		3600	IN	NS	ns-863.awsdns-43.net.

・処理を一つづつ追いかけてみる

まずはルートネームサーバにNSレコードを問い合わせます。

# dig +norecurse +noall +author startdns.site ns @a.root-servers.net
site.			172800	IN	NS	f.nic.site.
site.			172800	IN	NS	a.nic.site.
site.			172800	IN	NS	e.nic.site.
site.			172800	IN	NS	b.nic.site.

返ってきたネームサーバに対してさらに問い合わせたところ、自分の登録したRoute53のネームサーバの情報が返ってきました。

dig +norecurse +noall +author startdns.site ns @f.nic.site         
startdns.site.		3600	IN	NS	ns-485.awsdns-60.com.
startdns.site.		3600	IN	NS	ns-1795.awsdns-32.co.uk.
startdns.site.		3600	IN	NS	ns-863.awsdns-43.net.
startdns.site.		3600	IN	NS	ns-1508.awsdns-60.org.

・ドメイン名の有効期限の確認

ドメイン名の有効期限を確認するにはwhoisコマンドを実行し、その中にExpiration Date: 2021-10-17T23:59:59Zのように記載されています。
(レジストリによって表記が異なるので注意)

# whois startdns.site
% IANA WHOIS server
% for more information on IANA, visit http://www.iana.org
% This query returned 1 object

refer:        whois.nic.site

domain:       SITE

...(中略)...

Domain Name: startdns.site
Registry Domain ID: D204559828-CNIC
Registrar WHOIS Server: whois.discount-domain.com
Registrar URL: http://www.onamae.com
Updated Date: 2020-10-17T22:43:07Z
Creation Date: 2020-10-17T13:11:09Z
Registrar Registration Expiration Date: 2021-10-17T23:59:59Z
Registrar: GMO INTERNET, INC.
Registrar IANA ID: 49
Registrar Abuse Contact Email: abuse@gmo.jp
Registrar Abuse Contact Phone: +81.337709199

...
メモ
・新しい有効期限の日時に切り替わるのは今表示されている有効期限が切れてから。
・ドメインによってはすぐに切り替わるものもある。

digでリソースレコードを確認する

・Aレコードの確認

# dig www.google.co.jp +short
172.217.25.195
# dig www.google.co.jp a +short
172.217.25.195

試しにGoogleのWhoisを確認してみましたが、当然といえば当然なのですがGoogleのネットワークで動作していました。

# whois 172.217.25.195
(中略)
NetRange:       172.217.0.0 - 172.217.255.255
CIDR:           172.217.0.0/16
NetName:        GOOGLE
NetHandle:      NET-172-217-0-0-1
(後略)
メモ
・DNSラウンドロビン
一つのドメイン名に複数のAレコードを作ることが可能。
その場合digを叩くとランダムな順番でIPアドレスが返される。
これによりロードバランサーがなくても負荷分散される。
ただし異なるTTLを設定することはできない。

・MXレコードの確認

dig ドメイン名 mx +short

任天堂の問合せ窓口のinfo@nintendo.co.jpにメールを送った場合、どのメールサーバーが受信するかを確認してみます。

# dig nintendo.co.jp mx +short
10 mxb-0039de01.gslb.pphosted.com.
10 mxa-0039de01.gslb.pphosted.com.

# dig mxb-0039de01.gslb.pphosted.com. a +short 
148.163.133.238
メモ
・mxレコードの先頭の「10」という数字はプリファレンス値。
 これはメールサーバーが複数ある場合の優先度を示している。
 これによって負荷分散したり冗長性を高めたりすることが可能。

・MXレコードがなければウェブサーバ宛にメールが届く
 プリファレンス値を「0」、メールサーバー名を「.(ドット)」にしたNull MXを設定することでメールを受信しないことを明示しておく方が余計な負担をしなくて済む。
example.co.jp. IN MX 0 .

・ダミーのメールアドレスを使用する際の注意点

よくコードテストなどをする際にダミーのメールアドレスに適当なドメイン名を使用した結果、予期せぬメールが送信されてしまうことがある。

例えばtest.co.jp の場合、ヘルテムのメールサーバーへと繋がる。

dig test.co.jp mx +short
10 mail10.heteml.jp.

whois test.co.jpをしたり、http://test.co.jp で確認してみると以下のように全然関係ないところへメールが送信されてたりする。

必ずRFC2606に記載されているexample.co.jpなどの例示やテスト専用のドメイン名を使用しましょう。

・NSレコード

ネームサーバの確認方法。

dig startdns.site ns +short
ns-863.awsdns-43.net.
ns-1508.awsdns-60.org.
ns-1795.awsdns-32.co.uk.
ns-485.awsdns-60.com.

・SPFレコード(TXTレコード)

なりすましメールかどうかを確認する方法。

# dig pdc.pokemon.jp txt +short
"v=spf1 include:spf.pdc.pokemon.jp include:spf.pokemon.mailds.jp ~all"
"google-site-verification=Vg3Ar1_hRlrET3eyTiQS8ONtb_ijVAZh1ME3FaWX-Mw"

# dig spf.pdc.pokemon.jp txt +short
"v=spf1 +ip4:203.216.217.0/24 +ip4:122.212.36.0/24 +ip4:202.8.80.0/23 +ip4:202.74.4.160/27 +ip4:59.159.71.0/24 +ip4:220.110.139.188/32 +ip4:211.120.127.41/32 +ip4:125.29.35.0/26 +ip4:124.211.29.64/26 +ip4:122.215.202.64/26 +ip4:203.138.159.219 ~all"

# dig spf.pokemon.mailds.jp txt +short
"v=spf1 ip4:118.238.144.96/29 ip4:118.238.144.120/30 ~all"

例えばメールが「118.238.144.99」から届いていれば、spf.pokemon.mailds.jpのSPFレコードの中に含まれているため迷惑メール扱いされない。

メモ
IPv6のIPアドレスを設定し忘れると迷惑メールとして扱われたりするので注意。

・PTRレコード

IPアドレスからドメイン名を逆引きできるレコードのこと。

・CNAMEレコード

# dig aibo.sony.jp a +short
cs1050.wpc.omicroncdn.net.
152.199.43.182

# dig aibo.sony.jp a 

 ; <<>> DiG 9.10.6 <<>> aibo.sony.jp a
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13637
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;aibo.sony.jp.			IN	A

;; ANSWER SECTION:
aibo.sony.jp.		124	IN	CNAME	cs1050.wpc.omicroncdn.net.
cs1050.wpc.omicroncdn.net. 2392	IN	A	152.199.43.182

;; Query time: 11 msec
;; SERVER: 2001:268:fd07:4::1#53(2001:268:fd07:4::1)
;; WHEN: Sun Oct 18 11:49:21 JST 2020
;; MSG SIZE  rcvd: 96
メモ
・aibo.sony.jpをaliases(別名)、cs1050.wpc.omicroncdn.net.をcanonical name(正式名)と呼ぶ。
・Aレコードを調べにいってCNAMEが設定されている場合、名前解決の対象を正式名に変更し、そのAレコードに設定されているIPアドレスを返す。

CNAMEだけ調べたい場合はこちらを使用する。

# dig aibo.sony.jp cname +short
cs1050.wpc.omicroncdn.net.
メモ
・CNAMEと他のリソースレコードは共存できない。
・ZONE APEXはCNAMEを使えない。
・AWS Route53のAliasレコードならZONE APEXでも設定可能。

・グルーレコード

自分でネームサーバを立てるときは上位のネームサーバに自分のネームサーバのIPアドレスも設定する必要がある。
→これをグルーレコードと呼ぶ。

トラブルシューティング

以下はトラブルシューティングの章を読んでいて気になったことのメモになります。

・URLでwwwをつけるものとつけないものでちゃんと区別しないとページに飛ばないし、SEO的にも統一しないと弱くなる。

・.devはGoogleがレジストリとして管理しているものだから、オレオレTLDとして使うと名前衝突するから使えなくなった。
・自分の持ち物ではないドメイン名を勝手に使うとトラブルの元になる。

・サイトリニューアル時には事前にTTLを確認しておくこと。
・ちゃんと短くしておかないとフルリゾルバに古いIPアドレスがキャッシュされてしまい変更が反映されない。

・サブドメインを追加したのにサイトが見られない

まず作成していない適当なサブドメインをdigで確認してみる。

# dig test.startdns.site a

; <<>> DiG 9.10.6 <<>> test.startdns.site a
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 33811
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;test.startdns.site.		IN	A

;; AUTHORITY SECTION:
startdns.site.		899	IN	SOA	ns-1795.awsdns-32.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

;; Query time: 32 msec
;; SERVER: 172.30.8.241#53(172.30.8.241)
;; WHEN: Sun Oct 18 12:29:54 JST 2020
;; MSG SIZE  rcvd: 134

そのドメイン名は存在しないというNXDOMAINが返ってきた。
もちろんANSWER SECTIONも存在しない。

SOAレコードのTTLは900秒(15分)
SOAのMININUMは86400
上記二つの最小の方がキャッシュ時間となる。
今回のネガティブキャッシュは15分(900秒)

Route53でサブドメインを作成する。

スクリーンショット 2020-10-18 12.35.31

スクリーンショット 2020-10-18 12.36.28

これでtest.startdns.site が追加された。

スクリーンショット 2020-10-18 12.36.40

この状態でもう一回digしてみてもNXDOMAINのまま。
→先ほどdigを実行した際のネガティブキャッシュが残っているため、それが参照されてしまっている。

# dig test.startdns.site a

; <<>> DiG 9.10.6 <<>> test.startdns.site a
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 58218
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;test.startdns.site.		IN	A

;; AUTHORITY SECTION:
startdns.site.		434	IN	SOA	ns-1795.awsdns-32.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

;; Query time: 15 msec
;; SERVER: 172.30.8.241#53(172.30.8.241)
;; WHEN: Sun Oct 18 12:37:39 JST 2020
;; MSG SIZE  rcvd: 134

digに+traceオプションをつけて実行することでルートネームサーバから順に確認させることができる。

# dig test.startdns.site a +trace
;; Warning: Message parser reports malformed message packet.

; <<>> DiG 9.10.6 <<>> test.startdns.site a +trace
;; global options: +cmd
.			3600	IN	NS	a.root-servers.net.
.			3600	IN	NS	b.root-servers.net.
.			3600	IN	NS	c.root-servers.net.
.			3600	IN	NS	d.root-servers.net.
.			3600	IN	NS	e.root-servers.net.
.			3600	IN	NS	f.root-servers.net.
.			3600	IN	NS	g.root-servers.net.
.			3600	IN	NS	h.root-servers.net.
.			3600	IN	NS	i.root-servers.net.
.			3600	IN	NS	j.root-servers.net.
.			3600	IN	NS	k.root-servers.net.
.			3600	IN	NS	l.root-servers.net.
.			3600	IN	NS	m.root-servers.net.
a.root-servers.net.	37529	IN	A	198.41.0.4
;; Received 488 bytes from 172.30.8.241#53(172.30.8.241) in 16 ms

site.			172800	IN	NS	f.nic.site.
site.			172800	IN	NS	a.nic.site.
site.			172800	IN	NS	e.nic.site.
site.			172800	IN	NS	b.nic.site.
site.			86400	IN	DS	51676 8 2 883175F6F5C68EA81563B62D1B2B79B6A997D60DC6E20CC70AFD0CD6 B7E82F62
site.			86400	IN	DS	51676 8 1 90DDBEEEB973B0F8719ED763FB6EEDE97C73ABF5
site.			86400	IN	RRSIG	DS 8 1 86400 20201030170000 20201017160000 26116 . 0DFtiofNwMPH5NrZ0iIMsf9Wp2BPeVdVZRMRVTzdPfyIrJfUUGwApmTs FkupaRU2RmmsyclaP+zKIqLjBBu/wHXopykGfqwR+nAP8elm2Yigg7Gq xyNvj+FKyrmoNDv0TKbOVapSFgAEkwthj2TBSTxp9fmG2tF4yaJ4mF6A n6hMxYSvu4KOop+ZYiGniDdA2grJTpedBPWJbWBvsEJwAuOfu/YNwp0i nr/1jV7nTOJVQCaGVxDLTdH2QmVIuVAJyzcbByg/M8I2IfbuwBIm2dNA RZkIOHFengmPJ90jtrXyuKN28eUTsuIqt+cG3a1TiVv2wZUh8nx6UVFo 5ZrLIw==
;; Received 662 bytes from 2001:503:c27::2:30#53(j.root-servers.net) in 57 ms

startdns.site.		3600	IN	NS	ns-485.awsdns-60.com.
startdns.site.		3600	IN	NS	ns-1508.awsdns-60.org.
startdns.site.		3600	IN	NS	ns-1795.awsdns-32.co.uk.
startdns.site.		3600	IN	NS	ns-863.awsdns-43.net.
dc7qjc1dvd5sfqovl8iihrqd1scolsuv.site. 3600 IN NSEC3 1 1 1 - DCCIGQH6728HURPRR9VVJI9I046L4U33  NS SOA RRSIG DNSKEY NSEC3PARAM
dc7qjc1dvd5sfqovl8iihrqd1scolsuv.site. 3600 IN RRSIG NSEC3 8 2 3600 20201024000004 20200923203246 43749 site. ol3anRo0ouTpP54rV1CL+G2wQmj/3FBmAJaLSstgzD9QAV5ul/okZSzo UQHYxnR/n9fmRcmoBlOZVxTRCSbjx/JhH/gGtBhHqUCDJqLhZ4IUAu73 J05vRG1Awl5kQ7gFLyYYnDkGt1uirgYE1qvTWQyWjBrGE9iPXQ2jyhRh SYg=
tsn14k9otf7h05ung1on6jct80523f92.site. 3600 IN NSEC3 1 1 1 - TSSMLA96VTCIDS5ED2TOLKQFBS7STTBS  NS DS RRSIG
tsn14k9otf7h05ung1on6jct80523f92.site. 3600 IN RRSIG NSEC3 8 2 3600 20201027183923 20200928043708 43749 site. r3UpKARbQkEBMB5DsrxIAbclK85hEOX4/KA8Vp0CQlEYTlrmfedXhf2/ A8dI5qv2FA8A5W7im//MHqb8mr5usqW7wTcR36LfUfTfZdvGWVhj0oAY k7MVqyzRI5yOBfP3G9KtUbIrCmoYfYEAmxT0qT8i8cV7D0CGx0Y0uNbn qf8=
;; Received 674 bytes from 2a04:2b00:13ff::61#53(f.nic.site) in 247 ms

test.startdns.site.	300	IN	A	203.0.113.222
startdns.site.		172800	IN	NS	ns-1508.awsdns-60.org.
startdns.site.		172800	IN	NS	ns-1795.awsdns-32.co.uk.
startdns.site.		172800	IN	NS	ns-485.awsdns-60.com.
startdns.site.		172800	IN	NS	ns-863.awsdns-43.net.
;; Received 203 bytes from 205.251.197.228#53(ns-1508.awsdns-60.org) in 12 msat

ただし+traceはフルリゾルバのキャッシュを上書きしないため+traceがない状態でdigを実行するとNXDOMAINの状態に戻ってしまう。

ネガティブキャッシュの有効期限が切れてからもう一度digをしてみると、今度はちゃんとAレコードを取得することができた。

# dig test.startdns.site a

; <<>> DiG 9.10.6 <<>> test.startdns.site a
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21283
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;test.startdns.site.		IN	A

;; ANSWER SECTION:
test.startdns.site.	299	IN	A	203.0.113.222

;; Query time: 32 msec
;; SERVER: 172.30.8.241#53(172.30.8.241)
;; WHEN: Sun Oct 18 12:47:17 JST 2020
;; MSG SIZE  rcvd: 63

・ネガティブキャッシュを残さないように確認する方法

・@で対象のネームサーバを指定して直接問い合せる
・+norecurse:再帰的な名前解決の要求を無効にする
ドメイン名のネームサーバを確認する
# dig startdns.site ns +short
ns-1795.awsdns-32.co.uk.
ns-485.awsdns-60.com.
ns-863.awsdns-43.net.
ns-1508.awsdns-60.org.

そのネームサーバに対して直接確認する
# dig test.startdns.site a +norecurse +short @ns-1795.awsdns-32.co.uk.
203.0.113.222
(何も返ってこなければまだ設定されてないとわかる)

・ラブライブドメインのっとり事件

対処法としてはレジストラロックサービスなどを利用する。

最後に

実際に自分でドメイン名を取得して設定してみたり、digやwhoisでどのような動作をするのかを確認したりと、実際に手を動かしたことでDNSが実際にどういった役割を果たしているのかをしっかりと理解することができました。

特にAWSの試験ではこういうこと聞いてたのね、と自分の中の知識と紐付けられたのは大きな収穫でした。

また今回の記事の内容には含めませんでしたが、ドメインとは何か?やDNSの仕組みなどがとてもわかりやすく説明されており、書籍の厚さの割にはとても読みやすかったです。

「DNSってあまりよくわかってないな…」なんて方には超おすすめな本なので、是非とも手にとってみてください!


この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
1
PHP/Laravel, Kotlin/Spring Boot 趣味:ドラムなどの打楽器全般