クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

DNSで名前を一歩ずつ調べる

このレッスンのあとで: digで名前を調べ、どのレコードが答えたかを説明できる。

55分のレッスンコマンド11件DHCP と DNS のラボ:小さなネットワークの dnsmasq をブラウザーで設定

一人にしか開かないページ

DNSの検索は、名前をアドレスに変えます。機器は、まず自分のhostsファイルを調べ、そのあとでDNSサーバーに聞きます。この順番を知っていれば、一台のノートPCでだけ動かない名前の原因を見つけられます。

サポート担当に電話が入ります。店のウェブページが、あるノートPCでは開き、別のPCでは開きません。どちらも同じネットワークにいます。

原因は、二台目のPCにある小さなファイルの、古い一行でした。誰もネットワークに聞かないうちに、その行が名前に答えてしまいます。

今日は、機器がどこを探すのかと、戻ってきた答えの読み方を学びます。

このレッスンのゴール

メモ

digで名前を調べ、どのレコードが答えたかを説明できる。

重要な言葉

ことばいみれい
リゾルバ機器の中で、名前を調べる部分
hostsファイル機器自身が持つ、名前とアドレスの短い一覧/etc/hosts
CNAMEこの名前は別の名前だと伝えるレコード
TTL答えを覚えておいてよい秒数300
NXDOMAINこの名前は存在しないという答え
ゾーン一つのDNSサーバーが受け持つ名前の範囲shop.test

学生が入力するセルは、このプレビューでは空白です。

機器は二か所で名前を探す

ネットワークに聞く前に、機器は自分のhostsファイルを読みます。名前がそこにあれば、その答えが勝ちます。そのあとで初めて、リゾルバがDNSサーバーに聞きます。

順番は /etc/nsswitch.conf に書かれています。files がhostsファイルで、dns がサーバーです。

機器が使う順番を読む

コマンド
grep '^hosts' /etc/nsswitch.conf

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

プログラムと同じ方法で名前を調べる

コマンド
getent hosts localhost

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

DNSサーバーはレコードで答える

DNSサーバーはゾーン、つまり受け持つ名前を持っています。名前ごとにレコードがあり、答えにはTTLが付きます。リゾルバは、その時間だけ答えを覚えておけます。

ここでは、作り話の店のための小さなサーバーを自分で起動します。ポート5300で、この機器の中だけで待ち、shop.test というゾーンを一つ持ちます。

店の練習用サーバーを起動する

コマンド
sudo dnsmasq --conf-file= --no-hosts --no-resolv --port=5300 --listen-address=127.0.0.1 --bind-interfaces --local-ttl=300 --local=/shop.test/ --host-record=shop.test,10.20.30.40 --host-record=mail.shop.test,10.20.30.50 --cname=www.shop.test,shop.test --mx-host=shop.test,mail.shop.test,10 --txt-record=shop.test,v=demo

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

例: digで聞く

入力聞くこと出力
dig +short @127.0.0.1 -p 5300 shop.testAレコード10.20.30.40
dig +noall +answer ... www.shop.test名前とそのレコードCNAMEの行、次にAの行
dig +short ... shop.test MXメールを受け取る相手10 mail.shop.test.
dig +short ... -x 10.20.30.40このアドレスの名前shop.test.

学生が入力するセルは、このプレビューでは空白です。

店のアドレスを聞く

コマンド
dig +short @127.0.0.1 -p 5300 shop.test

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

wwwの名前から鎖をたどる

コマンド
dig +noall +answer @127.0.0.1 -p 5300 www.shop.test

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

メールの受け取り先を聞く

コマンド
dig +short @127.0.0.1 -p 5300 shop.test MX

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

アドレスの名前を聞く

コマンド
dig +short @127.0.0.1 -p 5300 -x 10.20.30.40

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ステータスは何が悪かったかを教える

答えにはステータスが付きます。NOERROR は、サーバーが答えたという意味です。NXDOMAIN は、サーバーが持つゾーンにその名前が無いという意味です。

REFUSED は、サーバーがその名前には一切答えないという意味です。練習用サーバーは shop.test だけを持ち、ほかに聞く相手がいません。

ゾーンに無い名前を聞く

コマンド
dig @127.0.0.1 -p 5300 nothing.shop.test | grep status

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

別のゾーンの名前を聞く

コマンド
dig @127.0.0.1 -p 5300 shop.invalid | grep status

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

「digとpingは、同じ方法で名前を調べる」と考える人が多いのですが、違います。dig はDNSサーバーにだけ聞きます。pingを含む多くのプログラムは、先にhostsファイルを読みます。名前がブラウザーでは動くのに、dig では何も出ないことがあります。

二つの方法が食い違うのを見る

コマンド
dig +short @127.0.0.1 -p 5300 localhost

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

本物の検索は、上から順に下りる

インターネットには、すべての名前を知っているサーバーはありません。リゾルバは、ルート、末尾の担当、会社の担当の順に聞きます。

ラボにはインターネットが無いので、この表は読むだけで実行しません。www.shop.example のための質問を示します。

例: www.shop.example を調べる

段階リゾルバが聞く相手答え
1ルートサーバー.example の担当サーバーに聞いてください
2.example のサーバーshop.example の担当サーバーに聞いてください
3shop.example のサーバーwww は 203.0.113.20。300秒覚えてよい
4300秒の間は誰にも聞かないリゾルバは記憶から答える

学生が入力するセルは、このプレビューでは空白です。

練習用サーバーを止める

コマンド
sudo pkill -f '[-]-port=5300'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

発展: digのヘッダー

練習用サーバーを起動したまま、dig @127.0.0.1 -p 5300 shop.test をもう一度実行し、ヘッダー全体を読みましょう。

フラグの行と、質問数と答えの数を探します。次に nothing.shop.test を聞いて、数を比べます。どれが変わりましたか。

このラボとソースについて: DHCP と DNS のラボ:小さなネットワークの dnsmasq をブラウザーで設定

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。