補足資料4日目のページから参照
付録2 DNSサーバー(BIND9)
名前からIPアドレスを調べる仕組み「DNS」を、自分のサーバーで動かします。www.t3.metro-cit.internal という名前を、自分のサーバーのIPアドレスに結びつけ、Windowsから問い合わせて確かめます。
どのレポートにまとめるか
付録2のエビデンスは「図表のルールにしたがってレポートにまとめること」とされていますが、どのレポート課題に含めるかは書かれていません。4日目のページから参照されているので、課題4と一緒に扱う可能性が高いと考えられますが、授業で確認してください。
名前解決とは
人は www.t3.metro-cit.internal のような名前のほうが覚えやすく、コンピュータはIPアドレスでしか通信できません。その間を取り持つのが名前解決です。名前からIPアドレスを調べることを正引き、IPアドレスから名前を調べることを逆引きと呼びます。
名前解決の方法には、大きく2つあります。
- hostsファイル
- その機械の中にあるファイルに、名前とIPアドレスの組を書いておく。OSは、多くの場合DNSに問い合わせる前にまずこのファイルを見る。書いた内容はその1台にしか効かない
- DNS
- ネットワーク上のDNSサーバーに問い合わせる。名前の管理は世界中で分担されていて、答えはしばらくの間キャッシュ(記憶)される
DNSの階層
ドメイン名は、右から左へ、大きな範囲から小さな範囲へと並んでいます。www.example.com なら、いちばん右(見えないが、最後に「.」がある)が全体の根元(ルート)、次が com、次が example、最後が www です。名前の管理はこの階層に沿って分担されていて、それぞれの階層を担当するDNSサーバーが、次の階層の担当者を知っています。
- ルートサーバー
- 階層のいちばん上。各トップレベルドメイン(com、jp など)の担当者を知っている
- 権威DNSサーバー
- あるまとまり(ゾーン)について正式な答えを持つサーバー。付録2で作るBIND9はこれ
- フルサービスリゾルバ
- 利用者の代わりに階層をたどり、答えを記憶しておくサーバー。この実験のネットワークでは 192.168.100.1 がその役割
課題2では、www.metro-cit.ac.jp という、もう1段階深い名前について、この流れを説明することが求められています。階層のどこで担当のサーバーが分かれているか(ゾーンの区切り)は、ドメインごとに決まっていて、いくつかの階層を1つのサーバーがまとめて担当していることもあります。実際の流れは、Ubuntuで次のコマンドを実行すると観察できます(学内のネットワークの設定によっては、外部に直接問い合わせられず使えないことがあります)。
dig +trace www.metro-cit.ac.jp表示の中の IN NS の行が「次は誰に聞けばよいか」、最後の IN A の行が答えです。考察のヒント課題2では、答えが記憶(キャッシュ)されている場合とされていない場合で、問い合わせの流れが変わる点にも触れます。dig +trace が使えれば、実際の問い合わせの順番をエビデンスとして示せます。
hostsファイルとDNSの関係
1日目のhostsファイルとDNSは、どちらも「名前 → IPアドレス」を答えますが、仕組みが違います。hostsファイルは各機械の中の手書きのメモで、書いた機械だけに効きます。DNSはネットワーク越しに問い合わせる共有の電話帳で、サーバーの設定を1か所変えれば、そのサーバーに問い合わせるすべての機械に効きます。付録2の手順4が「1日目で設定した hosts を前提に」としているのは、両方の結果を見比べられるようにするためと考えられます。課題4は、この違いから利点と制約を考えるものです。考察のヒント名前とIPアドレスの対応を変えたいとき、hostsなら全部の機械を、DNSならサーバー1か所を直します。機械が10台、1000台に増えたらどうなるか、サーバーが止まったらどうなるかを考えると、利点と制約が見えてきます。
手順の解説
スクリーンショット(エビデンス)を撮るところ。マウスを乗せると撮るタイミングが表示され、押すとページ下のエビデンス一覧の該当項目へ移動します。考察を書くときに知っておきたいこと。マウスを乗せる(スマホでは押す)とヒントが表示されます。
BIND9を入れ、53番を開ける
sudo apt install -y bind9 dnsutils
sudo ufw allow 53/udpbind9 がDNSサーバー本体、dnsutils は確認に使う dig などの道具です。DNSの問い合わせはUDPの53番に届くので、ufwで許可します(BIND9はDockerではなくUbuntuに直接入れるので、ufwの設定がそのまま効きます)。
ゾーンを設定する
指導書には「/etc/bind/named.conf.local にゾーン設定を追加し、ゾーンファイルを作成して、www.t3.metro-cit.internal を自分のサーバーIPに対応付ける」とだけ書かれています。ファイルの中身の例を示すので、意味を理解してから、授業の指示に合わせて書いてください。
(1) 「このゾーンを担当する」と宣言する
sudo nano /etc/bind/named.conf.localzone "t3.metro-cit.internal" {
type master;
file "/etc/bind/db.t3.metro-cit.internal";
};「t3.metro-cit.internal というゾーンの正式な担当(master)はこのサーバーで、中身は指定したファイルに書いてある」という意味です。新しい版のBINDでは master の代わりに primary とも書けます。行末の ; と、最後の }; を忘れないようにします。
(2) ゾーンファイルを書く
ひな形として、BIND9に付いてくる db.local をコピーしてから書き換えると楽です。
sudo cp /etc/bind/db.local /etc/bind/db.t3.metro-cit.internal
sudo nano /etc/bind/db.t3.metro-cit.internal$TTL 86400
@ IN SOA ns.t3.metro-cit.internal. admin.t3.metro-cit.internal. (
2026092901 ; Serial
3600 ; Refresh
900 ; Retry
604800 ; Expire
86400 ) ; Negative Cache TTL
;
@ IN NS ns.t3.metro-cit.internal.
ns IN A 192.168.100.xxx
www IN A 192.168.100.xxx| 書き方 | 意味 |
|---|---|
$TTL 86400 | 答えを記憶してよい時間の既定値(TTL)。86400秒=1日 |
@ | このゾーン自身(t3.metro-cit.internal.)の省略形 |
IN | インターネット用の情報であることを示す決まり文句 |
SOA | ゾーンの基本情報。担当サーバーの名前、管理者の連絡先(@ を . に置き換えた形)、版番号、時間の設定が続く |
2026092901 ; Serial | ゾーンの版番号(シリアル番号)。日付+2桁の連番にすることが多い。中身を変えたら増やす |
; から後ろ | コメント |
NS | このゾーンを担当するDNSサーバーの名前 |
A | 名前 → IPv4アドレスの対応。www は www.t3.metro-cit.internal の省略形 |
名前の最後の「.」の有無で意味が変わる
ns.t3.metro-cit.internal. のように最後に . がある名前は「これで完全な名前」という意味です。. がない名前は、後ろに自動でゾーン名が付け足されます。www と書けば www.t3.metro-cit.internal になり便利ですが、完全な名前のつもりで最後の . を忘れると、ns.t3.metro-cit.internal.t3.metro-cit.internal のようなおかしな名前になります。考察のヒント最後の「.」の付け忘れは書式としては正しいので、named-checkzone でも見逃されることがあります。課題3では、検査で見つけられる誤り(書式)と見つけられない誤り(意図と違う内容)を分けて論じると深まります。
設定を検査してから反映する
sudo named-checkconf
sudo named-checkzone t3.metro-cit.internal /etc/bind/db.t3.metro-cit.internal
sudo systemctl restart bind9
sudo systemctl status bind9named-checkconf- 設定ファイル(named.conf とその仲間)の書式を検査する。何も表示されなければ問題なし
named-checkzone ゾーン名 ファイル- ゾーンファイルの中身を検査する。成功すると下のように表示される
zone t3.metro-cit.internal/IN: loaded serial 2026092901
OK検査に通ってから再起動します。考察のヒント書き間違えたまま再起動すると、DNSのサービスそのものが起動できなくなり、その名前を使っている全員が困ります。影響の大きさから、検査の意義を論じられます。status では、サービスの正式名である named.service として表示されます(bind9 は別名)。active (running) を確かめます。エビデンス2の撮影ポイント撮影ポイント エビデンス2手順3で検査に通り、sudo systemctl restart bind9 のあとに sudo systemctl status bind9 を実行した直後。active (running) が見えるように撮る。エビデンス一覧の項目へ移動 ↓
Windowsから問い合わせる
nslookup www.t3.metro-cit.internal 192.168.100.xxxnslookupDNSに問い合わせるwww.t3.metro-cit.internal調べたい名前192.168.100.xxx問い合わせ先のDNSサーバー(自分のサーバー)サーバー: UnKnown
Address: 192.168.100.107
名前: www.t3.metro-cit.internal
Address: 192.168.100.107下の「名前」と「Address」が答えです。エビデンス3の撮影ポイント撮影ポイント エビデンス3手順4で、Windowsのターミナルから nslookup www.t3.metro-cit.internal 192.168.100.xxx を実行した直後。打ったコマンドの行と、「名前」「Address」の行が1枚に入るように撮る。エビデンス一覧の項目へ移動 ↓上の「サーバー: UnKnown」は、問い合わせ先のDNSサーバー自身の名前を逆引きできなかった、という意味で、正引きの答えが出ていれば問題ありません。考察のヒント「サーバー: UnKnown」は、DNSサーバー自身の逆引きができなかったという表示です。正引きと逆引きが別々に登録される情報であることを、自分の結果から示せます(課題1)。
結果の読み方(dig)
dig @localhost www.t3.metro-cit.internal
systemctl status bind9;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;www.t3.metro-cit.internal. IN A
;; ANSWER SECTION:
www.t3.metro-cit.internal. 86400 IN A 192.168.100.107
;; SERVER: 127.0.0.1#53(localhost) (UDP)@localhost- 問い合わせ先。自分自身のBIND9に聞いている
status: NOERROR- 正常に答えが返った。
NXDOMAINなら「そんな名前はない」 flags: … aa …- aa は authoritative answer(正式な担当者からの答え)
- ANSWER SECTION
- 答えの本体。名前・TTL(秒)・種類(A)・IPアドレス
この画面がエビデンス1です。エビデンス1の撮影ポイント撮影ポイント エビデンス1BIND9を再起動したあと、Ubuntuで dig @localhost www.t3.metro-cit.internal を実行した直後。status: NOERROR と ANSWER SECTION の行が1画面に入るように撮る。エビデンス一覧の項目へ移動 ↓
エビデンス(スクリーンショット3点)
課題を考えるための材料
課題1DNSの「正引き」と「逆引き」の違いは何か。
- 何を手がかりに、何を調べるのかの違いを、この実験の具体的な値で説明できるか
- 逆引きには専用の仕組みがある。IPアドレスを逆順に並べた特別なゾーン(192.168.100.0/24 なら
100.168.192.in-addr.arpa)に、PTRレコードとして登録する - 手順4の「サーバー: UnKnown」は、どちらの失敗か
- 逆引きは、どんな場面で使われるか(ログに残ったIPアドレスを人が読める名前にする、など)
課題2http://www.metro-cit.ac.jp にアクセスする際、DNSはどのような順序でIPアドレスを問い合わせるか。ドメインの階層構造(.jp、.ac、.metro-cit等)を含めて説明せよ。
- 図1の流れを、この名前に当てはめるとどうなるか。まず名前を右から順に分解する
- 最初に問い合わせるのは誰か(ブラウザ・OS・リゾルバ・ルート…)。登場人物を順番に並べる
- キャッシュがある場合とない場合で、流れはどう変わるか
- 可能なら
dig +traceの実際の結果を示し、階層の区切りが実際にどこにあるかを確かめる(結果の抜粋はエビデンスとして使える)
課題3DNS設定ファイルの編集後に named-checkconf や named-checkzone を実行することには、どのような意義があるか考察せよ。
- 書式を間違えたまま再起動したら、DNSサーバーはどうなるか。そのとき、このサーバーに名前を問い合わせているほかの機械はどうなるか
- この実験には、同じ「反映する前に検査する」考え方が何度も出てくる(
sshd -t、docker compose config、nginx -tなど)。共通する目的は何か - ゾーンファイルの版番号(Serial)を増やし忘れると、ほかのDNSサーバーとの間で何が起きうるか
課題4hostsファイルによる名前解決とDNSによる名前解決には、それぞれどのような利点と制約があるか。
- 名前とIPの対応を変えたいとき、それぞれ何か所を直す必要があるか。機械が10台、1000台だったら
- サーバーが止まっていたり、ネットワークが切れていたりするとき、それぞれは使えるか
- どちらが先に参照されるか。それによって、どんな便利さと、どんな混乱が起きうるか
- 1日目のhostsと付録2のDNSを両方設定したとき、自分の環境で実際にどうなったか