「 DNS をはじめよう」はそんな著者が、普段開発や運用をしているエンジニアに「 DNS のことを知っておくと自分でなんとか出来る範囲が広がるよ」と伝えたくて書いた一冊 想定する読者層 この本は、こんな人に向けて書かれています。 これからシステムやプログラミングを学ぼうと思っている新人 ウエブ系で開発や運用をしているアプリケーションエンジニア 「インフラがよく分からないこと」にコンプレックスのある人 ドメインを買ったりするけど DNS はあまり分かっていない人 プログやポートフォリオサイトを独自ドメインで作ってみたい人 AWS や Route53 という単語に興味のある人 この本の特徴 この本では実際にドメインを 1 っ購人します。買ったドメインを使って手を動かして 試しながら学べるので理解がしやすく、インフラ初心者でも安心して読み進められる内容 です。 また実際にありがちなトラブルをとり上げて、 こんな障害が起きたら原因はどう調べたらいいのか ? ・問題をどう解決したらいいのか ? どうしたら事前に避けられるのか ? を解説するとともに、実際にコマンドを叩いて反復学習するためのドリルもついてい ます。 この本のゴール この本を読み終わると、あなたはこのような状態になっています。 ドメインを買うときは何に注意してどこで買ったらいいか分かっている Whois 情報に何を登録すべきか分かっている ・障害が起きたときに黒い画面 ( ターミナル ) で dig コマンドや whois コマンドを駆 3
4.4dig を叩いてリソ ースレコードを確認してみよう 解答 正解は B です。 whois コマンドを叩くと「 Expires 011 」という項目に有効期限が表示さ れます。今回の tigerkyoro. jp であれば、次のように whois コマンドを叩けば、有効期限 が 2019 / 01 / 31 であることが分かります。 $ whois tigerkyoro ・ JP [Querying whois ・ jprs ・ jp] [whois ・ jprs ・ jp] [ JPRS database provides information 0 Ⅱ network administration. Its use is [ restricted tO network administration purposes . For further information, [ use 'whois —h whOis ・ jprs ・ jp help'. TO suppress Japanese output , add' /e ー [ at the end of command, e ・ g ・ 'whois -h whois ・ jprs ・ jp xxx/e ー Domain lnformation: [Domain Name] CRegistrant] [Name Server] [Name Server] CSigning Key] [Created 0 Ⅱ ] [Expires 0 司 CStatus] CLast Updat ed] Contact lnformation: [Name ] [Emai1] [Web Page ] CPosta1 code] [PostaI Address] CPhone ] CFax] TIGERKYORO . JP Tiger Corporation ns . namedserver . net ns2. namedserver . net 2016 / 01 / 18 2019 / 01 / 31 Active 2018 / 02 / 01 01 : 05 : 08 (JST) C1arivate Ana1ytics (Japan) CO. ,Ltd. admin@thomsonbrandy ・ jp 107 ー 6119 Akasaka Park Bui1ding , 19F , 5 ー 2 ー 20 , Akasaka , Minato-ku ,Tokyo 03 ー 4589 ー 3900 03 ー 4589 ー 3240 4.4 dig を叩いてリソースレコードを確認してみよう こからは調べたい内容に応じて、どう dig コマンドを叩けばいいのか ? を 1 つ 1 つ 確認していきます。 dig を叩いてもサーパは壊れないし、地球も爆発しません。軽い気持 ちでどんどん叩いて dig に慣れていきましよう。 川 5
4.3Whois を叩いてドメインやの持ち主を調べよう Non—authoritative : Name : Address : Name : Address : Name : Address: Name : Address : > exit techbookfest. org 216.239.36.21 techbookfest . org 216.239.38.21 techbookfest . org 216.239.32.21 techbookfest . org 216.239.34.21 大昔は nslookup を叩くと「 nslookup は非推奨だし、将来的には廃止されるから今後は dig や host を使ってね、 7 」という警告メッセージが都度出ていたので、その頃を知ってい る人は「 nslookup っていずれなくなるんでしょ ? 」という認識かと思いますが、実際は BIND 、 89.9.0a3 が公開されたタイミングで nslookup からこの警告メッセージは消え、リ リースノートには「 nslookup を非推奨として扱うのはもうやめるね。非推奨の警告も消 したよ、 9 」と書かれていますので、 nslookup が非推奨だの廃止だのという話は一旦なく なったようです。 実際、何もトラブルが起きておらず、単純に名前解決した結果を知りたいだけであれ tihost や nslookup でも事足ります。ですがトラブル発生時の調査手段として host や nslookup を使おうとすると、必要な情報が不足していたり調べてきた結果を下手に加工 して出力したりするため、どちらもあまり使いやすいコマンドとは言えません。これを機 に今後は dig を使っていきましよう ! 生 3 Whois を叩いてドメインやの持ち主を調べよう whois コマンドを使うと、第 1 章「ドメインと Whois 」でお話ししたような Whois 情 報を調べることができます。しかも whois コマンドはドメインの持ち主だけでなく、 IP アドレスの持ち主を調べることもできます。 ドメインの持ち主を調べる $ who i s ドメイン 、 7 Note: nslookup is deprecated and may be removed from future releases. Consider using the 、 dig' or 、 host' programs instea. d. と表示されていました 、 8 BIND はフルリゾルバとネーームサー . パ両方の機能を持っ DNS サーパで、 ISC (lnternet Software Consortium) によって開発が行われています。多くの DNS サーバで BIND が採用されていますが「夏 の BIND 脆弱性祭り」などと揶揄されるほど脆弱性の注意喚起とそれに伴うアップデート推奨が多いた め、最近は Unbound など他の DNS サーバへの乗り換えもよく聞かれます。 nslookup is no longer tO be trea. ted as deprecated. Remove "deprecated" warning message. * 9 川 3
第 4 章 dig と whOis を叩いて学ぶ DNS 8. ルートネームサー . バは「 . fun のネームサーバは a. ⅲ c. fun だよ」と教えてくれる 9. フルリゾルバは a. nic. fun に nsl. startdns. fun に紐づく IP アドレスを聞きに行く 10. a. nic. fun は「 startdns. fun のネームサーバは nsl. startdns. fun だよ」と教えてく 11. 11S1. startdns. fun の IP アドレスを知っているのが nsl. startdns. fun なのでフルリ ゾルバはいつまでも nsl. startdns. fun にたどり着けない 「田中さんの住所は田中さんの家に行って田中さんに聞いて」みたいなもので、このま まだといつまでも startdns. fun に紐づく IP アドレスが分かりません。 これを解消するため、自分でネームサーバを立てるときは上位の DNS コンテンツ サーバ ( ここでは a. nic. fun のこと ) に、ネームサーバの IP アドレスも一緒に登録し ておかなければいけません。これをグルーレコードと呼びます。上位の a. ⅲ c. fun から nsl. startdns. fun への道をちゃんと繋げてくれるレコードだから glue ( 接着剤のこと ) レ コードなんですね。 お名前.com であればドメイン Navi の中に「ネームサーバー名としてのホストを設定 する」という設定画面がありますので、そこで自分が立てたネームサーバのドメイン名 (nsl. startdns. fun) とその IP アドレス ( 203.0.113.222 ) を登録すれば OK です。これで いつまでも nsl. startdns. fun にたどり着けない無限ループが回避できるようになります。 124
4 C H A P T E R dig と whois を叩いて学ぶ DNS 性能向上のための格言に「推測するな計測せよ」というものがありますが、 のようなエンジニアらしからぬ回答をしなくて済みます。 ・ 48 時間ほど待てば多分・ 「恐らく DNS の浸透が原因じゃないかと・ 調べ方さえ知っていれば原因を調査できますし あるいはサイトが意図した動作をしないとき、 DNS 絡みのトラブルが起きたとき、 障害発生時にも同じことが言えます。 99 DNS の仕組みを学んでいきましよう。 この章では dig コマンドと whois コマンドを実際に叩いて色んなことを調べながら、
第 4 章 dig と whOis を叩いて学ぶ DNS MSG SIZE rcvd : 395 ただ techbookfest.org に紐づく IP アドレスが知りたかっただけなのに、ものすごく いつばい出てきました。 dig はまるでプキチ、 6 のようなコマンドなのでちょっと聞いただけで「調べてきた結果 を教えまし ! まずキミの質問はこれでし ! このドメインに紐づく IP アドレスはこれと これとこれとこれなのでし ! ちなみに IP アドレスを教えてくれたネームサーバの名前 はこれでし、ネームサーバの IP アドレスはこっちなのでし ! それからフルリゾルバは 127.0.0.1 で調査には 148msec かかったのでし ! 」と調査の過程や付加情報まで含めて全 部教えてくれます。 有難いのですが情報は多くありすぎても混乱します。いいから簡潔に「 techbookfest.org に紐づく IP アドレス」だけを教えて ! という場合は十 short というオプションを付けま しよう。十 short さえつければ dig はごく簡潔に答えてくれます。 * 6 スプラトウーン 2 に出てくる武器屋の店主。プキの話になると超早ロで果てしなく解説するプキマニア。 語尾が「でし ! 」でオタク感があふれていて素晴らしく可愛い。 0 4 ↓ 1 宀 -4 ↓一 1 一 0 つんつみつみつる ,.< 4 6 8 2 0 3 3 3 3 V 9 9 9 3 3 3 3 bO つみつ乙つん 2 ・ 0 ( 0 ( し ( 0 ( 0 上イよイよイ上 4-2.1 host や nslookup じやダメですか ? ちなみに h ( ) st コマンドや nslookup コマンドでも同じように調べることができます。 $ host —t a techbookfest. org techbookfest . org has address 216.239.36.21 techbookfest . org has address 216.239.38.21 techbookfest. org has address 216.239.32.21 techbookfest . org has address 216.239.34.21 $ nslookup > set type=a > techbookfest . 0 て g Server : 172.31.0.2 Address : 172.31.0.2 # 53 102
第 5 章トラブルシューティング だから . dev は HTTPS に強制リダイレクトさせるね」ということなんだと推察してい . dev だけなく . app という TLD も同様のようですので、 これらのドメインがもう ニューアルを機に運用を A 社から B 社に移管することになった。でも移管と言っても何 自社サイト (example. net) は Web 制作会社の A 社にお任せしていたが、サイトリ 5.3 サイト移管の AtoZ う。「自分の持ち物でないドメイン」を勝手に使うのは、今回のようなトラブルの元です。 例示やテストで使っていいドメインが用意されているので、基本的にはそれを使いましょ 用のメールアドレスにしても第 4 章「 dig と whois を叩いて学ぶ DNS 」で書いたとおり ざっくり言うと、 . test はいいけど . dev2 はだめです。社内ネットワークにしてもテスト ルが起きてしまいます。 ば . dev2 でもいいのか ? といった根本原因と解決策が分かっていないとまた同じトラブ のような記事も見ますが、なんで . test にしたら直ったのか ? . test でいいならたとえ このトラブルについては「 . dev が使えなくなったからとりあえず . test にした ! 解決 ! 」 るのではなく、何か特別な用途で使わせるつもりなのではないか、と思われます。 HTTPS でしか使えないということは、 Google は . dev を.com や . net のように普通に売 をすればいいのかふんわりしていてよく分からない 。そんなときは以下のような移 管前後の表 ( 表 5.1 ) を作って埋めていきましよう。 1. ドメインの管理 2. お店 ( レジストラ・リセラ ) 3. ネームサーバ 4. ウエプサーバ 表 5.1 サイト移管前後表 多管前 A 社 輩 3 名前.com お名前 . c ( ) m A 社のクラウドサーバ ( 203.0.113.111 ) 表 5.1 のようにドメインの管理は A 社から B 社に変わるけれど、 移管後 B 社 お名ⅱ行.com Route53 EC2 ( 203.0.113.222 ) レジストラはお名 前.com のまま変わらないのであれば、お名前.com の「お名前 ID 付け替え」という機能 で A 社のお名前 ID から B 社のお名前 ID にドメインを移動することができます。 ドメインの管理が B 社に移ったらお名前.com のネームサーバにあったリソースレコー ドを Route53 にコヒ。ーして、ドメイン Navi ( お名前 . c ( ) m の管理画面 ) でネームサーバ この時点ではまだ移管前のウェフ。サーバを使っ を Route53 に変更します。仮にサイトリニューアルが 5 月 1 日だったとしたら、これら の作業は 4 月中に済ませておきましよう。 128
2.4 リソースレコード つまり社長が A 部門というゾーンを A 部長に委任していたように、ルートネームサー バに任せることを委任と呼びます。 このように自身が任されているゾーンを分割して、その一部のゾーンを他のネームサー リソースレコードには次 ( 表 2. I) のように A レコードや MX レコードといった種類 は 03 一〇〇〇〇一〇〇〇〇」といったリソースレコードがあるのです。 うゾーンの中には「 B さんの携帯番号は 090 一〇〇〇〇一〇〇〇〇」や「 B さんの自宅番号 の C さんは B さんというゾーンを管理してます。そして C さんが管理する B さんとい 先ほどの会社の例で言うと、 A 部長は A 部門というゾーンを管理していて、マネージャ ドを書くことができます。 「 staging. startdns. fun とそれに紐づく IP アドレス」のようにたくさんのリソースレコー とそれに紐づく IP アドレス」や「 www.startdns.fun とそれに紐づく IP アドレス」、 をリソースレコードと呼びます。たとえ tistartdns. fun のゾーンの中には「 startdns. fun そしてこのゾーンの中にある「ドメインと IP アドレスの紐づけ」ひとつひとつのこと 帳が管理している範囲を前述のとおりゾーンと呼びます。 「 example.com の電話帳」のようにドメインごとに分かれています。この一冊一冊の電話 ネームサーバのお腹の中にある電話帳は管理しやすいように 「 startdns. fun の電話帳」 2.4 リソースレコード り、任されたゾーンをさらに分割して他のネームサーバに委任したりできます。 ているネームサーバは、そのドメインについて権威を持つので、サフ。ドメインを作った バは . fun というゾーンを a. nic. fun に委任していた、ということです。ゾーンを委任され リソースレコードのタイプ値の意味 を表 2.1 リソースレコードの種類 があり、それぞれ書き方も決められています。 A レコード CNAME SOA TXT (SPF) MX レコード NS レコード ドメインに紐づく IP アドレス ( 例 : ウェブサーバ ) ドメインのゾーンを管理するネームサーバ ドメインに紐づくメール受信サーバ このドメインのメール送信元サーバ ドメインのゾーンの管理情報 このドメインの別名でリソースレコードの参照先 それぞれのリソースレコードをどういうときに使うのか ? については第 3 章「 AWS の ネームサーバ (Route53) を使ってみよう」や第 4 章「 dig と whois を叩いて学ぶ DNS 」 で具体例を見て、手を動かしながら確認していきましよう。 67
4.4dig を叩いてリソー スレコードを確認してみよう しかも AIias レコードには「 ZONEAPEX でも使える」だけでなく、「 CNAME と違っ て名前解決が 1 回で済む」という利点があります。 たとえば startdns. fun というドメインに紐づく IP アドレスを調べようとしたとき、 CNAME レコードの場合は「 startdns. fun の CNAME レコードは cdn. example. jp で、 cdn. example. jp の A レコードは 203.0.113.222 」のように名前解決が 2 回発生します。対 して Route53 の Alias レコードで「 startdns. fun のェイリアス先は cdn. example. jp であ る」という設定をしておけば、フルリゾルバが startdns. fun の A レコードを問い合わせ に来たら「 startdns. fun の A レコードは 203.0.113.222 」のように一発で IP アドレスを 返すので名前解決は 1 回で済みます。 ネームサーバで Route53 を使っていても、参照先の CDN やロードバランサーが AWS 外なのであれば CNAME を使うしかありませんが、参照先が AWS 内のサービスであれ ば AIias レコードを使わない手はありません。 ZONE APEX に限らず積極的に使いま 4.4.13 グルーレコード ところでドメインを買ったとき、お名前.com のネームサーバや Route53 を使う他に自 力でネームサーバを立てて使うこともできます。 Linux サーバを立てて Apache をインス トールすればウエプサーバになるように、 Linux サーバを立てて BIND をインストール すればもうそれは立派なネームサーバです。 たとえば筆者が startdns. fun というドメインを買って、自分で作ったネームサーバに nsl. startdns. fun という名前を付け、 startdns. fun の NS レコードに nsl. startdns. fun を 設定したとします。このとき、ブラウザで http : / / startd Ⅱ s. fu Ⅱ / を開こうとすると次 のようになります。 123 きに行く 7. フルリゾルバはルートネームサーバに nsl. startdns. fun に紐づく IP アドレスを聞 6. a. nic. fun は「 startdns. fun のネームサーバは nsl. startdns. fun だよ」と教えてく 5. フルリゾルバは a. nic. fun に startdns. fun に紐づく IP アドレスを聞きに行く 4. ルートネームサーバは「 . fun のネームサーバは a. nic. fun だよ」と教えてくれる 3. フルリゾルバはルートネームサーバに startdns. fun に紐づく IP アドレスを聞きに ことを確認 2. フルリゾルバは自分の中に startdns. fun に紐づく IP アドレスのキャッシュがない 1. フルリゾルバに startdns. fun に紐づく IP アドレスを聞きに行く
4.4dig を叩いてリソ ースレコードを確認してみよう という会社に会員登録完了メールや注文完了メールが飛んでいってしまい、相手方にご迷 惑であると共に情報漏洩の恐れもあります。なかなかびんと来ないかも知れませんが、誰 かがアンケートに適当な住所を書いたせいで全然関係ない自分の家にダイレクトメールが 届いたら迷惑ですよね。 ありがちですがお問い合わせフォームのメールアドレスの例に sample@test.com のよ うに書くのもやめましよう。銀行に行って申請用紙のサンプルに自分の住所が部屋番号ま でばっちり書かれていたらぎよっとしますよね ? それと同じことです。実在する他人の 住所や電話番号を勝手に使わないのと同じように、他人のドメインも勝手に使わないよう 例示やテスト専用のドメインを使おう 他人が持っているドメインを勝手に使ってはいけない、ということは分かりました。で は誰のものでないドメインならいいのでは ? と思われるかも知れませんが、現時点で誰 のものでもなくても明日には誰かがそのドメインを取得するかも知れませんのでこれもや はりお勧めしません。 じゃあどうしたらいいのかというと、実はインターネットでは「例示やテストで使っ ていいドメイン」というものが定められて、 21 います。テストユーザのメールアドレスや、 example. net example. C()111 example. jp example. co ・ jp フォームで例として書くメールアドレスには次のドメインを使いましよう。 これらのドメインであれば将来的に誰かのものになる可能性もありませんし、 レコードは MX レコードも A レコードも設定されていないため、予期せぬ第三 かりメールが飛んでいってしまうことは避けられます。 生 4.5 NS レコード リソース 者っへうっ ドメインのネームサー . バを指定しているのが NS レコードです。キャンペーンサイト用 にサブドメインを増やしたいけど、サフ。ドメインってどこで作ればいいんだっけ ? とい うときは次のような dig コマンドを叩いて NS レコードを調べればわかります。 、 21 RFC2606 で定められている example.com や example. net 、もしくは JPRS が定めている example. jp や example. co. jp などを使いましよう。 https://jprs ・ jp/faq/use/ 113